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

Method advanceUntil

roaringarray.go:724–772  ·  view source on GitHub ↗

** * Find the smallest integer index larger than pos such that array[index].key>=min. If none can * be found, return size. Based on code by O. Kaser. * * @param min minimal value * @param pos index to exceed * @return the smallest index greater than pos such that array[index].key is at leas

(min uint16, pos int)

Source from the content-addressed store, hash-verified

722 * min, or size if it is not possible.
723 */
724func (ra *roaringArray) advanceUntil(min uint16, pos int) int {
725 lower := pos + 1
726
727 if lower >= len(ra.keys) || ra.keys[lower] >= min {
728 return lower
729 }
730
731 spansize := 1
732
733 for lower+spansize < len(ra.keys) && ra.keys[lower+spansize] < min {
734 spansize *= 2
735 }
736 var upper int
737 if lower+spansize < len(ra.keys) {
738 upper = lower + spansize
739 } else {
740 upper = len(ra.keys) - 1
741 }
742
743 if ra.keys[upper] == min {
744 return upper
745 }
746
747 if ra.keys[upper] < min {
748 // means
749 // array
750 // has no
751 // item
752 // >= min
753 // pos = array.length;
754 return len(ra.keys)
755 }
756
757 // we know that the next-smallest span was too small
758 lower += (spansize >> 1)
759
760 mid := 0
761 for lower+1 != upper {
762 mid = (lower + upper) >> 1
763 if ra.keys[mid] == min {
764 return mid
765 } else if ra.keys[mid] < min {
766 lower = mid
767 } else {
768 upper = mid
769 }
770 }
771 return upper
772}
773
774func (ra *roaringArray) markAllAsNeedingCopyOnWrite() {
775 for i := range ra.needCopyOnWrite {

Callers 13

AndMethod · 0.45
AndCardinalityMethod · 0.45
IntersectsMethod · 0.45
XorMethod · 0.45
AndNotMethod · 0.45
AndFunction · 0.45
AndNotFunction · 0.45
NextValueMethod · 0.45
PreviousValueMethod · 0.45
NextAbsentValueMethod · 0.45
PreviousAbsentValueMethod · 0.45
AndAnyMethod · 0.45

Calls

no outgoing calls

Tested by 1