(value2 *arrayContainer)
| 653 | } |
| 654 | |
| 655 | func (ac *arrayContainer) xorArray(value2 *arrayContainer) container { |
| 656 | value1 := ac |
| 657 | totalCardinality := value1.getCardinality() + value2.getCardinality() |
| 658 | if totalCardinality > arrayDefaultMaxSize { // it could be a bitmap! |
| 659 | bc := newBitmapContainer() |
| 660 | for k := 0; k < len(value2.content); k++ { |
| 661 | v := value2.content[k] |
| 662 | i := uint(v) >> 6 |
| 663 | bc.bitmap[i] ^= (uint64(1) << (v % 64)) |
| 664 | } |
| 665 | for k := 0; k < len(ac.content); k++ { |
| 666 | v := ac.content[k] |
| 667 | i := uint(v) >> 6 |
| 668 | bc.bitmap[i] ^= (uint64(1) << (v % 64)) |
| 669 | } |
| 670 | bc.computeCardinality() |
| 671 | if bc.cardinality <= arrayDefaultMaxSize { |
| 672 | return bc.toArrayContainer() |
| 673 | } |
| 674 | return bc |
| 675 | } |
| 676 | desiredCapacity := totalCardinality |
| 677 | answer := newArrayContainerCapacity(desiredCapacity) |
| 678 | length := exclusiveUnion2by2(value1.content, value2.content, answer.content) |
| 679 | answer.content = answer.content[:length] |
| 680 | return answer |
| 681 | } |
| 682 | |
| 683 | func (ac *arrayContainer) andNot(a container) container { |
| 684 | switch x := a.(type) { |
no test coverage detected