MCPcopy Index your code
hub / github.com/RoaringBitmap/roaring / orArray

Method orArray

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

Source from the content-addressed store, hash-verified

491}
492
493func (ac *arrayContainer) orArray(value2 *arrayContainer) container {
494 value1 := ac
495 maxPossibleCardinality := value1.getCardinality() + value2.getCardinality()
496 if maxPossibleCardinality > arrayDefaultMaxSize { // it could be a bitmap!
497 bc := newBitmapContainer()
498 for k := 0; k < len(value2.content); k++ {
499 v := value2.content[k]
500 i := uint(v) >> 6
501 mask := uint64(1) << (v % 64)
502 bc.bitmap[i] |= mask
503 }
504 for k := 0; k < len(ac.content); k++ {
505 v := ac.content[k]
506 i := uint(v) >> 6
507 mask := uint64(1) << (v % 64)
508 bc.bitmap[i] |= mask
509 }
510 bc.cardinality = int(popcntSlice(bc.bitmap))
511 if bc.cardinality <= arrayDefaultMaxSize {
512 return bc.toArrayContainer()
513 }
514 return bc
515 }
516 answer := newArrayContainerCapacity(maxPossibleCardinality)
517 nl := union2by2(value1.content, value2.content, answer.content)
518 answer.content = answer.content[:nl] // reslice to match actual used capacity
519 return answer
520}
521
522func (ac *arrayContainer) orArrayCardinality(value2 *arrayContainer) int {
523 return union2by2Cardinality(ac.content, value2.content)

Callers 4

orMethod · 0.95
iorMethod · 0.45
iorRun16Method · 0.45
lazyORMethod · 0.45

Calls 6

newBitmapContainerFunction · 0.85
popcntSliceFunction · 0.70
union2by2Function · 0.70
getCardinalityMethod · 0.65
toArrayContainerMethod · 0.45

Tested by

no test coverage detected