]> Sergey Matveev's repositories - btrtrc.git/blob - request-strategy/tidwall-btree.go
Drop support for go 1.20
[btrtrc.git] / request-strategy / tidwall-btree.go
1 package requestStrategy
2
3 import (
4         "github.com/tidwall/btree"
5 )
6
7 type tidwallBtree struct {
8         tree     *btree.BTreeG[pieceRequestOrderItem]
9         PathHint *btree.PathHint
10 }
11
12 func (me *tidwallBtree) Scan(f func(pieceRequestOrderItem) bool) {
13         me.tree.Scan(f)
14 }
15
16 func NewTidwallBtree() *tidwallBtree {
17         return &tidwallBtree{
18                 tree: btree.NewBTreeGOptions(
19                         func(a, b pieceRequestOrderItem) bool {
20                                 return a.Less(&b)
21                         },
22                         btree.Options{NoLocks: true, Degree: 64}),
23         }
24 }
25
26 func (me *tidwallBtree) Add(item pieceRequestOrderItem) {
27         if _, ok := me.tree.SetHint(item, me.PathHint); ok {
28                 panic("shouldn't already have this")
29         }
30 }
31
32 type PieceRequestOrderPathHint = btree.PathHint
33
34 func (me *tidwallBtree) Delete(item pieceRequestOrderItem) {
35         _, deleted := me.tree.DeleteHint(item, me.PathHint)
36         mustValue(deleted, item)
37 }