package roaring type shortIterable interface { hasNext() bool next() uint16 } type shortPeekable interface { shortIterable peekNext() uint16 advanceIfNeeded(minval uint16) } type shortIterator struct { slice []uint16 loc int } func (si *shortIterator) hasNext() bool { return si.loc < len(si.slice) } func (si *shortIterator) next() uint16 { a := si.slice[si.loc] si.loc++ return a } func (si *shortIterator) peekNext() uint16 { return si.slice[si.loc] } func (si *shortIterator) advanceIfNeeded(minval uint16) { if si.hasNext() && si.peekNext() < minval { si.loc = advanceUntil(si.slice, si.loc, len(si.slice), minval) } } type reverseIterator struct { slice []uint16 loc int } func (si *reverseIterator) hasNext() bool { return si.loc >= 0 } func (si *reverseIterator) next() uint16 { a := si.slice[si.loc] si.loc-- return a }