diff --git a/src/libstd/num/int_macros.rs b/src/libstd/num/int_macros.rs index 9aa79090425f8..b49c8be4e4ee6 100644 --- a/src/libstd/num/int_macros.rs +++ b/src/libstd/num/int_macros.rs @@ -419,7 +419,10 @@ impl Integer for $T { fn is_odd(&self) -> bool { !self.is_even() } } -impl Bitwise for $T {} +impl Bitwise for $T { + #[inline] + fn compl(&self) -> $T { -1 as $T ^ *self } +} #[cfg(not(test))] impl BitOr<$T,$T> for $T { diff --git a/src/libstd/num/num.rs b/src/libstd/num/num.rs index 8b61a8a8734b9..cb73310ea489f 100644 --- a/src/libstd/num/num.rs +++ b/src/libstd/num/num.rs @@ -244,7 +244,10 @@ pub trait Bitwise: Not + BitOr + BitXor + Shl - + Shr {} + + Shr { + // Computes the bitwise complement + fn compl(&self) -> Self; +} pub trait BitCount { fn population_count(&self) -> Self; diff --git a/src/libstd/num/uint_macros.rs b/src/libstd/num/uint_macros.rs index aa01b871b9d42..2c2cbb3d6ef08 100644 --- a/src/libstd/num/uint_macros.rs +++ b/src/libstd/num/uint_macros.rs @@ -281,7 +281,10 @@ impl Integer for $T { fn is_odd(&self) -> bool { !self.is_even() } } -impl Bitwise for $T {} +impl Bitwise for $T { + #[inline] + fn compl(&self) -> $T { -1 as $T ^ *self } +} #[cfg(not(test))] impl BitOr<$T,$T> for $T {