From 88bd646be096a816c1f842b1919f169d0d797ef9 Mon Sep 17 00:00:00 2001 From: Brendan Zabarauskas Date: Fri, 5 Sep 2014 14:01:41 +1000 Subject: [PATCH] Make integer bit count methods return uints Fixes rust-lang/rfcs#224 --- src/libcore/num/mod.rs | 20 ++++++++++---------- src/libcoretest/num/int_macros.rs | 6 +++--- src/libcoretest/num/uint_macros.rs | 6 +++--- src/libnum/bigint.rs | 2 +- 4 files changed, 17 insertions(+), 17 deletions(-) diff --git a/src/libcore/num/mod.rs b/src/libcore/num/mod.rs index 6d6ca59ce01ed..f6c5ffd540255 100644 --- a/src/libcore/num/mod.rs +++ b/src/libcore/num/mod.rs @@ -406,7 +406,7 @@ pub trait Int: Primitive /// /// assert_eq!(n.count_ones(), 3); /// ``` - fn count_ones(self) -> Self; + fn count_ones(self) -> uint; /// Returns the number of zeros in the binary representation of the integer. /// @@ -418,7 +418,7 @@ pub trait Int: Primitive /// assert_eq!(n.count_zeros(), 5); /// ``` #[inline] - fn count_zeros(self) -> Self { + fn count_zeros(self) -> uint { (!self).count_ones() } @@ -432,7 +432,7 @@ pub trait Int: Primitive /// /// assert_eq!(n.leading_zeros(), 10); /// ``` - fn leading_zeros(self) -> Self; + fn leading_zeros(self) -> uint; /// Returns the number of trailing zeros in the binary representation /// of the integer. @@ -444,7 +444,7 @@ pub trait Int: Primitive /// /// assert_eq!(n.trailing_zeros(), 3); /// ``` - fn trailing_zeros(self) -> Self; + fn trailing_zeros(self) -> uint; /// Shifts the bits to the left by a specified amount amount, `n`, wrapping /// the truncated bits to the end of the resulting integer. @@ -569,13 +569,13 @@ macro_rules! int_impl { ($T:ty, $BITS:expr, $ctpop:path, $ctlz:path, $cttz:path, $bswap:path) => { impl Int for $T { #[inline] - fn count_ones(self) -> $T { unsafe { $ctpop(self) } } + fn count_ones(self) -> uint { unsafe { $ctpop(self) as uint } } #[inline] - fn leading_zeros(self) -> $T { unsafe { $ctlz(self) } } + fn leading_zeros(self) -> uint { unsafe { $ctlz(self) as uint } } #[inline] - fn trailing_zeros(self) -> $T { unsafe { $cttz(self) } } + fn trailing_zeros(self) -> uint { unsafe { $cttz(self) as uint } } #[inline] fn rotate_left(self, n: uint) -> $T { @@ -629,13 +629,13 @@ macro_rules! int_cast_impl { ($T:ty, $U:ty) => { impl Int for $T { #[inline] - fn count_ones(self) -> $T { (self as $U).count_ones() as $T } + fn count_ones(self) -> uint { (self as $U).count_ones() } #[inline] - fn leading_zeros(self) -> $T { (self as $U).leading_zeros() as $T } + fn leading_zeros(self) -> uint { (self as $U).leading_zeros() } #[inline] - fn trailing_zeros(self) -> $T { (self as $U).trailing_zeros() as $T } + fn trailing_zeros(self) -> uint { (self as $U).trailing_zeros() } #[inline] fn rotate_left(self, n: uint) -> $T { (self as $U).rotate_left(n) as $T } diff --git a/src/libcoretest/num/int_macros.rs b/src/libcoretest/num/int_macros.rs index a2a9a05e868ab..f74f503383b7d 100644 --- a/src/libcoretest/num/int_macros.rs +++ b/src/libcoretest/num/int_macros.rs @@ -95,9 +95,9 @@ mod tests { #[test] fn test_count_zeros() { - assert!(A.count_zeros() == BITS as $T - 3); - assert!(B.count_zeros() == BITS as $T - 2); - assert!(C.count_zeros() == BITS as $T - 5); + assert!(A.count_zeros() == BITS - 3); + assert!(B.count_zeros() == BITS - 2); + assert!(C.count_zeros() == BITS - 5); } #[test] diff --git a/src/libcoretest/num/uint_macros.rs b/src/libcoretest/num/uint_macros.rs index a823e8d3f5754..e59e2378ba242 100644 --- a/src/libcoretest/num/uint_macros.rs +++ b/src/libcoretest/num/uint_macros.rs @@ -55,9 +55,9 @@ mod tests { #[test] fn test_count_zeros() { - assert!(A.count_zeros() == BITS as $T - 3); - assert!(B.count_zeros() == BITS as $T - 2); - assert!(C.count_zeros() == BITS as $T - 5); + assert!(A.count_zeros() == BITS - 3); + assert!(B.count_zeros() == BITS - 2); + assert!(C.count_zeros() == BITS - 5); } #[test] diff --git a/src/libnum/bigint.rs b/src/libnum/bigint.rs index 68cfe061121ea..39e21cfc48664 100644 --- a/src/libnum/bigint.rs +++ b/src/libnum/bigint.rs @@ -807,7 +807,7 @@ impl BigUint { pub fn bits(&self) -> uint { if self.is_zero() { return 0; } let zeros = self.data.last().unwrap().leading_zeros(); - return self.data.len()*BigDigit::bits - (zeros as uint); + return self.data.len()*BigDigit::bits - zeros; } }