4 "github.com/anacrolix/multiless"
5 "github.com/google/btree"
8 // Peers are stored with their priority at insertion. Their priority may
9 // change if our apparent IP changes, we don't currently handle that.
10 type prioritizedPeersItem struct {
15 func (me prioritizedPeersItem) Less(than btree.Item) bool {
16 other := than.(prioritizedPeersItem)
17 return multiless.New().Bool(
18 me.p.Trusted, other.p.Trusted).Uint32(
23 type prioritizedPeers struct {
25 getPrio func(Peer) peerPriority
28 func (me *prioritizedPeers) Each(f func(Peer)) {
29 me.om.Ascend(func(i btree.Item) bool {
30 f(i.(prioritizedPeersItem).p)
35 func (me *prioritizedPeers) Len() int {
39 // Returns true if a peer is replaced.
40 func (me *prioritizedPeers) Add(p Peer) bool {
41 return me.om.ReplaceOrInsert(prioritizedPeersItem{me.getPrio(p), p}) != nil
44 func (me *prioritizedPeers) DeleteMin() (ret prioritizedPeersItem, ok bool) {
45 i := me.om.DeleteMin()
49 ret = i.(prioritizedPeersItem)
54 func (me *prioritizedPeers) PopMax() Peer {
55 return me.om.DeleteMax().(prioritizedPeersItem).p