File tree 1 file changed +22
-2
lines changed
1 file changed +22
-2
lines changed Original file line number Diff line number Diff line change @@ -893,8 +893,28 @@ func (bc *bitmapContainer) iandNotArray(ac *arrayContainer) container {
893
893
}
894
894
895
895
func (bc * bitmapContainer ) iandNotRun16 (rc * runContainer16 ) container {
896
- rcb := rc .toBitmapContainer ()
897
- return bc .iandNotBitmapSurely (rcb )
896
+ if rc .isEmpty () || bc .isEmpty () {
897
+ // Nothing to do.
898
+ return bc
899
+ }
900
+
901
+ wordRangeStart := rc .iv [0 ].start / 64
902
+ wordRangeEnd := (rc .iv [len (rc .iv )- 1 ].last ()) / 64 // inclusive
903
+
904
+ cardinalityChange := popcntSlice (bc .bitmap [wordRangeStart : wordRangeEnd + 1 ]) // before cardinality - after cardinality (for word range)
905
+
906
+ for _ , iv := range rc .iv {
907
+ resetBitmapRange (bc .bitmap , int (iv .start ), int (iv .last ()+ 1 ))
908
+ }
909
+
910
+ cardinalityChange -= popcntSlice (bc .bitmap [wordRangeStart : wordRangeEnd + 1 ])
911
+
912
+ bc .cardinality -= int (cardinalityChange )
913
+
914
+ if bc .getCardinality () <= arrayDefaultMaxSize {
915
+ return bc .toArrayContainer ()
916
+ }
917
+ return bc
898
918
}
899
919
900
920
func (bc * bitmapContainer ) andNotArray (value2 * arrayContainer ) container {
You can’t perform that action at this time.
0 commit comments