11#![ no_std]  
22#![ cfg_attr( test,  deny( warnings) ) ]  
33#![ deny( missing_docs) ]  
4+ #![ allow( clippy:: derive_partial_eq_without_eq) ]  
45
56//! Wrappers for total order on Floats. See the [`OrderedFloat`] and [`NotNan`] docs for details. 
67
@@ -27,7 +28,9 @@ use core::str::FromStr;
2728use  num_traits:: float:: FloatCore  as  Float ; 
2829#[ cfg( feature = "std" ) ]  
2930pub  use  num_traits:: Float ; 
30- use  num_traits:: { Bounded ,  FromPrimitive ,  Num ,  NumCast ,  One ,  Signed ,  ToPrimitive ,  Zero } ; 
31+ use  num_traits:: { 
32+  AsPrimitive ,  Bounded ,  FromPrimitive ,  Num ,  NumCast ,  One ,  Signed ,  ToPrimitive ,  Zero , 
33+ } ; 
3134
3235// masks for the parts of the IEEE 754 float 
3336const  SIGN_MASK :  u64  = 0x8000000000000000u64 ; 
@@ -452,6 +455,49 @@ impl<T: NumCast> NumCast for OrderedFloat<T> {
452455 } 
453456} 
454457
458+ macro_rules!  impl_as_primitive { 
459+  ( @ ( OrderedFloat <$T:  ty>)  => $( #[ $cfg: meta] ) *  impl  ( OrderedFloat <$U:  ty>)  )  => { 
460+  $( #[ $cfg] ) * 
461+  impl  AsPrimitive <OrderedFloat <$U>> for  OrderedFloat <$T> { 
462+  #[ inline]  fn  as_( self )  -> OrderedFloat <$U> {  OrderedFloat ( self . 0  as  $U)  } 
463+  } 
464+  } ; 
465+  ( @ ( $T:  ty)  => $( #[ $cfg: meta] ) *  impl  ( OrderedFloat <$U:  ty>)  )  => { 
466+  $( #[ $cfg] ) * 
467+  impl  AsPrimitive <OrderedFloat <$U>> for  $T { 
468+  #[ inline]  fn  as_( self )  -> OrderedFloat <$U> {  OrderedFloat ( self  as  $U)  } 
469+  } 
470+  } ; 
471+  ( @ ( OrderedFloat <$T:  ty>)  => $( #[ $cfg: meta] ) *  impl  ( $U:  ty)  )  => { 
472+  $( #[ $cfg] ) * 
473+  impl  AsPrimitive <$U> for  OrderedFloat <$T> { 
474+  #[ inline]  fn  as_( self )  -> $U {  self . 0  as  $U } 
475+  } 
476+  } ; 
477+  ( $T:  tt => {  $(  $U:  tt ) ,*  }  )  => { $( 
478+  impl_as_primitive!( @ $T => impl  $U) ; 
479+  ) * } ; 
480+ } 
481+ 
482+ impl_as_primitive ! ( ( OrderedFloat <f32 >)  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
483+ impl_as_primitive ! ( ( OrderedFloat <f64 >)  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
484+ 
485+ impl_as_primitive ! ( ( u8 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
486+ impl_as_primitive ! ( ( i8 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
487+ impl_as_primitive ! ( ( u16 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
488+ impl_as_primitive ! ( ( i16 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
489+ impl_as_primitive ! ( ( u32 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
490+ impl_as_primitive ! ( ( i32 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
491+ impl_as_primitive ! ( ( u64 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
492+ impl_as_primitive ! ( ( i64 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
493+ impl_as_primitive ! ( ( usize )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
494+ impl_as_primitive ! ( ( isize )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
495+ impl_as_primitive ! ( ( f32 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
496+ impl_as_primitive ! ( ( f64 )  => {  ( OrderedFloat <f32 >) ,  ( OrderedFloat <f64 >)  } ) ; 
497+ 
498+ impl_as_primitive ! ( ( OrderedFloat <f32 >)  => {  ( u8 ) ,  ( u16 ) ,  ( u32 ) ,  ( u64 ) ,  ( usize ) ,  ( i8 ) ,  ( i16 ) ,  ( i32 ) ,  ( i64 ) ,  ( isize ) ,  ( f32 ) ,  ( f64 )  } ) ; 
499+ impl_as_primitive ! ( ( OrderedFloat <f64 >)  => {  ( u8 ) ,  ( u16 ) ,  ( u32 ) ,  ( u64 ) ,  ( usize ) ,  ( i8 ) ,  ( i16 ) ,  ( i32 ) ,  ( i64 ) ,  ( isize ) ,  ( f32 ) ,  ( f64 )  } ) ; 
500+ 
455501impl < T :  FromPrimitive >  FromPrimitive  for  OrderedFloat < T >  { 
456502 fn  from_i64 ( n :  i64 )  -> Option < Self >  { 
457503 T :: from_i64 ( n) . map ( OrderedFloat ) 
0 commit comments