btree btree.Set[PieceRequestOrderItem]
}
+func (a *ajwernerBtree) Contains(item PieceRequestOrderItem) bool {
+ _, ok := a.btree.Get(item)
+ return ok
+}
+
var _ Btree = (*ajwernerBtree)(nil)
func NewAjwernerBtree() *ajwernerBtree {
"unique"
g "github.com/anacrolix/generics"
+ "github.com/anacrolix/missinggo/v2/panicif"
"github.com/anacrolix/torrent/metainfo"
)
type Btree interface {
Delete(PieceRequestOrderItem)
Add(PieceRequestOrderItem)
+ // TODO: Add an iterator variant of this and benchmark.
Scan(func(PieceRequestOrderItem) bool)
+ Contains(PieceRequestOrderItem) bool
}
func NewPieceOrder(btree Btree, cap int) *PieceRequestOrder {
})
}
}
+
+func (me *PieceRequestOrder) Get(key PieceRequestOrderKey) (ret g.Option[PieceRequestOrderState]) {
+ ret.Value, ret.Ok = me.keys[key]
+ panicif.NotEq(ret.Ok, me.tree.Contains(PieceRequestOrderItem{key, ret.Value}))
+ return
+}
_, deleted := me.tree.DeleteHint(item, me.PathHint)
mustValue(deleted, item)
}
+
+func (me *tidwallBtree) Contains(item PieceRequestOrderItem) bool {
+ _, ok := me.tree.Get(item)
+ return ok
+}