|
1 | 1 | use core::mem::size_of;
|
2 | 2 | use core::num::Wrapping;
|
| 3 | +use core::num::{ |
| 4 | + NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize, NonZeroU128, |
| 5 | + NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize, |
| 6 | +}; |
3 | 7 | use core::{f32, f64};
|
4 | 8 | use core::{i128, i16, i32, i64, i8, isize};
|
5 | 9 | use core::{u128, u16, u32, u64, u8, usize};
|
@@ -266,6 +270,61 @@ impl_to_primitive_uint!(u32);
|
266 | 270 | impl_to_primitive_uint!(u64);
|
267 | 271 | impl_to_primitive_uint!(u128);
|
268 | 272 |
|
| 273 | +macro_rules! impl_to_primitive_nonzero_to_method { |
| 274 | + ($SrcT:ident : $( $(#[$cfg:meta])* fn $method:ident -> $DstT:ident ; )*) => {$( |
| 275 | + #[inline] |
| 276 | + $(#[$cfg])* |
| 277 | + fn $method(&self) -> Option<$DstT> { |
| 278 | + self.get().$method() |
| 279 | + } |
| 280 | + )*} |
| 281 | +} |
| 282 | + |
| 283 | +macro_rules! impl_to_primitive_nonzero { |
| 284 | + ($T:ident) => { |
| 285 | + impl ToPrimitive for $T { |
| 286 | + impl_to_primitive_nonzero_to_method! { $T: |
| 287 | + fn to_isize -> isize; |
| 288 | + fn to_i8 -> i8; |
| 289 | + fn to_i16 -> i16; |
| 290 | + fn to_i32 -> i32; |
| 291 | + fn to_i64 -> i64; |
| 292 | + fn to_i128 -> i128; |
| 293 | + |
| 294 | + fn to_usize -> usize; |
| 295 | + fn to_u8 -> u8; |
| 296 | + fn to_u16 -> u16; |
| 297 | + fn to_u32 -> u32; |
| 298 | + fn to_u64 -> u64; |
| 299 | + fn to_u128 -> u128; |
| 300 | + } |
| 301 | + |
| 302 | + #[inline] |
| 303 | + fn to_f32(&self) -> Option<f32> { |
| 304 | + Some(self.get() as f32) |
| 305 | + } |
| 306 | + #[inline] |
| 307 | + fn to_f64(&self) -> Option<f64> { |
| 308 | + Some(self.get() as f64) |
| 309 | + } |
| 310 | + } |
| 311 | + }; |
| 312 | +} |
| 313 | + |
| 314 | +impl_to_primitive_nonzero!(NonZeroUsize); |
| 315 | +impl_to_primitive_nonzero!(NonZeroU8); |
| 316 | +impl_to_primitive_nonzero!(NonZeroU16); |
| 317 | +impl_to_primitive_nonzero!(NonZeroU32); |
| 318 | +impl_to_primitive_nonzero!(NonZeroU64); |
| 319 | +impl_to_primitive_nonzero!(NonZeroU128); |
| 320 | + |
| 321 | +impl_to_primitive_nonzero!(NonZeroIsize); |
| 322 | +impl_to_primitive_nonzero!(NonZeroI8); |
| 323 | +impl_to_primitive_nonzero!(NonZeroI16); |
| 324 | +impl_to_primitive_nonzero!(NonZeroI32); |
| 325 | +impl_to_primitive_nonzero!(NonZeroI64); |
| 326 | +impl_to_primitive_nonzero!(NonZeroI128); |
| 327 | + |
269 | 328 | macro_rules! impl_to_primitive_float_to_float {
|
270 | 329 | ($SrcT:ident : $( fn $method:ident -> $DstT:ident ; )*) => {$(
|
271 | 330 | #[inline]
|
|
0 commit comments