@@ -470,12 +470,27 @@ impl<T: NumCast> NumCast for OrderedFloat<T> {
470
470
}
471
471
472
472
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
+ } ;
473
482
( @ ( $T: ty) => $( #[ $cfg: meta] ) * impl ( NotNan <$U: ty>) ) => {
474
483
$( #[ $cfg] ) *
475
484
impl AsPrimitive <NotNan <$U>> for $T {
476
485
#[ inline] fn as_( self ) -> NotNan <$U> { NotNan ( self as $U) }
477
486
}
478
487
} ;
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
+ } ;
479
494
( @ ( OrderedFloat <$T: ty>) => $( #[ $cfg: meta] ) * impl ( OrderedFloat <$U: ty>) ) => {
480
495
$( #[ $cfg] ) *
481
496
impl AsPrimitive <OrderedFloat <$U>> for OrderedFloat <$T> {
@@ -502,6 +517,9 @@ macro_rules! impl_as_primitive {
502
517
impl_as_primitive ! ( ( OrderedFloat <f32 >) => { ( OrderedFloat <f32 >) , ( OrderedFloat <f64 >) } ) ;
503
518
impl_as_primitive ! ( ( OrderedFloat <f64 >) => { ( OrderedFloat <f32 >) , ( OrderedFloat <f64 >) } ) ;
504
519
520
+ impl_as_primitive ! ( ( NotNan <f32 >) => { ( NotNan <f32 >) , ( NotNan <f64 >) } ) ;
521
+ impl_as_primitive ! ( ( NotNan <f64 >) => { ( NotNan <f32 >) , ( NotNan <f64 >) } ) ;
522
+
505
523
impl_as_primitive ! ( ( u8 ) => { ( OrderedFloat <f32 >) , ( OrderedFloat <f64 >) } ) ;
506
524
impl_as_primitive ! ( ( i8 ) => { ( OrderedFloat <f32 >) , ( OrderedFloat <f64 >) } ) ;
507
525
impl_as_primitive ! ( ( u16 ) => { ( OrderedFloat <f32 >) , ( OrderedFloat <f64 >) } ) ;
@@ -529,6 +547,10 @@ impl_as_primitive!((isize) => { (NotNan<f32>), (NotNan<f64>) });
529
547
impl_as_primitive ! ( ( OrderedFloat <f32 >) => { ( u8 ) , ( u16 ) , ( u32 ) , ( u64 ) , ( usize ) , ( i8 ) , ( i16 ) , ( i32 ) , ( i64 ) , ( isize ) , ( f32 ) , ( f64 ) } ) ;
530
548
impl_as_primitive ! ( ( OrderedFloat <f64 >) => { ( u8 ) , ( u16 ) , ( u32 ) , ( u64 ) , ( usize ) , ( i8 ) , ( i16 ) , ( i32 ) , ( i64 ) , ( isize ) , ( f32 ) , ( f64 ) } ) ;
531
549
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
+
532
554
impl < T : FromPrimitive > FromPrimitive for OrderedFloat < T > {
533
555
fn from_i64 ( n : i64 ) -> Option < Self > {
534
556
T :: from_i64 ( n) . map ( OrderedFloat )
0 commit comments