@@ -10,6 +10,7 @@ extern crate num_traits;
1010
1111use core:: cmp:: Ordering ;
1212use core:: convert:: TryFrom ;
13+ use core:: num:: FpCategory ;
1314use core:: ops:: { Add , AddAssign , Deref , DerefMut , Div , DivAssign , Mul , MulAssign , Neg , Rem ,
1415 RemAssign , Sub , SubAssign } ;
1516use core:: hash:: { Hash , Hasher } ;
@@ -334,6 +335,37 @@ impl<T: ToPrimitive> ToPrimitive for OrderedFloat<T> {
334335 fn to_f64 ( & self ) -> Option < f64 > { self . 0 . to_f64 ( ) }
335336}
336337
338+ impl < T : Float > num_traits:: float:: FloatCore for OrderedFloat < T > {
339+ fn nan ( ) -> Self { OrderedFloat ( T :: nan ( ) ) }
340+ fn infinity ( ) -> Self { OrderedFloat ( T :: infinity ( ) ) }
341+ fn neg_infinity ( ) -> Self { OrderedFloat ( T :: neg_infinity ( ) ) }
342+ fn neg_zero ( ) -> Self { OrderedFloat ( T :: neg_zero ( ) ) }
343+ fn min_value ( ) -> Self { OrderedFloat ( T :: min_value ( ) ) }
344+ fn min_positive_value ( ) -> Self { OrderedFloat ( T :: min_positive_value ( ) ) }
345+ fn max_value ( ) -> Self { OrderedFloat ( T :: max_value ( ) ) }
346+ fn is_nan ( self ) -> bool { self . 0 . is_nan ( ) }
347+ fn is_infinite ( self ) -> bool { self . 0 . is_infinite ( ) }
348+ fn is_finite ( self ) -> bool { self . 0 . is_finite ( ) }
349+ fn is_normal ( self ) -> bool { self . 0 . is_normal ( ) }
350+ fn classify ( self ) -> FpCategory { self . 0 . classify ( ) }
351+ fn floor ( self ) -> Self { OrderedFloat ( self . 0 . floor ( ) ) }
352+ fn ceil ( self ) -> Self { OrderedFloat ( self . 0 . ceil ( ) ) }
353+ fn round ( self ) -> Self { OrderedFloat ( self . 0 . round ( ) ) }
354+ fn trunc ( self ) -> Self { OrderedFloat ( self . 0 . trunc ( ) ) }
355+ fn fract ( self ) -> Self { OrderedFloat ( self . 0 . fract ( ) ) }
356+ fn abs ( self ) -> Self { OrderedFloat ( self . 0 . abs ( ) ) }
357+ fn signum ( self ) -> Self { OrderedFloat ( self . 0 . signum ( ) ) }
358+ fn is_sign_positive ( self ) -> bool { self . 0 . is_sign_positive ( ) }
359+ fn is_sign_negative ( self ) -> bool { self . 0 . is_sign_negative ( ) }
360+ fn recip ( self ) -> Self { OrderedFloat ( self . 0 . recip ( ) ) }
361+ fn powi ( self , n : i32 ) -> Self { OrderedFloat ( self . 0 . powi ( n) ) }
362+ fn integer_decode ( self ) -> ( u64 , i16 , i8 ) { self . 0 . integer_decode ( ) }
363+ fn epsilon ( ) -> Self { OrderedFloat ( T :: epsilon ( ) ) }
364+ fn to_degrees ( self ) -> Self { OrderedFloat ( self . 0 . to_degrees ( ) ) }
365+ fn to_radians ( self ) -> Self { OrderedFloat ( self . 0 . to_radians ( ) ) }
366+ }
367+
368+ #[ cfg( feature = "std" ) ]
337369impl < T : Float > Float for OrderedFloat < T > {
338370 fn nan ( ) -> Self { OrderedFloat ( T :: nan ( ) ) }
339371 fn infinity ( ) -> Self { OrderedFloat ( T :: infinity ( ) ) }
@@ -346,7 +378,7 @@ impl<T: Float> Float for OrderedFloat<T> {
346378 fn is_infinite ( self ) -> bool { self . 0 . is_infinite ( ) }
347379 fn is_finite ( self ) -> bool { self . 0 . is_finite ( ) }
348380 fn is_normal ( self ) -> bool { self . 0 . is_normal ( ) }
349- fn classify ( self ) -> std :: num :: FpCategory { self . 0 . classify ( ) }
381+ fn classify ( self ) -> FpCategory { self . 0 . classify ( ) }
350382 fn floor ( self ) -> Self { OrderedFloat ( self . 0 . floor ( ) ) }
351383 fn ceil ( self ) -> Self { OrderedFloat ( self . 0 . ceil ( ) ) }
352384 fn round ( self ) -> Self { OrderedFloat ( self . 0 . round ( ) ) }
@@ -392,6 +424,9 @@ impl<T: Float> Float for OrderedFloat<T> {
392424 fn acosh ( self ) -> Self { OrderedFloat ( self . 0 . acosh ( ) ) }
393425 fn atanh ( self ) -> Self { OrderedFloat ( self . 0 . atanh ( ) ) }
394426 fn integer_decode ( self ) -> ( u64 , i16 , i8 ) { self . 0 . integer_decode ( ) }
427+ fn epsilon ( ) -> Self { OrderedFloat ( T :: epsilon ( ) ) }
428+ fn to_degrees ( self ) -> Self { OrderedFloat ( self . 0 . to_degrees ( ) ) }
429+ fn to_radians ( self ) -> Self { OrderedFloat ( self . 0 . to_radians ( ) ) }
395430}
396431
397432
0 commit comments