p.m.SetValue(_r, prev+1)
}
-func (p *pendingRequests) Init() {
+func (p *pendingRequests) Init(maxIndex RequestIndex) {
p.m = roaring.NewDefaultBSI()
}
}
func (p *requestablePiece) chunkIndexToRequestIndex(c ChunkIndex) RequestIndex {
- return RequestIndex(p.t.ChunksPerPiece*p.index) + RequestIndex(c)
+ return p.t.ChunksPerPiece*uint32(p.index) + c
}
type filterPiece struct {
Peers []Peer
// Some value that's unique and stable between runs. Could even use the infohash?
InfoHash metainfo.Hash
- ChunksPerPiece int
+ ChunksPerPiece uint32
MaxUnverifiedBytes int64
}
}
rst := request_strategy.Torrent{
InfoHash: t.infoHash,
- ChunksPerPiece: (t.usualPieceSize() + int(t.chunkSize) - 1) / int(t.chunkSize),
+ ChunksPerPiece: t.chunksPerRegularPiece(),
}
if t.storage != nil {
rst.Capacity = t.storage.Capacity
leftRequest := p.requestIndexes[i]
rightRequest := p.requestIndexes[j]
t := p.peer.t
- leftPieceIndex := leftRequest / t.chunksPerRegularPiece()
- rightPieceIndex := rightRequest / t.chunksPerRegularPiece()
+ leftPieceIndex := leftRequest / p.torrentStrategyInput.ChunksPerPiece
+ rightPieceIndex := rightRequest / p.torrentStrategyInput.ChunksPerPiece
leftCurrent := p.peer.actualRequestState.Requests.Contains(leftRequest)
rightCurrent := p.peer.actualRequestState.Requests.Contains(rightRequest)
pending := func(index RequestIndex, current bool) int {
t.cl.event.Broadcast()
close(t.gotMetainfoC)
t.updateWantPeersEvent()
- t.pendingRequests.Init()
+ t.pendingRequests.Init(t.numRequests())
t.tryCreateMorePieceHashers()
t.iterPeers(func(p *Peer) {
p.onGotInfo(t.info)
return uint32((pp.Integer(t.usualPieceSize()) + t.chunkSize - 1) / t.chunkSize)
}
+func (t *Torrent) numRequests() RequestIndex {
+ if t.numPieces() == 0 {
+ return 0
+ }
+ return uint32(t.numPieces()-1)*t.chunksPerRegularPiece() + t.pieceNumChunks(t.numPieces()-1)
+}
+
func (t *Torrent) pendAllChunkSpecs(pieceIndex pieceIndex) {
t.dirtyChunks.RemoveRange(
uint64(t.pieceRequestIndexOffset(pieceIndex)),
return t.pieceRequestIndexOffset(pieceIndex(r.Index)) + uint32(r.Begin/t.chunkSize)
}
-func (t *Torrent) numChunks() RequestIndex {
- return RequestIndex((t.Length() + int64(t.chunkSize) - 1) / int64(t.chunkSize))
-}
-
func (t *Torrent) pieceRequestIndexOffset(piece pieceIndex) RequestIndex {
return RequestIndex(piece) * t.chunksPerRegularPiece()
}