shortiterator.go 865 B

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. package roaring
  2. type shortIterable interface {
  3. hasNext() bool
  4. next() uint16
  5. }
  6. type shortPeekable interface {
  7. shortIterable
  8. peekNext() uint16
  9. advanceIfNeeded(minval uint16)
  10. }
  11. type shortIterator struct {
  12. slice []uint16
  13. loc int
  14. }
  15. func (si *shortIterator) hasNext() bool {
  16. return si.loc < len(si.slice)
  17. }
  18. func (si *shortIterator) next() uint16 {
  19. a := si.slice[si.loc]
  20. si.loc++
  21. return a
  22. }
  23. func (si *shortIterator) peekNext() uint16 {
  24. return si.slice[si.loc]
  25. }
  26. func (si *shortIterator) advanceIfNeeded(minval uint16) {
  27. if si.hasNext() && si.peekNext() < minval {
  28. si.loc = advanceUntil(si.slice, si.loc, len(si.slice), minval)
  29. }
  30. }
  31. type reverseIterator struct {
  32. slice []uint16
  33. loc int
  34. }
  35. func (si *reverseIterator) hasNext() bool {
  36. return si.loc >= 0
  37. }
  38. func (si *reverseIterator) next() uint16 {
  39. a := si.slice[si.loc]
  40. si.loc--
  41. return a
  42. }