Skip to content

Commit a7a6b4e

Browse files
yshuimbrubeck
authored andcommitted
Add all possible AsPrimitive for NotNan
1 parent 1972608 commit a7a6b4e

File tree

1 file changed

+22
-0
lines changed

1 file changed

+22
-0
lines changed

src/lib.rs

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -470,12 +470,27 @@ impl<T: NumCast> NumCast for OrderedFloat<T> {
470470
}
471471

472472
macro_rules! impl_as_primitive {
473+
(@ (NotNan<$T: ty>) => $(#[$cfg:meta])* impl (NotNan<$U: ty>) ) => {
474+
$(#[$cfg])*
475+
impl AsPrimitive<NotNan<$U>> for NotNan<$T> {
476+
#[inline] fn as_(self) -> NotNan<$U> {
477+
// Safety: `NotNan` guarantees that the value is not NaN.
478+
unsafe {NotNan::new_unchecked(self.0 as $U) }
479+
}
480+
}
481+
};
473482
(@ ($T: ty) => $(#[$cfg:meta])* impl (NotNan<$U: ty>) ) => {
474483
$(#[$cfg])*
475484
impl AsPrimitive<NotNan<$U>> for $T {
476485
#[inline] fn as_(self) -> NotNan<$U> { NotNan(self as $U) }
477486
}
478487
};
488+
(@ (NotNan<$T: ty>) => $(#[$cfg:meta])* impl ($U: ty) ) => {
489+
$(#[$cfg])*
490+
impl AsPrimitive<$U> for NotNan<$T> {
491+
#[inline] fn as_(self) -> $U { self.0 as $U }
492+
}
493+
};
479494
(@ (OrderedFloat<$T: ty>) => $(#[$cfg:meta])* impl (OrderedFloat<$U: ty>) ) => {
480495
$(#[$cfg])*
481496
impl AsPrimitive<OrderedFloat<$U>> for OrderedFloat<$T> {
@@ -502,6 +517,9 @@ macro_rules! impl_as_primitive {
502517
impl_as_primitive!((OrderedFloat<f32>) => { (OrderedFloat<f32>), (OrderedFloat<f64>) });
503518
impl_as_primitive!((OrderedFloat<f64>) => { (OrderedFloat<f32>), (OrderedFloat<f64>) });
504519

520+
impl_as_primitive!((NotNan<f32>) => { (NotNan<f32>), (NotNan<f64>) });
521+
impl_as_primitive!((NotNan<f64>) => { (NotNan<f32>), (NotNan<f64>) });
522+
505523
impl_as_primitive!((u8) => { (OrderedFloat<f32>), (OrderedFloat<f64>) });
506524
impl_as_primitive!((i8) => { (OrderedFloat<f32>), (OrderedFloat<f64>) });
507525
impl_as_primitive!((u16) => { (OrderedFloat<f32>), (OrderedFloat<f64>) });
@@ -529,6 +547,10 @@ impl_as_primitive!((isize) => { (NotNan<f32>), (NotNan<f64>) });
529547
impl_as_primitive!((OrderedFloat<f32>) => { (u8), (u16), (u32), (u64), (usize), (i8), (i16), (i32), (i64), (isize), (f32), (f64) });
530548
impl_as_primitive!((OrderedFloat<f64>) => { (u8), (u16), (u32), (u64), (usize), (i8), (i16), (i32), (i64), (isize), (f32), (f64) });
531549

550+
impl_as_primitive!((NotNan<f32>) => { (u8), (u16), (u32), (u64), (usize), (i8), (i16), (i32), (i64), (isize), (f32), (f64) });
551+
impl_as_primitive!((NotNan<f64>) => { (u8), (u16), (u32), (u64), (usize), (i8), (i16), (i32), (i64), (isize), (f32), (f64) });
552+
553+
532554
impl<T: FromPrimitive> FromPrimitive for OrderedFloat<T> {
533555
fn from_i64(n: i64) -> Option<Self> {
534556
T::from_i64(n).map(OrderedFloat)

0 commit comments

Comments
 (0)