binarySearch returns the index of the key. negative value returned if not found
(begin, end int64, ikey uint16)
| 419 | // binarySearch returns the index of the key. |
| 420 | // negative value returned if not found |
| 421 | func (ra *roaringArray) binarySearch(begin, end int64, ikey uint16) int { |
| 422 | // TODO: add unit tests |
| 423 | low := begin |
| 424 | high := end - 1 |
| 425 | for low+16 <= high { |
| 426 | middleIndex := low + (high-low)/2 // avoid overflow |
| 427 | middleValue := ra.keys[middleIndex] |
| 428 | |
| 429 | if middleValue < ikey { |
| 430 | low = middleIndex + 1 |
| 431 | } else if middleValue > ikey { |
| 432 | high = middleIndex - 1 |
| 433 | } else { |
| 434 | return int(middleIndex) |
| 435 | } |
| 436 | } |
| 437 | for ; low <= high; low++ { |
| 438 | val := ra.keys[low] |
| 439 | if val >= ikey { |
| 440 | if val == ikey { |
| 441 | return int(low) |
| 442 | } |
| 443 | break |
| 444 | } |
| 445 | } |
| 446 | return -int(low + 1) |
| 447 | } |
| 448 | |
| 449 | func (ra *roaringArray) equals(o interface{}) bool { |
| 450 | srb, ok := o.(roaringArray) |
no outgoing calls
no test coverage detected