File tree Expand file tree Collapse file tree 2 files changed +22
-6
lines changed
Expand file tree Collapse file tree 2 files changed +22
-6
lines changed Original file line number Diff line number Diff line change @@ -659,9 +659,13 @@ impl<I: SliceIterator<Interval>> RunIter<I> {
659659 self . intervals . next ( ) ;
660660 return ;
661661 }
662- if Some ( self . forward_offset as u64 )
663- >= self . intervals . as_slice ( ) . first ( ) . map ( |f| f. run_len ( ) )
664- {
662+ let total_offset = u64:: from ( self . forward_offset )
663+ + if self . intervals . as_slice ( ) . len ( ) == 1 {
664+ u64:: from ( self . backward_offset )
665+ } else {
666+ 0
667+ } ;
668+ if Some ( total_offset) >= self . intervals . as_slice ( ) . first ( ) . map ( |f| f. run_len ( ) ) {
665669 self . intervals . next ( ) ;
666670 self . forward_offset = 0 ;
667671 }
@@ -674,9 +678,9 @@ impl<I: SliceIterator<Interval>> RunIter<I> {
674678 self . intervals . next_back ( ) ;
675679 return ;
676680 }
677- if Some ( self . backward_offset as u64 )
678- >= self . intervals . as_slice ( ) . last ( ) . map ( |f| f . run_len ( ) )
679- {
681+ let total_offset = u64 :: from ( self . backward_offset )
682+ + if self . intervals . as_slice ( ) . len ( ) == 1 { u64 :: from ( self . forward_offset ) } else { 0 } ;
683+ if Some ( total_offset ) >= self . intervals . as_slice ( ) . last ( ) . map ( |f| f . run_len ( ) ) {
680684 self . intervals . next_back ( ) ;
681685 self . backward_offset = 0 ;
682686 }
Original file line number Diff line number Diff line change @@ -224,3 +224,15 @@ fn advance_run_back_before_start() {
224224 iter. advance_back_to ( 499 ) ;
225225 assert_eq ! ( iter. next_back( ) , None ) ;
226226}
227+
228+ #[ test]
229+ fn advance_run_back_reduces_forward_iter ( ) {
230+ let mut bitmap = RoaringBitmap :: new ( ) ;
231+ bitmap. insert_range ( 0 ..=0x4000 ) ;
232+ let mut iter = bitmap. iter ( ) ;
233+ iter. advance_back_to ( 1 ) ;
234+
235+ assert_eq ! ( iter. next( ) , Some ( 0 ) ) ;
236+ assert_eq ! ( iter. next( ) , Some ( 1 ) ) ;
237+ assert_eq ! ( iter. next( ) , None ) ;
238+ }
You can’t perform that action at this time.
0 commit comments