]> Sergey Matveev's repositories - btrtrc.git/blobdiff - prioritized_peers.go
No Web*
[btrtrc.git] / prioritized_peers.go
index 0eddf161dd5ac0ea475b0688c3cfe2e081df5705..443d72072188aec5398e8953a4283c1aff6de9dd 100644 (file)
@@ -11,7 +11,7 @@ import (
 // change if our apparent IP changes, we don't currently handle that.
 type prioritizedPeersItem struct {
        prio peerPriority
-       p    Peer
+       p    PeerInfo
 }
 
 var hashSeed = maphash.MakeSeed()
@@ -34,10 +34,10 @@ func (me prioritizedPeersItem) Less(than btree.Item) bool {
 
 type prioritizedPeers struct {
        om      *btree.BTree
-       getPrio func(Peer) peerPriority
+       getPrio func(PeerInfo) peerPriority
 }
 
-func (me *prioritizedPeers) Each(f func(Peer)) {
+func (me *prioritizedPeers) Each(f func(PeerInfo)) {
        me.om.Ascend(func(i btree.Item) bool {
                f(i.(prioritizedPeersItem).p)
                return true
@@ -45,16 +45,19 @@ func (me *prioritizedPeers) Each(f func(Peer)) {
 }
 
 func (me *prioritizedPeers) Len() int {
+       if me == nil || me.om == nil {
+               return 0
+       }
        return me.om.Len()
 }
 
 // Returns true if a peer is replaced.
-func (me *prioritizedPeers) Add(p Peer) bool {
+func (me *prioritizedPeers) Add(p PeerInfo) bool {
        return me.om.ReplaceOrInsert(prioritizedPeersItem{me.getPrio(p), p}) != nil
 }
 
 // Returns true if a peer is replaced.
-func (me *prioritizedPeers) AddReturningReplacedPeer(p Peer) (ret Peer, ok bool) {
+func (me *prioritizedPeers) AddReturningReplacedPeer(p PeerInfo) (ret PeerInfo, ok bool) {
        item := me.om.ReplaceOrInsert(prioritizedPeersItem{me.getPrio(p), p})
        if item == nil {
                return
@@ -74,6 +77,6 @@ func (me *prioritizedPeers) DeleteMin() (ret prioritizedPeersItem, ok bool) {
        return
 }
 
-func (me *prioritizedPeers) PopMax() Peer {
+func (me *prioritizedPeers) PopMax() PeerInfo {
        return me.om.DeleteMax().(prioritizedPeersItem).p
 }