1 // Copyright 2014 The Rust Project Developers. See the COPYRIGHT
2 // file at the top-level directory of this distribution and at
3 // http://rust-lang.org/COPYRIGHT.
5 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
6 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
7 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
8 // option. This file may not be copied, modified, or distributed
9 // except according to those terms.
15 #[allow(unused_macros)]
16 macro_rules! sh_impl_signed {
17 ($t:ident, $f:ident) => (
18 #[stable(feature = "rust1", since = "1.0.0")]
19 impl Shl<$f> for Wrapping<$t> {
20 type Output = Wrapping<$t>;
23 fn shl(self, other: $f) -> Wrapping<$t> {
25 Wrapping(self.0.wrapping_shr((-other & self::shift_max::$t as $f) as u32))
27 Wrapping(self.0.wrapping_shl((other & self::shift_max::$t as $f) as u32))
32 #[stable(feature = "op_assign_traits", since = "1.8.0")]
33 impl ShlAssign<$f> for Wrapping<$t> {
35 fn shl_assign(&mut self, other: $f) {
36 *self = *self << other;
39 forward_ref_op_assign! { impl ShlAssign, shl_assign for Wrapping<$t>, $f }
41 #[stable(feature = "rust1", since = "1.0.0")]
42 impl Shr<$f> for Wrapping<$t> {
43 type Output = Wrapping<$t>;
46 fn shr(self, other: $f) -> Wrapping<$t> {
48 Wrapping(self.0.wrapping_shl((-other & self::shift_max::$t as $f) as u32))
50 Wrapping(self.0.wrapping_shr((other & self::shift_max::$t as $f) as u32))
55 #[stable(feature = "op_assign_traits", since = "1.8.0")]
56 impl ShrAssign<$f> for Wrapping<$t> {
58 fn shr_assign(&mut self, other: $f) {
59 *self = *self >> other;
62 forward_ref_op_assign! { impl ShrAssign, shr_assign for Wrapping<$t>, $f }
66 macro_rules! sh_impl_unsigned {
67 ($t:ident, $f:ident) => (
68 #[stable(feature = "rust1", since = "1.0.0")]
69 impl Shl<$f> for Wrapping<$t> {
70 type Output = Wrapping<$t>;
73 fn shl(self, other: $f) -> Wrapping<$t> {
74 Wrapping(self.0.wrapping_shl((other & self::shift_max::$t as $f) as u32))
78 #[stable(feature = "op_assign_traits", since = "1.8.0")]
79 impl ShlAssign<$f> for Wrapping<$t> {
81 fn shl_assign(&mut self, other: $f) {
82 *self = *self << other;
85 forward_ref_op_assign! { impl ShlAssign, shl_assign for Wrapping<$t>, $f }
87 #[stable(feature = "rust1", since = "1.0.0")]
88 impl Shr<$f> for Wrapping<$t> {
89 type Output = Wrapping<$t>;
92 fn shr(self, other: $f) -> Wrapping<$t> {
93 Wrapping(self.0.wrapping_shr((other & self::shift_max::$t as $f) as u32))
97 #[stable(feature = "op_assign_traits", since = "1.8.0")]
98 impl ShrAssign<$f> for Wrapping<$t> {
100 fn shr_assign(&mut self, other: $f) {
101 *self = *self >> other;
104 forward_ref_op_assign! { impl ShrAssign, shr_assign for Wrapping<$t>, $f }
108 // FIXME (#23545): uncomment the remaining impls
109 macro_rules! sh_impl_all {
110 ($($t:ident)*) => ($(
111 //sh_impl_unsigned! { $t, u8 }
112 //sh_impl_unsigned! { $t, u16 }
113 //sh_impl_unsigned! { $t, u32 }
114 //sh_impl_unsigned! { $t, u64 }
115 //sh_impl_unsigned! { $t, u128 }
116 sh_impl_unsigned! { $t, usize }
118 //sh_impl_signed! { $t, i8 }
119 //sh_impl_signed! { $t, i16 }
120 //sh_impl_signed! { $t, i32 }
121 //sh_impl_signed! { $t, i64 }
122 //sh_impl_signed! { $t, i128 }
123 //sh_impl_signed! { $t, isize }
127 sh_impl_all! { u8 u16 u32 u64 u128 usize i8 i16 i32 i64 i128 isize }
129 // FIXME(30524): impl Op<T> for Wrapping<T>, impl OpAssign<T> for Wrapping<T>
130 macro_rules! wrapping_impl {
132 #[stable(feature = "rust1", since = "1.0.0")]
133 impl Add for Wrapping<$t> {
134 type Output = Wrapping<$t>;
137 fn add(self, other: Wrapping<$t>) -> Wrapping<$t> {
138 Wrapping(self.0.wrapping_add(other.0))
141 forward_ref_binop! { impl Add, add for Wrapping<$t>, Wrapping<$t>,
142 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
144 #[stable(feature = "op_assign_traits", since = "1.8.0")]
145 impl AddAssign for Wrapping<$t> {
147 fn add_assign(&mut self, other: Wrapping<$t>) {
148 *self = *self + other;
151 forward_ref_op_assign! { impl AddAssign, add_assign for Wrapping<$t>, Wrapping<$t> }
153 #[stable(feature = "rust1", since = "1.0.0")]
154 impl Sub for Wrapping<$t> {
155 type Output = Wrapping<$t>;
158 fn sub(self, other: Wrapping<$t>) -> Wrapping<$t> {
159 Wrapping(self.0.wrapping_sub(other.0))
162 forward_ref_binop! { impl Sub, sub for Wrapping<$t>, Wrapping<$t>,
163 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
165 #[stable(feature = "op_assign_traits", since = "1.8.0")]
166 impl SubAssign for Wrapping<$t> {
168 fn sub_assign(&mut self, other: Wrapping<$t>) {
169 *self = *self - other;
172 forward_ref_op_assign! { impl SubAssign, sub_assign for Wrapping<$t>, Wrapping<$t> }
174 #[stable(feature = "rust1", since = "1.0.0")]
175 impl Mul for Wrapping<$t> {
176 type Output = Wrapping<$t>;
179 fn mul(self, other: Wrapping<$t>) -> Wrapping<$t> {
180 Wrapping(self.0.wrapping_mul(other.0))
183 forward_ref_binop! { impl Mul, mul for Wrapping<$t>, Wrapping<$t>,
184 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
186 #[stable(feature = "op_assign_traits", since = "1.8.0")]
187 impl MulAssign for Wrapping<$t> {
189 fn mul_assign(&mut self, other: Wrapping<$t>) {
190 *self = *self * other;
193 forward_ref_op_assign! { impl MulAssign, mul_assign for Wrapping<$t>, Wrapping<$t> }
195 #[stable(feature = "wrapping_div", since = "1.3.0")]
196 impl Div for Wrapping<$t> {
197 type Output = Wrapping<$t>;
200 fn div(self, other: Wrapping<$t>) -> Wrapping<$t> {
201 Wrapping(self.0.wrapping_div(other.0))
204 forward_ref_binop! { impl Div, div for Wrapping<$t>, Wrapping<$t>,
205 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
207 #[stable(feature = "op_assign_traits", since = "1.8.0")]
208 impl DivAssign for Wrapping<$t> {
210 fn div_assign(&mut self, other: Wrapping<$t>) {
211 *self = *self / other;
214 forward_ref_op_assign! { impl DivAssign, div_assign for Wrapping<$t>, Wrapping<$t> }
216 #[stable(feature = "wrapping_impls", since = "1.7.0")]
217 impl Rem for Wrapping<$t> {
218 type Output = Wrapping<$t>;
221 fn rem(self, other: Wrapping<$t>) -> Wrapping<$t> {
222 Wrapping(self.0.wrapping_rem(other.0))
225 forward_ref_binop! { impl Rem, rem for Wrapping<$t>, Wrapping<$t>,
226 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
228 #[stable(feature = "op_assign_traits", since = "1.8.0")]
229 impl RemAssign for Wrapping<$t> {
231 fn rem_assign(&mut self, other: Wrapping<$t>) {
232 *self = *self % other;
235 forward_ref_op_assign! { impl RemAssign, rem_assign for Wrapping<$t>, Wrapping<$t> }
237 #[stable(feature = "rust1", since = "1.0.0")]
238 impl Not for Wrapping<$t> {
239 type Output = Wrapping<$t>;
242 fn not(self) -> Wrapping<$t> {
246 forward_ref_unop! { impl Not, not for Wrapping<$t>,
247 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
249 #[stable(feature = "rust1", since = "1.0.0")]
250 impl BitXor for Wrapping<$t> {
251 type Output = Wrapping<$t>;
254 fn bitxor(self, other: Wrapping<$t>) -> Wrapping<$t> {
255 Wrapping(self.0 ^ other.0)
258 forward_ref_binop! { impl BitXor, bitxor for Wrapping<$t>, Wrapping<$t>,
259 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
261 #[stable(feature = "op_assign_traits", since = "1.8.0")]
262 impl BitXorAssign for Wrapping<$t> {
264 fn bitxor_assign(&mut self, other: Wrapping<$t>) {
265 *self = *self ^ other;
268 forward_ref_op_assign! { impl BitXorAssign, bitxor_assign for Wrapping<$t>, Wrapping<$t> }
270 #[stable(feature = "rust1", since = "1.0.0")]
271 impl BitOr for Wrapping<$t> {
272 type Output = Wrapping<$t>;
275 fn bitor(self, other: Wrapping<$t>) -> Wrapping<$t> {
276 Wrapping(self.0 | other.0)
279 forward_ref_binop! { impl BitOr, bitor for Wrapping<$t>, Wrapping<$t>,
280 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
282 #[stable(feature = "op_assign_traits", since = "1.8.0")]
283 impl BitOrAssign for Wrapping<$t> {
285 fn bitor_assign(&mut self, other: Wrapping<$t>) {
286 *self = *self | other;
289 forward_ref_op_assign! { impl BitOrAssign, bitor_assign for Wrapping<$t>, Wrapping<$t> }
291 #[stable(feature = "rust1", since = "1.0.0")]
292 impl BitAnd for Wrapping<$t> {
293 type Output = Wrapping<$t>;
296 fn bitand(self, other: Wrapping<$t>) -> Wrapping<$t> {
297 Wrapping(self.0 & other.0)
300 forward_ref_binop! { impl BitAnd, bitand for Wrapping<$t>, Wrapping<$t>,
301 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
303 #[stable(feature = "op_assign_traits", since = "1.8.0")]
304 impl BitAndAssign for Wrapping<$t> {
306 fn bitand_assign(&mut self, other: Wrapping<$t>) {
307 *self = *self & other;
310 forward_ref_op_assign! { impl BitAndAssign, bitand_assign for Wrapping<$t>, Wrapping<$t> }
312 #[stable(feature = "wrapping_neg", since = "1.10.0")]
313 impl Neg for Wrapping<$t> {
316 fn neg(self) -> Self {
320 forward_ref_unop! { impl Neg, neg for Wrapping<$t>,
321 #[stable(feature = "wrapping_ref", since = "1.14.0")] }
326 wrapping_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
328 macro_rules! wrapping_int_impl {
332 concat!("Returns the smallest value that can be represented by this integer type.
339 #![feature(wrapping_int_impl)]
340 use std::num::Wrapping;
342 assert_eq!(<Wrapping<", stringify!($t), ">>::min_value(), ",
343 "Wrapping(", stringify!($t), "::min_value()));
345 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
347 pub const fn min_value() -> Self {
348 Wrapping(<$t>::min_value())
353 concat!("Returns the largest value that can be represented by this integer type.
360 #![feature(wrapping_int_impl)]
361 use std::num::Wrapping;
363 assert_eq!(<Wrapping<", stringify!($t), ">>::max_value(), ",
364 "Wrapping(", stringify!($t), "::max_value()));
366 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
368 pub const fn max_value() -> Self {
369 Wrapping(<$t>::max_value())
374 concat!("Returns the number of ones in the binary representation of `self`.
381 #![feature(wrapping_int_impl)]
382 use std::num::Wrapping;
384 let n = Wrapping(0b01001100", stringify!($t), ");
386 assert_eq!(n.count_ones(), 3);
389 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
390 pub const fn count_ones(self) -> u32 {
396 concat!("Returns the number of zeros in the binary representation of `self`.
403 #![feature(wrapping_int_impl)]
404 use std::num::Wrapping;
406 assert_eq!(Wrapping(!0", stringify!($t), ").count_zeros(), 0);
409 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
410 pub const fn count_zeros(self) -> u32 {
416 concat!("Returns the number of trailing zeros in the binary representation
424 #![feature(wrapping_int_impl)]
425 use std::num::Wrapping;
427 let n = Wrapping(0b0101000", stringify!($t), ");
429 assert_eq!(n.trailing_zeros(), 3);
432 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
433 pub const fn trailing_zeros(self) -> u32 {
434 self.0.trailing_zeros()
438 /// Shifts the bits to the left by a specified amount, `n`,
439 /// wrapping the truncated bits to the end of the resulting
442 /// Please note this isn't the same operation as `>>`!
449 /// #![feature(wrapping_int_impl)]
450 /// use std::num::Wrapping;
452 /// let n: Wrapping<i64> = Wrapping(0x0123456789ABCDEF);
453 /// let m: Wrapping<i64> = Wrapping(-0x76543210FEDCBA99);
455 /// assert_eq!(n.rotate_left(32), m);
458 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
459 pub const fn rotate_left(self, n: u32) -> Self {
460 Wrapping(self.0.rotate_left(n))
463 /// Shifts the bits to the right by a specified amount, `n`,
464 /// wrapping the truncated bits to the beginning of the resulting
467 /// Please note this isn't the same operation as `<<`!
474 /// #![feature(wrapping_int_impl)]
475 /// use std::num::Wrapping;
477 /// let n: Wrapping<i64> = Wrapping(0x0123456789ABCDEF);
478 /// let m: Wrapping<i64> = Wrapping(-0xFEDCBA987654322);
480 /// assert_eq!(n.rotate_right(4), m);
483 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
484 pub const fn rotate_right(self, n: u32) -> Self {
485 Wrapping(self.0.rotate_right(n))
488 /// Reverses the byte order of the integer.
495 /// #![feature(wrapping_int_impl)]
496 /// use std::num::Wrapping;
498 /// let n: Wrapping<i16> = Wrapping(0b0000000_01010101);
499 /// assert_eq!(n, Wrapping(85));
501 /// let m = n.swap_bytes();
503 /// assert_eq!(m, Wrapping(0b01010101_00000000));
504 /// assert_eq!(m, Wrapping(21760));
507 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
508 pub const fn swap_bytes(self) -> Self {
509 Wrapping(self.0.swap_bytes())
512 /// Reverses the bit pattern of the integer.
516 /// Please note that this example is shared between integer types.
517 /// Which explains why `i16` is used here.
522 /// #![feature(reverse_bits)]
523 /// use std::num::Wrapping;
525 /// let n = Wrapping(0b0000000_01010101i16);
526 /// assert_eq!(n, Wrapping(85));
528 /// let m = n.reverse_bits();
530 /// assert_eq!(m.0 as u16, 0b10101010_00000000);
531 /// assert_eq!(m, Wrapping(-22016));
533 #[unstable(feature = "reverse_bits", issue = "48763")]
535 pub const fn reverse_bits(self) -> Self {
536 Wrapping(self.0.reverse_bits())
540 concat!("Converts an integer from big endian to the target's endianness.
542 On big endian this is a no-op. On little endian the bytes are
550 #![feature(wrapping_int_impl)]
551 use std::num::Wrapping;
553 let n = Wrapping(0x1A", stringify!($t), ");
555 if cfg!(target_endian = \"big\") {
556 assert_eq!(<Wrapping<", stringify!($t), ">>::from_be(n), n)
558 assert_eq!(<Wrapping<", stringify!($t), ">>::from_be(n), n.swap_bytes())
562 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
563 pub const fn from_be(x: Self) -> Self {
564 Wrapping(<$t>::from_be(x.0))
569 concat!("Converts an integer from little endian to the target's endianness.
571 On little endian this is a no-op. On big endian the bytes are
579 #![feature(wrapping_int_impl)]
580 use std::num::Wrapping;
582 let n = Wrapping(0x1A", stringify!($t), ");
584 if cfg!(target_endian = \"little\") {
585 assert_eq!(<Wrapping<", stringify!($t), ">>::from_le(n), n)
587 assert_eq!(<Wrapping<", stringify!($t), ">>::from_le(n), n.swap_bytes())
591 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
592 pub const fn from_le(x: Self) -> Self {
593 Wrapping(<$t>::from_le(x.0))
598 concat!("Converts `self` to big endian from the target's endianness.
600 On big endian this is a no-op. On little endian the bytes are
608 #![feature(wrapping_int_impl)]
609 use std::num::Wrapping;
611 let n = Wrapping(0x1A", stringify!($t), ");
613 if cfg!(target_endian = \"big\") {
614 assert_eq!(n.to_be(), n)
616 assert_eq!(n.to_be(), n.swap_bytes())
620 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
621 pub const fn to_be(self) -> Self {
622 Wrapping(self.0.to_be())
627 concat!("Converts `self` to little endian from the target's endianness.
629 On little endian this is a no-op. On big endian the bytes are
637 #![feature(wrapping_int_impl)]
638 use std::num::Wrapping;
640 let n = Wrapping(0x1A", stringify!($t), ");
642 if cfg!(target_endian = \"little\") {
643 assert_eq!(n.to_le(), n)
645 assert_eq!(n.to_le(), n.swap_bytes())
649 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
650 pub const fn to_le(self) -> Self {
651 Wrapping(self.0.to_le())
656 concat!("Raises self to the power of `exp`, using exponentiation by squaring.
663 #![feature(wrapping_int_impl)]
664 use std::num::Wrapping;
666 assert_eq!(Wrapping(3", stringify!($t), ").pow(4), Wrapping(81));
669 Results that are too large are wrapped:
672 #![feature(wrapping_int_impl)]
673 use std::num::Wrapping;
675 assert_eq!(Wrapping(3i8).pow(5), Wrapping(-13));
676 assert_eq!(Wrapping(3i8).pow(6), Wrapping(-39));
679 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
680 pub fn pow(self, exp: u32) -> Self {
681 Wrapping(self.0.wrapping_pow(exp))
688 wrapping_int_impl! { usize u8 u16 u32 u64 u128 isize i8 i16 i32 i64 i128 }
690 macro_rules! wrapping_int_impl_signed {
694 concat!("Returns the number of leading zeros in the binary representation of `self`.
701 #![feature(wrapping_int_impl)]
702 use std::num::Wrapping;
704 let n = Wrapping(", stringify!($t), "::max_value()) >> 2;
706 assert_eq!(n.leading_zeros(), 3);
709 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
710 pub const fn leading_zeros(self) -> u32 {
711 self.0.leading_zeros()
716 concat!("Computes the absolute value of `self`, wrapping around at
717 the boundary of the type.
719 The only case where such wrapping can occur is when one takes the absolute value of the negative
720 minimal value for the type this is a positive value that is too large to represent in the type. In
721 such a case, this function returns `MIN` itself.
728 #![feature(wrapping_int_impl)]
729 use std::num::Wrapping;
731 assert_eq!(Wrapping(100", stringify!($t), ").abs(), Wrapping(100));
732 assert_eq!(Wrapping(-100", stringify!($t), ").abs(), Wrapping(100));
733 assert_eq!(Wrapping(", stringify!($t), "::min_value()).abs(), Wrapping(", stringify!($t),
735 assert_eq!(Wrapping(-128i8).abs().0 as u8, 128u8);
738 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
739 pub fn abs(self) -> Wrapping<$t> {
740 Wrapping(self.0.wrapping_abs())
745 concat!("Returns a number representing sign of `self`.
747 - `0` if the number is zero
748 - `1` if the number is positive
749 - `-1` if the number is negative
756 #![feature(wrapping_int_impl)]
757 use std::num::Wrapping;
759 assert_eq!(Wrapping(10", stringify!($t), ").signum(), Wrapping(1));
760 assert_eq!(Wrapping(0", stringify!($t), ").signum(), Wrapping(0));
761 assert_eq!(Wrapping(-10", stringify!($t), ").signum(), Wrapping(-1));
764 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
765 pub fn signum(self) -> Wrapping<$t> {
766 Wrapping(self.0.signum())
771 concat!("Returns `true` if `self` is positive and `false` if the number is zero or
779 #![feature(wrapping_int_impl)]
780 use std::num::Wrapping;
782 assert!(Wrapping(10", stringify!($t), ").is_positive());
783 assert!(!Wrapping(-10", stringify!($t), ").is_positive());
786 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
787 pub const fn is_positive(self) -> bool {
793 concat!("Returns `true` if `self` is negative and `false` if the number is zero or
801 #![feature(wrapping_int_impl)]
802 use std::num::Wrapping;
804 assert!(Wrapping(-10", stringify!($t), ").is_negative());
805 assert!(!Wrapping(10", stringify!($t), ").is_negative());
808 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
809 pub const fn is_negative(self) -> bool {
817 wrapping_int_impl_signed! { isize i8 i16 i32 i64 i128 }
819 macro_rules! wrapping_int_impl_unsigned {
823 concat!("Returns the number of leading zeros in the binary representation of `self`.
830 #![feature(wrapping_int_impl)]
831 use std::num::Wrapping;
833 let n = Wrapping(", stringify!($t), "::max_value()) >> 2;
835 assert_eq!(n.leading_zeros(), 2);
838 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
839 pub const fn leading_zeros(self) -> u32 {
840 self.0.leading_zeros()
845 concat!("Returns `true` if and only if `self == 2^k` for some `k`.
852 #![feature(wrapping_int_impl)]
853 use std::num::Wrapping;
855 assert!(Wrapping(16", stringify!($t), ").is_power_of_two());
856 assert!(!Wrapping(10", stringify!($t), ").is_power_of_two());
859 #[unstable(feature = "wrapping_int_impl", issue = "32463")]
860 pub fn is_power_of_two(self) -> bool {
861 self.0.is_power_of_two()
866 concat!("Returns the smallest power of two greater than or equal to `self`.
868 When return value overflows (i.e. `self > (1 << (N-1))` for type
869 `uN`), overflows to `2^N = 0`.
876 #![feature(wrapping_next_power_of_two)]
877 use std::num::Wrapping;
879 assert_eq!(Wrapping(2", stringify!($t), ").next_power_of_two(), Wrapping(2));
880 assert_eq!(Wrapping(3", stringify!($t), ").next_power_of_two(), Wrapping(4));
881 assert_eq!(Wrapping(200_u8).next_power_of_two(), Wrapping(0));
884 #[unstable(feature = "wrapping_next_power_of_two", issue = "32463",
885 reason = "needs decision on wrapping behaviour")]
886 pub fn next_power_of_two(self) -> Self {
887 Wrapping(self.0.wrapping_next_power_of_two())
894 wrapping_int_impl_unsigned! { usize u8 u16 u32 u64 u128 }
897 #![allow(non_upper_case_globals)]
899 #[cfg(target_pointer_width = "16")]
901 pub const usize: u32 = super::u16;
902 pub const isize: u32 = super::i16;
905 #[cfg(target_pointer_width = "32")]
907 pub const usize: u32 = super::u32;
908 pub const isize: u32 = super::i32;
911 #[cfg(target_pointer_width = "64")]
913 pub const usize: u32 = super::u64;
914 pub const isize: u32 = super::i64;
917 pub const i8: u32 = (1 << 3) - 1;
918 pub const i16: u32 = (1 << 4) - 1;
919 pub const i32: u32 = (1 << 5) - 1;
920 pub const i64: u32 = (1 << 6) - 1;
921 pub const i128: u32 = (1 << 7) - 1;
922 pub use self::platform::isize;
924 pub const u8: u32 = i8;
925 pub const u16: u32 = i16;
926 pub const u32: u32 = i32;
927 pub const u64: u32 = i64;
928 pub const u128: u32 = i128;
929 pub use self::platform::usize;