@@ -3,6 +3,7 @@ mod sort_key_computer;
33use columnar:: StrColumn ;
44pub use sort_key_computer:: { SegmentSortKeyComputer , SortKeyComputer } ;
55
6+ use crate :: fastfield:: FastValue ;
67use crate :: termdict:: TermOrdinal ;
78use crate :: { DocId , Order , Score } ;
89
@@ -36,12 +37,8 @@ impl<TSegmentSortKeyComputer, TSegmentSortKey> SegmentSortKeyComputer
3637 for ( TSegmentSortKeyComputer , Order )
3738where
3839 TSegmentSortKeyComputer : SegmentSortKeyComputer < SegmentSortKey = TSegmentSortKey > ,
39- TSegmentSortKey : ReverseOrder < ReverseOrderType = TSegmentSortKey >
40- + PartialOrd
41- + Clone
42- + ' static
43- + Sync
44- + Send ,
40+ TSegmentSortKey :
41+ ReverseOrder < ReverseType = TSegmentSortKey > + PartialOrd + Clone + ' static + Sync + Send ,
4542{
4643 type SortKey = TSegmentSortKeyComputer :: SortKey ;
4744 type SegmentSortKey = TSegmentSortKey ;
@@ -70,53 +67,55 @@ where
7067//
7168// We then rely on an ReverseOrder implementation with a ReverseOrderType that maps to Self.
7269pub trait ReverseOrder : Clone {
73- type ReverseOrderType : PartialOrd + Clone ;
70+ type ReverseType : PartialOrd + Clone ;
7471
75- fn to_reverse_type ( self ) -> Self :: ReverseOrderType ;
72+ fn to_reverse_type ( self ) -> Self :: ReverseType ;
7673
77- fn from_reverse_type ( reverse_value : Self :: ReverseOrderType ) -> Self ;
74+ fn from_reverse_type ( reverse_value : Self :: ReverseType ) -> Self ;
7875}
7976
8077fn reverse_if_asc < T > ( value : T , order : Order ) -> T
81- where T : ReverseOrder < ReverseOrderType = T > {
78+ where T : ReverseOrder < ReverseType = T > {
8279 match order {
8380 Order :: Asc => value. to_reverse_type ( ) ,
8481 Order :: Desc => value,
8582 }
8683}
8784
88- impl ReverseOrder for u64 {
89- type ReverseOrderType = u64 ;
85+ impl < TFastValue : FastValue > ReverseOrder for TFastValue {
86+ type ReverseType = TFastValue ;
9087
91- fn to_reverse_type ( self ) -> Self :: ReverseOrderType {
92- u64:: MAX - self
88+ fn to_reverse_type ( self ) -> Self :: ReverseType {
89+ // TODO check that the compiler is good enough to compile that to i64::MAX - self for i64
90+ // for instance.
91+ TFastValue :: from_u64 ( u64:: MAX - self . to_u64 ( ) )
9392 }
9493
95- fn from_reverse_type ( reverse_value : Self :: ReverseOrderType ) -> Self {
94+ fn from_reverse_type ( reverse_value : Self :: ReverseType ) -> Self {
9695 reverse_value. to_reverse_type ( )
9796 }
9897}
9998
10099impl ReverseOrder for u32 {
101- type ReverseOrderType = u32 ;
100+ type ReverseType = u32 ;
102101
103- fn to_reverse_type ( self ) -> Self :: ReverseOrderType {
102+ fn to_reverse_type ( self ) -> Self :: ReverseType {
104103 u32:: MAX - self
105104 }
106105
107- fn from_reverse_type ( reverse_value : Self :: ReverseOrderType ) -> Self {
106+ fn from_reverse_type ( reverse_value : Self :: ReverseType ) -> Self {
108107 reverse_value. to_reverse_type ( )
109108 }
110109}
111110
112111impl ReverseOrder for f32 {
113- type ReverseOrderType = f32 ;
112+ type ReverseType = f32 ;
114113
115- fn to_reverse_type ( self ) -> Self :: ReverseOrderType {
114+ fn to_reverse_type ( self ) -> Self :: ReverseType {
116115 f32:: MAX - self
117116 }
118117
119- fn from_reverse_type ( reverse_value : Self :: ReverseOrderType ) -> Self {
118+ fn from_reverse_type ( reverse_value : Self :: ReverseType ) -> Self {
120119 // That's an involution
121120 reverse_value. to_reverse_type ( )
122121 }
@@ -125,13 +124,13 @@ impl ReverseOrder for f32 {
125124// The point here is that for Option, we do not want None values to come on top
126125// when running a Asc query.
127126impl < T : ReverseOrder > ReverseOrder for Option < T > {
128- type ReverseOrderType = Option < T :: ReverseOrderType > ;
127+ type ReverseType = Option < T :: ReverseType > ;
129128
130- fn to_reverse_type ( self ) -> Self :: ReverseOrderType {
129+ fn to_reverse_type ( self ) -> Self :: ReverseType {
131130 self . map ( |val| val. to_reverse_type ( ) )
132131 }
133132
134- fn from_reverse_type ( reverse_value : Self :: ReverseOrderType ) -> Self {
133+ fn from_reverse_type ( reverse_value : Self :: ReverseType ) -> Self {
135134 reverse_value. map ( T :: from_reverse_type)
136135 }
137136}
0 commit comments