diff options
| author | Brendan Zabarauskas <bjzaba@yahoo.com.au> | 2014-01-15 11:32:04 +1100 |
|---|---|---|
| committer | Brendan Zabarauskas <bjzaba@yahoo.com.au> | 2014-01-16 11:51:33 +1100 |
| commit | 1dd6906db2e6749bc3f113068e7493070b276feb (patch) | |
| tree | bf4ce1a1c06bceadb28c70a4d522c9a5b9921738 | |
| parent | 149fc76698318f8f7cdfaa37a818e347721764e7 (diff) | |
| download | rust-1dd6906db2e6749bc3f113068e7493070b276feb.tar.gz rust-1dd6906db2e6749bc3f113068e7493070b276feb.zip | |
Merge Bitwise and BitCount traits and remove from prelude, along with Bounded
One less trait in std::num, and three less exported in the prelude.
| -rw-r--r-- | src/etc/vim/syntax/rust.vim | 3 | ||||
| -rw-r--r-- | src/libextra/enum_set.rs | 2 | ||||
| -rw-r--r-- | src/libextra/num/bigint.rs | 2 | ||||
| -rw-r--r-- | src/librustc/util/sha2.rs | 1 | ||||
| -rw-r--r-- | src/librustpkg/sha1.rs | 1 | ||||
| -rw-r--r-- | src/libstd/num/f32.rs | 2 | ||||
| -rw-r--r-- | src/libstd/num/f64.rs | 2 | ||||
| -rw-r--r-- | src/libstd/num/i16.rs | 4 | ||||
| -rw-r--r-- | src/libstd/num/i32.rs | 4 | ||||
| -rw-r--r-- | src/libstd/num/i64.rs | 4 | ||||
| -rw-r--r-- | src/libstd/num/i8.rs | 4 | ||||
| -rw-r--r-- | src/libstd/num/int.rs | 6 | ||||
| -rw-r--r-- | src/libstd/num/int_macros.rs | 3 | ||||
| -rw-r--r-- | src/libstd/num/mod.rs | 31 | ||||
| -rw-r--r-- | src/libstd/num/u16.rs | 2 | ||||
| -rw-r--r-- | src/libstd/num/u32.rs | 2 | ||||
| -rw-r--r-- | src/libstd/num/u64.rs | 2 | ||||
| -rw-r--r-- | src/libstd/num/u8.rs | 2 | ||||
| -rw-r--r-- | src/libstd/num/uint.rs | 2 | ||||
| -rw-r--r-- | src/libstd/num/uint_macros.rs | 5 | ||||
| -rw-r--r-- | src/libstd/prelude.rs | 3 |
21 files changed, 45 insertions, 42 deletions
diff --git a/src/etc/vim/syntax/rust.vim b/src/etc/vim/syntax/rust.vim index 65e7cd06149..fdb978ae7e1 100644 --- a/src/etc/vim/syntax/rust.vim +++ b/src/etc/vim/syntax/rust.vim @@ -83,8 +83,7 @@ syn keyword rustTrait OrdIterator MutableDoubleEndedIterator ExactSize syn keyword rustTrait Times syn keyword rustTrait Algebraic Trigonometric Exponential Hyperbolic -syn keyword rustTrait Bitwise BitCount Bounded -syn keyword rustTrait Integer Fractional Real RealExt +syn keyword rustTrait Bitwise Bounded Integer Fractional Real RealExt syn keyword rustTrait Num NumCast CheckedAdd CheckedSub CheckedMul syn keyword rustTrait Orderable Signed Unsigned Round syn keyword rustTrait Primitive Int Float ToStrRadix ToPrimitive FromPrimitive diff --git a/src/libextra/enum_set.rs b/src/libextra/enum_set.rs index 6fd42f74a76..e0461778075 100644 --- a/src/libextra/enum_set.rs +++ b/src/libextra/enum_set.rs @@ -13,6 +13,8 @@ //! This module defines a container which uses an efficient bit mask //! representation to hold C-like enum variants. +use std::num::Bitwise; + #[deriving(Clone, Eq, IterBytes, ToStr, Encodable, Decodable)] /// A specialized Set implementation to use enum types. pub struct EnumSet<E> { diff --git a/src/libextra/num/bigint.rs b/src/libextra/num/bigint.rs index ed731298b52..8f491e836b8 100644 --- a/src/libextra/num/bigint.rs +++ b/src/libextra/num/bigint.rs @@ -22,7 +22,7 @@ A `BigInt` is a combination of `BigUint` and `Sign`. use std::cmp::{Eq, Ord, TotalEq, TotalOrd, Ordering, Less, Equal, Greater}; use std::num; use std::num::{Zero, One, ToStrRadix, FromStrRadix, Orderable}; -use std::num::{ToPrimitive, FromPrimitive}; +use std::num::{Bitwise, ToPrimitive, FromPrimitive}; use std::rand::Rng; use std::str; use std::uint; diff --git a/src/librustc/util/sha2.rs b/src/librustc/util/sha2.rs index 73d39d8145f..ee2f7638be9 100644 --- a/src/librustc/util/sha2.rs +++ b/src/librustc/util/sha2.rs @@ -523,6 +523,7 @@ static H256: [u32, ..8] = [ #[cfg(test)] mod tests { use super::{Digest, Sha256, FixedBuffer}; + use std::num::Bounded; use std::vec; use std::rand::isaac::IsaacRng; use std::rand::Rng; diff --git a/src/librustpkg/sha1.rs b/src/librustpkg/sha1.rs index 06970561fac..909b25fe756 100644 --- a/src/librustpkg/sha1.rs +++ b/src/librustpkg/sha1.rs @@ -445,6 +445,7 @@ impl Digest for Sha1 { #[cfg(test)] mod tests { + use std::num::Bounded; use std::rand::{IsaacRng, Rng}; use std::vec; use extra::hex::FromHex; diff --git a/src/libstd/num/f32.rs b/src/libstd/num/f32.rs index beecf8a44f6..a8eaa895650 100644 --- a/src/libstd/num/f32.rs +++ b/src/libstd/num/f32.rs @@ -17,7 +17,7 @@ use cmath; use default::Default; use libc::{c_float, c_int}; use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal}; -use num::{Zero, One, strconv}; +use num::{Zero, One, Bounded, strconv}; use num; use to_str; use unstable::intrinsics; diff --git a/src/libstd/num/f64.rs b/src/libstd/num/f64.rs index 6a266c6c59f..fe51cb07646 100644 --- a/src/libstd/num/f64.rs +++ b/src/libstd/num/f64.rs @@ -18,7 +18,7 @@ use cmath; use default::Default; use libc::{c_double, c_int}; use num::{FPCategory, FPNaN, FPInfinite , FPZero, FPSubnormal, FPNormal}; -use num::{Zero, One, strconv}; +use num::{Zero, One, Bounded, strconv}; use num; use to_str; use unstable::intrinsics; diff --git a/src/libstd/num/i16.rs b/src/libstd/num/i16.rs index 5f431dfdf04..e19e7c6c3b8 100644 --- a/src/libstd/num/i16.rs +++ b/src/libstd/num/i16.rs @@ -15,7 +15,7 @@ use prelude::*; use default::Default; -use num::{BitCount, CheckedAdd, CheckedSub, CheckedMul}; +use num::{Bitwise, Bounded, CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; use option::{Option, Some, None}; @@ -24,7 +24,7 @@ use unstable::intrinsics; int_module!(i16, 16) -impl BitCount for i16 { +impl Bitwise for i16 { /// Counts the number of bits set. Wraps LLVM's `ctpop` intrinsic. #[inline] fn population_count(&self) -> i16 { unsafe { intrinsics::ctpop16(*self) } } diff --git a/src/libstd/num/i32.rs b/src/libstd/num/i32.rs index 8bb03344923..372d9f680d7 100644 --- a/src/libstd/num/i32.rs +++ b/src/libstd/num/i32.rs @@ -15,7 +15,7 @@ use prelude::*; use default::Default; -use num::{BitCount, CheckedAdd, CheckedSub, CheckedMul}; +use num::{Bitwise, Bounded, CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; use option::{Option, Some, None}; @@ -24,7 +24,7 @@ use unstable::intrinsics; int_module!(i32, 32) -impl BitCount for i32 { +impl Bitwise for i32 { /// Counts the number of bits set. Wraps LLVM's `ctpop` intrinsic. #[inline] fn population_count(&self) -> i32 { unsafe { intrinsics::ctpop32(*self) } } diff --git a/src/libstd/num/i64.rs b/src/libstd/num/i64.rs index 891043ad5f8..2a91ee4dd71 100644 --- a/src/libstd/num/i64.rs +++ b/src/libstd/num/i64.rs @@ -17,7 +17,7 @@ use prelude::*; use default::Default; #[cfg(target_word_size = "64")] use num::CheckedMul; -use num::{BitCount, CheckedAdd, CheckedSub}; +use num::{Bitwise, Bounded, CheckedAdd, CheckedSub}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; use option::{Option, Some, None}; @@ -26,7 +26,7 @@ use unstable::intrinsics; int_module!(i64, 64) -impl BitCount for i64 { +impl Bitwise for i64 { /// Counts the number of bits set. Wraps LLVM's `ctpop` intrinsic. #[inline] fn population_count(&self) -> i64 { unsafe { intrinsics::ctpop64(*self) } } diff --git a/src/libstd/num/i8.rs b/src/libstd/num/i8.rs index fd123ec57cc..66162ce3502 100644 --- a/src/libstd/num/i8.rs +++ b/src/libstd/num/i8.rs @@ -15,7 +15,7 @@ use prelude::*; use default::Default; -use num::{BitCount, CheckedAdd, CheckedSub, CheckedMul}; +use num::{Bitwise, Bounded, CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; use option::{Option, Some, None}; @@ -24,7 +24,7 @@ use unstable::intrinsics; int_module!(i8, 8) -impl BitCount for i8 { +impl Bitwise for i8 { /// Counts the number of bits set. Wraps LLVM's `ctpop` intrinsic. #[inline] fn population_count(&self) -> i8 { unsafe { intrinsics::ctpop8(*self) } } diff --git a/src/libstd/num/int.rs b/src/libstd/num/int.rs index 123555e4a63..8068d4a74cb 100644 --- a/src/libstd/num/int.rs +++ b/src/libstd/num/int.rs @@ -15,7 +15,7 @@ use prelude::*; use default::Default; -use num::{BitCount, CheckedAdd, CheckedSub, CheckedMul}; +use num::{Bitwise, Bounded, CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; use option::{Option, Some, None}; @@ -26,7 +26,7 @@ use unstable::intrinsics; #[cfg(target_word_size = "64")] int_module!(int, 64) #[cfg(target_word_size = "32")] -impl BitCount for int { +impl Bitwise for int { /// Counts the number of bits set. Wraps LLVM's `ctpop` intrinsic. #[inline] fn population_count(&self) -> int { (*self as i32).population_count() as int } @@ -41,7 +41,7 @@ impl BitCount for int { } #[cfg(target_word_size = "64")] -impl BitCount for int { +impl Bitwise for int { /// Counts the number of bits set. Wraps LLVM's `ctpop` intrinsic. #[inline] fn population_count(&self) -> int { (*self as i64).population_count() as int } diff --git a/src/libstd/num/int_macros.rs b/src/libstd/num/int_macros.rs index 0e7e4277dd6..5c878cd0302 100644 --- a/src/libstd/num/int_macros.rs +++ b/src/libstd/num/int_macros.rs @@ -315,8 +315,6 @@ impl Integer for $T { fn is_odd(&self) -> bool { !self.is_even() } } -impl Bitwise for $T {} - #[cfg(not(test))] impl BitOr<$T,$T> for $T { #[inline] @@ -446,6 +444,7 @@ mod tests { use i32; use num; use num::CheckedDiv; + use num::Bitwise; use mem; #[test] diff --git a/src/libstd/num/mod.rs b/src/libstd/num/mod.rs index 2bf3158e6b4..05f21c7d448 100644 --- a/src/libstd/num/mod.rs +++ b/src/libstd/num/mod.rs @@ -324,21 +324,27 @@ pub trait Real: Signed /// Inverse hyperbolic tangent function. #[inline(always)] pub fn atanh<T: Real>(value: T) -> T { value.atanh() } -/// Collects the bitwise operators under one trait. -pub trait Bitwise: Not<Self> +pub trait Bounded { + // FIXME (#5527): These should be associated constants + fn min_value() -> Self; + fn max_value() -> Self; +} + +/// Numbers with a fixed binary representation. +pub trait Bitwise: Bounded + + Not<Self> + BitAnd<Self,Self> + BitOr<Self,Self> + BitXor<Self,Self> + Shl<Self,Self> - + Shr<Self,Self> {} - -/// A trait for common counting operations on bits. -pub trait BitCount { + + Shr<Self,Self> { /// Returns the number of bits set in the number. /// /// # Example /// /// ```rust + /// use std::num::Bitwise; + /// /// let n = 0b0101000u16; /// assert_eq!(n.population_count(), 2); /// ``` @@ -348,6 +354,8 @@ pub trait BitCount { /// # Example /// /// ```rust + /// use std::num::Bitwise; + /// /// let n = 0b0101000u16; /// assert_eq!(n.leading_zeros(), 10); /// ``` @@ -357,18 +365,14 @@ pub trait BitCount { /// # Example /// /// ```rust + /// use std::num::Bitwise; + /// /// let n = 0b0101000u16; /// assert_eq!(n.trailing_zeros(), 3); /// ``` fn trailing_zeros(&self) -> Self; } -pub trait Bounded { - // FIXME (#5527): These should be associated constants - fn min_value() -> Self; - fn max_value() -> Self; -} - /// Specifies the available operations common to all of Rust's core numeric primitives. /// These may not always make sense from a purely mathematical point of view, but /// may be useful for systems programming. @@ -394,8 +398,7 @@ pub trait Primitive: Clone /// A collection of traits relevant to primitive signed and unsigned integers pub trait Int: Integer + Primitive - + Bitwise - + BitCount {} + + Bitwise {} /// Used for representing the classification of floating point numbers #[deriving(Eq)] diff --git a/src/libstd/num/u16.rs b/src/libstd/num/u16.rs index 7e4145fc723..770db889af5 100644 --- a/src/libstd/num/u16.rs +++ b/src/libstd/num/u16.rs @@ -15,7 +15,7 @@ use prelude::*; use default::Default; -use num::BitCount; +use num::{Bitwise, Bounded}; use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; diff --git a/src/libstd/num/u32.rs b/src/libstd/num/u32.rs index 34c2a892d56..9e08ffed3b7 100644 --- a/src/libstd/num/u32.rs +++ b/src/libstd/num/u32.rs @@ -15,7 +15,7 @@ use prelude::*; use default::Default; -use num::BitCount; +use num::{Bitwise, Bounded}; use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; diff --git a/src/libstd/num/u64.rs b/src/libstd/num/u64.rs index c307b038627..a579e7ebbbe 100644 --- a/src/libstd/num/u64.rs +++ b/src/libstd/num/u64.rs @@ -15,7 +15,7 @@ use prelude::*; use default::Default; -use num::BitCount; +use num::{Bitwise, Bounded}; #[cfg(target_word_size = "64")] use num::CheckedMul; use num::{CheckedAdd, CheckedSub}; diff --git a/src/libstd/num/u8.rs b/src/libstd/num/u8.rs index 06bda72c5fe..4aa34b6d880 100644 --- a/src/libstd/num/u8.rs +++ b/src/libstd/num/u8.rs @@ -15,7 +15,7 @@ use prelude::*; use default::Default; -use num::BitCount; +use num::{Bitwise, Bounded}; use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; diff --git a/src/libstd/num/uint.rs b/src/libstd/num/uint.rs index a752cd938ba..d304f947542 100644 --- a/src/libstd/num/uint.rs +++ b/src/libstd/num/uint.rs @@ -16,7 +16,7 @@ use prelude::*; use default::Default; use mem; -use num::BitCount; +use num::{Bitwise, Bounded}; use num::{CheckedAdd, CheckedSub, CheckedMul}; use num::{CheckedDiv, Zero, One, strconv}; use num::{ToStrRadix, FromStrRadix}; diff --git a/src/libstd/num/uint_macros.rs b/src/libstd/num/uint_macros.rs index 1a256981d74..289af9f6129 100644 --- a/src/libstd/num/uint_macros.rs +++ b/src/libstd/num/uint_macros.rs @@ -176,8 +176,6 @@ impl Integer for $T { fn is_odd(&self) -> bool { !self.is_even() } } -impl Bitwise for $T {} - #[cfg(not(test))] impl BitOr<$T,$T> for $T { #[inline] @@ -298,7 +296,7 @@ impl Primitive for $T { fn is_signed(_: Option<$T>) -> bool { false } } -impl BitCount for $T { +impl Bitwise for $T { /// Counts the number of bits set. Wraps LLVM's `ctpop` intrinsic. #[inline] fn population_count(&self) -> $T { @@ -325,6 +323,7 @@ mod tests { use num; use num::CheckedDiv; + use num::Bitwise; use mem; use u16; diff --git a/src/libstd/prelude.rs b/src/libstd/prelude.rs index 9045bafbe45..2f5f3e8f456 100644 --- a/src/libstd/prelude.rs +++ b/src/libstd/prelude.rs @@ -58,8 +58,7 @@ pub use iter::{FromIterator, Extendable}; pub use iter::{Iterator, DoubleEndedIterator, RandomAccessIterator, CloneableIterator}; pub use iter::{OrdIterator, MutableDoubleEndedIterator, ExactSize}; pub use num::Times; -pub use num::{Bitwise, BitCount, Bounded, Integer, Real}; -pub use num::{Num, NumCast, CheckedAdd, CheckedSub, CheckedMul}; +pub use num::{Integer, Real, Num, NumCast, CheckedAdd, CheckedSub, CheckedMul}; pub use num::{Orderable, Signed, Unsigned, Round}; pub use num::{Primitive, Int, Float, ToStrRadix, ToPrimitive, FromPrimitive}; pub use path::{GenericPath, Path, PosixPath, WindowsPath}; |
