Speed up torrent.needData, and use new missinggo iterator interface
This commit is contained in:
parent
1b8bc1498c
commit
2e3bc1090b
25
client.go
25
client.go
@ -24,6 +24,7 @@ import (
|
|||||||
|
|
||||||
"github.com/anacrolix/missinggo"
|
"github.com/anacrolix/missinggo"
|
||||||
. "github.com/anacrolix/missinggo"
|
. "github.com/anacrolix/missinggo"
|
||||||
|
"github.com/anacrolix/missinggo/bitmap"
|
||||||
"github.com/anacrolix/missinggo/pubsub"
|
"github.com/anacrolix/missinggo/pubsub"
|
||||||
"github.com/anacrolix/sync"
|
"github.com/anacrolix/sync"
|
||||||
"github.com/anacrolix/utp"
|
"github.com/anacrolix/utp"
|
||||||
@ -1666,23 +1667,23 @@ func (me *Client) addConnection(t *torrent, c *connection) bool {
|
|||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (t *torrent) readerPieces() (ret bitmap.Bitmap) {
|
||||||
|
t.forReaderOffsetPieces(func(begin, end int) bool {
|
||||||
|
ret.AddRange(begin, end)
|
||||||
|
return true
|
||||||
|
})
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
func (t *torrent) needData() bool {
|
func (t *torrent) needData() bool {
|
||||||
if !t.haveInfo() {
|
if !t.haveInfo() {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
for i := t.pendingPieces.IterTyped(); i.Next(); {
|
if t.pendingPieces.Len() != 0 {
|
||||||
if t.wantPiece(i.ValueInt()) {
|
|
||||||
i.Stop()
|
|
||||||
return true
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return !t.forReaderOffsetPieces(func(begin, end int) (again bool) {
|
|
||||||
for i := begin; i < end; i++ {
|
|
||||||
if !t.pieceComplete(i) {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return true
|
return true
|
||||||
|
}
|
||||||
|
return !t.readerPieces().IterTyped(func(piece int) bool {
|
||||||
|
return t.pieceComplete(piece)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user