(rc *runContainer16)
| 1021 | } |
| 1022 | |
| 1023 | func (bc *bitmapContainer) iandNotRun16(rc *runContainer16) container { |
| 1024 | if rc.isEmpty() || bc.isEmpty() { |
| 1025 | // Nothing to do. |
| 1026 | return bc |
| 1027 | } |
| 1028 | |
| 1029 | wordRangeStart := rc.iv[0].start / 64 |
| 1030 | wordRangeEnd := (rc.iv[len(rc.iv)-1].last()) / 64 // inclusive |
| 1031 | |
| 1032 | cardinalityChange := popcntSlice(bc.bitmap[wordRangeStart : wordRangeEnd+1]) // before cardinality - after cardinality (for word range) |
| 1033 | |
| 1034 | for _, iv := range rc.iv { |
| 1035 | resetBitmapRange(bc.bitmap, int(iv.start), int(iv.last())+1) |
| 1036 | } |
| 1037 | |
| 1038 | cardinalityChange -= popcntSlice(bc.bitmap[wordRangeStart : wordRangeEnd+1]) |
| 1039 | |
| 1040 | bc.cardinality -= int(cardinalityChange) |
| 1041 | |
| 1042 | if bc.getCardinality() <= arrayDefaultMaxSize { |
| 1043 | return bc.toArrayContainer() |
| 1044 | } |
| 1045 | return bc |
| 1046 | } |
| 1047 | |
| 1048 | func (bc *bitmapContainer) andNotArray(value2 *arrayContainer) container { |
| 1049 | answer := bc.clone().(*bitmapContainer) |
no test coverage detected