2018-05-19 20:49:46 +08:00
|
|
|
package roaring
|
|
|
|
|
|
|
|
type manyIterable interface {
|
|
|
|
nextMany(hs uint32, buf []uint32) int
|
2020-10-16 13:06:27 +08:00
|
|
|
nextMany64(hs uint64, buf []uint64) int
|
2018-05-19 20:49:46 +08:00
|
|
|
}
|
|
|
|
|
2019-11-27 17:23:33 +08:00
|
|
|
func (si *shortIterator) nextMany(hs uint32, buf []uint32) int {
|
2018-05-19 20:49:46 +08:00
|
|
|
n := 0
|
|
|
|
l := si.loc
|
|
|
|
s := si.slice
|
|
|
|
for n < len(buf) && l < len(s) {
|
|
|
|
buf[n] = uint32(s[l]) | hs
|
|
|
|
l++
|
|
|
|
n++
|
|
|
|
}
|
|
|
|
si.loc = l
|
|
|
|
return n
|
|
|
|
}
|
2020-10-16 13:06:27 +08:00
|
|
|
|
|
|
|
func (si *shortIterator) nextMany64(hs uint64, buf []uint64) int {
|
|
|
|
n := 0
|
|
|
|
l := si.loc
|
|
|
|
s := si.slice
|
|
|
|
for n < len(buf) && l < len(s) {
|
|
|
|
buf[n] = uint64(s[l]) | hs
|
|
|
|
l++
|
|
|
|
n++
|
|
|
|
}
|
|
|
|
si.loc = l
|
|
|
|
return n
|
|
|
|
}
|