File tree 2 files changed +34
-11
lines changed
RoaringBitmap/src/main/java/org/roaringbitmap
2 files changed +34
-11
lines changed Original file line number Diff line number Diff line change @@ -817,19 +817,30 @@ protected boolean contains(BitmapContainer bitmapContainer) {
817
817
}
818
818
final int runCount = numberOfRuns ();
819
819
char ib = 0 , ir = 0 ;
820
+ int start = getValue (ir );
821
+ int stop = start + getLength (ir );
820
822
while (ib < bitmapContainer .bitmap .length && ir < runCount ) {
821
823
long w = bitmapContainer .bitmap [ib ];
822
- while (w != 0 && ir < runCount ) {
823
- int start = (getValue (ir ));
824
- int stop = start + (getLength (ir ));
825
- long t = w & -w ;
824
+ while (true ) {
826
825
long r = ib * 64L + Long .numberOfTrailingZeros (w );
827
826
if (r < start ) {
828
827
return false ;
829
828
} else if (r > stop ) {
830
829
++ir ;
830
+ if (ir == runCount ) {
831
+ break ;
832
+ }
833
+ w &= w - 1 ;
834
+ start = getValue (ir );
835
+ stop = start + getLength (ir );
836
+ } else if (ib * 64 + 64 < stop ) {
837
+ ib = (char ) (stop / 64 );
838
+ w = bitmapContainer .bitmap [ib ];
831
839
} else {
832
- w ^= t ;
840
+ w &= w - 1 ;
841
+ if (w == 0 ) {
842
+ break ;
843
+ }
833
844
}
834
845
}
835
846
if (w == 0 ) {
Original file line number Diff line number Diff line change @@ -2737,19 +2737,31 @@ protected boolean contains(MappeableBitmapContainer bitmapContainer) {
2737
2737
}
2738
2738
final int runCount = numberOfRuns ();
2739
2739
char ib = 0 , ir = 0 ;
2740
+ int start = getValue (0 );
2741
+ int stop = start + getLength (0 );
2740
2742
while (ib < MappeableBitmapContainer .MAX_CAPACITY / 64 && ir < runCount ) {
2741
2743
long w = bitmapContainer .bitmap .get (ib );
2742
- while (w != 0 && ir < runCount ) {
2743
- int start = (getValue (ir ));
2744
- int stop = start + (getLength (ir ));
2745
- long t = w & -w ;
2744
+ while (true ) {
2746
2745
long r = ib * 64 + Long .numberOfTrailingZeros (w );
2747
2746
if (r < start ) {
2748
2747
return false ;
2749
- } else if (r > stop ) {
2748
+ } else if (r > stop ) {
2750
2749
++ir ;
2750
+ if (ir == runCount ) {
2751
+ break ;
2752
+ }
2753
+ w &= w - 1 ;
2754
+ start = getValue (ir );
2755
+ stop = start + getLength (ir );
2756
+
2757
+ } else if (ib * 64 + 64 < stop ) {
2758
+ ib = (char ) (stop / 64 );
2759
+ w = bitmapContainer .bitmap .get (ib );
2751
2760
} else {
2752
- w ^= t ;
2761
+ w &= w - 1 ;
2762
+ if (w == 0 ) {
2763
+ break ;
2764
+ }
2753
2765
}
2754
2766
}
2755
2767
if (w == 0 ) {
You can’t perform that action at this time.
0 commit comments