@@ -30,6 +30,7 @@ pub(crate) struct Worker<T: Sync + Send + 'static> {
3030 pub ( crate ) matches : Vec < Match > ,
3131 pub ( crate ) pattern : MultiPattern ,
3232 pub ( crate ) sort_results : bool ,
33+ pub ( crate ) reverse_items : bool ,
3334 pub ( crate ) canceled : Arc < AtomicBool > ,
3435 pub ( crate ) should_notify : Arc < AtomicBool > ,
3536 pub ( crate ) was_canceled : bool ,
@@ -51,6 +52,9 @@ impl<T: Sync + Send + 'static> Worker<T> {
5152 pub ( crate ) fn sort_results ( & mut self , sort_results : bool ) {
5253 self . sort_results = sort_results;
5354 }
55+ pub ( crate ) fn reverse_items ( & mut self , reverse_items : bool ) {
56+ self . reverse_items = reverse_items;
57+ }
5458
5559 pub ( crate ) fn new (
5660 worker_threads : Option < usize > ,
@@ -76,6 +80,7 @@ impl<T: Sync + Send + 'static> Worker<T> {
7680 // just a placeholder
7781 pattern : MultiPattern :: new ( cols as usize ) ,
7882 sort_results : true ,
83+ reverse_items : false ,
7984 canceled : Arc :: new ( AtomicBool :: new ( false ) ) ,
8085 should_notify : Arc :: new ( AtomicBool :: new ( false ) ) ,
8186 was_canceled : false ,
@@ -254,7 +259,11 @@ impl<T: Sync + Send + 'static> Worker<T> {
254259 . map ( |haystack| haystack. len ( ) as u32 )
255260 . sum ( ) ;
256261 if len1 == len2 {
257- match1. idx < match2. idx
262+ if self . reverse_items {
263+ match2. idx < match1. idx
264+ } else {
265+ match1. idx < match2. idx
266+ }
258267 } else {
259268 len1 < len2
260269 }
@@ -271,7 +280,11 @@ impl<T: Sync + Send + 'static> Worker<T> {
271280 if match2. idx == u32:: MAX {
272281 return true ;
273282 }
274- match1. idx < match2. idx
283+ if self . reverse_items {
284+ match2. idx < match1. idx
285+ } else {
286+ match1. idx < match2. idx
287+ }
275288 } ,
276289 & self . canceled ,
277290 )
0 commit comments