MCPcopy
hub / github.com/RoaringBitmap/roaring / xorArray

Method xorArray

arraycontainer.go:655–681  ·  view source on GitHub ↗
(value2 *arrayContainer)

Source from the content-addressed store, hash-verified

653}
654
655func (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
683func (ac *arrayContainer) andNot(a container) container {
684 switch x := a.(type) {

Callers 2

xorMethod · 0.95
ixorArrayMethod · 0.95

Calls 6

newBitmapContainerFunction · 0.85
exclusiveUnion2by2Function · 0.85
computeCardinalityMethod · 0.80
getCardinalityMethod · 0.65
toArrayContainerMethod · 0.45

Tested by

no test coverage detected