ajwerner-btree.go 858 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package requestStrategy
  2. import (
  3. "github.com/ajwerner/btree"
  4. )
  5. type ajwernerBtree struct {
  6. btree btree.Set[pieceRequestOrderItem]
  7. }
  8. var _ Btree = (*ajwernerBtree)(nil)
  9. func NewAjwernerBtree() *ajwernerBtree {
  10. return &ajwernerBtree{
  11. btree: btree.MakeSet(func(t, t2 pieceRequestOrderItem) int {
  12. return pieceOrderLess(&t, &t2).OrderingInt()
  13. }),
  14. }
  15. }
  16. func mustValue[V any](b bool, panicValue V) {
  17. if !b {
  18. panic(panicValue)
  19. }
  20. }
  21. func (a *ajwernerBtree) Delete(item pieceRequestOrderItem) {
  22. mustValue(a.btree.Delete(item), item)
  23. }
  24. func (a *ajwernerBtree) Add(item pieceRequestOrderItem) {
  25. _, overwrote := a.btree.Upsert(item)
  26. mustValue(!overwrote, item)
  27. }
  28. func (a *ajwernerBtree) Scan(f func(pieceRequestOrderItem) bool) {
  29. it := a.btree.Iterator()
  30. it.First()
  31. for it.First(); it.Valid(); it.Next() {
  32. if !f(it.Cur()) {
  33. break
  34. }
  35. }
  36. }