From 89714c706d3036f4904aca2caf3624a53e517c3b Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Thu, 21 Dec 2017 15:12:35 -0600 Subject: [PATCH] added binary search to runAdd --- roaring/roaring.go | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/roaring/roaring.go b/roaring/roaring.go index 3f8dcd0d8..5bf78942a 100644 --- a/roaring/roaring.go +++ b/roaring/roaring.go @@ -1216,16 +1216,18 @@ func (c *container) runAdd(v uint16) bool { c.runs = []interval16{{start: v, last: v}} return true } - i := 0 - var iv interval16 - for i, iv = range c.runs { - if iv.last >= v { - break - } + i := sort.Search(len(c.runs), + func(i int) bool { return c.runs[i].last >= v }) + + if i == len(c.runs){ + i-- } - if v >= iv.start && iv.last >= v { + + iv:=c.runs[i] + if v>= iv.start && iv.last>=v{ return false } + c.unmap() if iv.last < v { if iv.last == v-1 {