tidwall-btree.go 820 B

12345678910111213141516171819202122232425262728293031323334353637
  1. package requestStrategy
  2. import (
  3. "github.com/tidwall/btree"
  4. )
  5. type tidwallBtree struct {
  6. tree *btree.BTreeG[pieceRequestOrderItem]
  7. PathHint *btree.PathHint
  8. }
  9. func (me *tidwallBtree) Scan(f func(pieceRequestOrderItem) bool) {
  10. me.tree.Scan(f)
  11. }
  12. func NewTidwallBtree() *tidwallBtree {
  13. return &tidwallBtree{
  14. tree: btree.NewBTreeGOptions(
  15. func(a, b pieceRequestOrderItem) bool {
  16. return a.Less(&b)
  17. },
  18. btree.Options{NoLocks: true, Degree: 64}),
  19. }
  20. }
  21. func (me *tidwallBtree) Add(item pieceRequestOrderItem) {
  22. if _, ok := me.tree.SetHint(item, me.PathHint); ok {
  23. panic("shouldn't already have this")
  24. }
  25. }
  26. type PieceRequestOrderPathHint = btree.PathHint
  27. func (me *tidwallBtree) Delete(item pieceRequestOrderItem) {
  28. _, deleted := me.tree.DeleteHint(item, me.PathHint)
  29. mustValue(deleted, item)
  30. }