Simplify std::num::Primitive trait definition

This removes the `Primitive::{bits, bytes, is_signed}` methods and removes the operator trait constraints, for the reasons outlined below:

- The `Primitive::{bits, bytes}` associated functions were originally added to reflect the existing `BITS` and `BYTES` statics included in the numeric modules. These statics are only exist as a workaround for Rust's lack of CTFE, and should probably be deprecated in the future in favor of using the `std::mem::size_of` function (see #11621).

- `Primitive::is_signed` seems to be of little utility and does not seem to be used anywhere in the Rust compiler or libraries. It is also rather ugly to call due to the `Option<Self>` workaround for #8888.

- The operator trait constraints are already covered by the `Num` trait.
This commit is contained in:
Brendan Zabarauskas
2014-01-18 08:53:00 +11:00
parent 80a3f453db
commit 472dfe74b3
5 changed files with 9 additions and 84 deletions

View File

@@ -17,6 +17,7 @@
use clone::{Clone, DeepClone};
use cmp::{Eq, Ord};
use mem::size_of;
use ops::{Add, Sub, Mul, Div, Rem, Neg};
use ops::{Not, BitAnd, BitOr, BitXor, Shl, Shr};
use option::{Option, Some, None};
@@ -381,19 +382,7 @@ pub trait Primitive: Clone
+ Num
+ NumCast
+ Orderable
+ Bounded
+ Neg<Self>
+ Add<Self,Self>
+ Sub<Self,Self>
+ Mul<Self,Self>
+ Div<Self,Self>
+ Rem<Self,Self> {
// FIXME (#5527): These should be associated constants
// FIXME (#8888): Removing `unused_self` requires #8888 to be fixed.
fn bits(unused_self: Option<Self>) -> uint;
fn bytes(unused_self: Option<Self>) -> uint;
fn is_signed(unused_self: Option<Self>) -> bool;
}
+ Bounded {}
/// A collection of traits relevant to primitive signed and unsigned integers
pub trait Int: Integer
@@ -536,7 +525,7 @@ pub trait ToPrimitive {
macro_rules! impl_to_primitive_int_to_int(
($SrcT:ty, $DstT:ty) => (
{
if Primitive::bits(None::<$SrcT>) <= Primitive::bits(None::<$DstT>) {
if size_of::<$SrcT>() <= size_of::<$DstT>() {
Some(*self as $DstT)
} else {
let n = *self as i64;
@@ -621,7 +610,7 @@ macro_rules! impl_to_primitive_uint_to_int(
macro_rules! impl_to_primitive_uint_to_uint(
($SrcT:ty, $DstT:ty) => (
{
if Primitive::bits(None::<$SrcT>) <= Primitive::bits(None::<$DstT>) {
if size_of::<$SrcT>() <= size_of::<$DstT>() {
Some(*self as $DstT)
} else {
let zero: $SrcT = Zero::zero();
@@ -677,7 +666,7 @@ impl_to_primitive_uint!(u64)
macro_rules! impl_to_primitive_float_to_float(
($SrcT:ty, $DstT:ty) => (
if Primitive::bits(None::<$SrcT>) <= Primitive::bits(None::<$DstT>) {
if size_of::<$SrcT>() <= size_of::<$DstT>() {
Some(*self as $DstT)
} else {
let n = *self as f64;