MCPcopy Create free account
hub / github.com/RoaringBitmap/roaring / lazyOrOnRange

Function lazyOrOnRange

parallel.go:482–552  ·  view source on GitHub ↗
(ra1, ra2 *roaringArray, start, last uint16)

Source from the content-addressed store, hash-verified

480}
481
482func lazyOrOnRange(ra1, ra2 *roaringArray, start, last uint16) *roaringArray {
483 answer := newRoaringArray()
484 length1 := ra1.size()
485 length2 := ra2.size()
486
487 idx1 := parNaiveStartAt(ra1, start, last)
488 idx2 := parNaiveStartAt(ra2, start, last)
489
490 var key1 uint16
491 var key2 uint16
492 if idx1 < length1 && idx2 < length2 {
493 key1 = ra1.getKeyAtIndex(idx1)
494 key2 = ra2.getKeyAtIndex(idx2)
495
496 for key1 <= last && key2 <= last {
497
498 if key1 < key2 {
499 answer.appendCopy(*ra1, idx1)
500 idx1++
501 if idx1 == length1 {
502 break
503 }
504 key1 = ra1.getKeyAtIndex(idx1)
505 } else if key1 > key2 {
506 answer.appendCopy(*ra2, idx2)
507 idx2++
508 if idx2 == length2 {
509 break
510 }
511 key2 = ra2.getKeyAtIndex(idx2)
512 } else {
513 c1 := ra1.getFastContainerAtIndex(idx1, false)
514
515 answer.appendContainer(key1, c1.lazyOR(ra2.getContainerAtIndex(idx2)), false)
516 idx1++
517 idx2++
518 if idx1 == length1 || idx2 == length2 {
519 break
520 }
521
522 key1 = ra1.getKeyAtIndex(idx1)
523 key2 = ra2.getKeyAtIndex(idx2)
524 }
525 }
526 }
527
528 if idx2 < length2 {
529 key2 = ra2.getKeyAtIndex(idx2)
530 for key2 <= last {
531 answer.appendCopy(*ra2, idx2)
532 idx2++
533 if idx2 == length2 {
534 break
535 }
536 key2 = ra2.getKeyAtIndex(idx2)
537 }
538 }
539

Callers 1

ParOrFunction · 0.85

Calls 9

newRoaringArrayFunction · 0.85
parNaiveStartAtFunction · 0.70
lazyORMethod · 0.65
sizeMethod · 0.45
getKeyAtIndexMethod · 0.45
appendCopyMethod · 0.45
appendContainerMethod · 0.45
getContainerAtIndexMethod · 0.45

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…