X-Git-Url: http://www.git.stargrave.org/?a=blobdiff_plain;f=requesting.go;h=8b9db971b537630e65dd41ca9618f8a708f6a698;hb=HEAD;hp=f9b5424f003a771ebe78e655b2eac82089193ffd;hpb=8ac9ea890eae7cff0705059dbfdf2a2e4f315cbc;p=btrtrc.git diff --git a/requesting.go b/requesting.go index f9b5424f..8b9db971 100644 --- a/requesting.go +++ b/requesting.go @@ -9,9 +9,9 @@ import ( "time" "unsafe" + "github.com/anacrolix/generics/heap" "github.com/anacrolix/log" "github.com/anacrolix/multiless" - "github.com/lispad/go-generics-tools/binheap" requestStrategy "github.com/anacrolix/torrent/request-strategy" typedRoaring "github.com/anacrolix/torrent/typed-roaring" @@ -80,14 +80,6 @@ type desiredPeerRequests struct { pieceStates []requestStrategy.PieceRequestOrderState } -func (p *desiredPeerRequests) Len() int { - return len(p.requestIndexes) -} - -func (p *desiredPeerRequests) Less(i, j int) bool { - return p.lessByValue(p.requestIndexes[i], p.requestIndexes[j]) -} - func (p *desiredPeerRequests) lessByValue(leftRequest, rightRequest RequestIndex) bool { t := p.peer.t leftPieceIndex := t.pieceIndexOfRequestIndex(leftRequest) @@ -168,21 +160,6 @@ func (p *desiredPeerRequests) lessByValue(leftRequest, rightRequest RequestIndex return ml.Less() } -func (p *desiredPeerRequests) Swap(i, j int) { - p.requestIndexes[i], p.requestIndexes[j] = p.requestIndexes[j], p.requestIndexes[i] -} - -func (p *desiredPeerRequests) Push(x interface{}) { - p.requestIndexes = append(p.requestIndexes, x.(RequestIndex)) -} - -func (p *desiredPeerRequests) Pop() interface{} { - last := len(p.requestIndexes) - 1 - x := p.requestIndexes[last] - p.requestIndexes = p.requestIndexes[:last] - return x -} - type desiredRequestState struct { Requests desiredPeerRequests Interested bool @@ -275,7 +252,9 @@ func (p *Peer) applyRequestState(next desiredRequestState) { return } more := true - requestHeap := binheap.FromSlice(next.Requests.requestIndexes, next.Requests.lessByValue) + requestHeap := heap.InterfaceForSlice(&next.Requests.requestIndexes, next.Requests.lessByValue) + heap.Init(requestHeap) + t := p.t originalRequestCount := current.Requests.GetCardinality() // We're either here on a timer, or because we ran out of requests. Both are valid reasons to @@ -286,7 +265,7 @@ func (p *Peer) applyRequestState(next desiredRequestState) { originalRequestCount, p.needRequestUpdate)) } for requestHeap.Len() != 0 && maxRequests(current.Requests.GetCardinality()+current.Cancelled.GetCardinality()) < p.nominalMaxRequests() { - req := requestHeap.Pop() + req := heap.Pop(requestHeap) existing := t.requestingPeer(req) if existing != nil && existing != p { // Don't steal from the poor.