- endPieceIndex := f.endPieceIndex()
- bitmap.Flip(f.t.completedPieces, firstPieceIndex, endPieceIndex+1).IterTyped(func(piece int) bool {
- p := &f.t.pieces[piece]
- left += int64(p.length() - p.numDirtyBytes())
- return true
- })
- startPiece := f.t.piece(firstPieceIndex)
- endChunk := int(f.offset%f.t.info.PieceLength) * int(startPiece.numChunks()) / int(startPiece.length())
- bitmap.Flip(startPiece.dirtyChunks, 0, endChunk).IterTyped(func(chunk int) bool {
- left -= int64(startPiece.chunkSize())
- return true
- })
- endPiece := f.t.piece(endPieceIndex)
- startChunk := int((f.offset+f.length)%f.t.info.PieceLength) * int(endPiece.numChunks()) / int(endPiece.length())
- lastChunkIndex := int(endPiece.lastChunkIndex())
- bitmap.Flip(endPiece.dirtyChunks, startChunk, int(endPiece.numChunks())).IterTyped(func(chunk int) bool {
- if chunk == lastChunkIndex {
- left -= int64(endPiece.chunkIndexSpec(pp.Integer(chunk)).Length)
- } else {
- left -= int64(endPiece.chunkSize())
+ endPieceIndex := f.endPieceIndex() - 1
+ bitmap.Flip(f.t.completedPieces, firstPieceIndex+1, endPieceIndex).IterTyped(func(piece int) bool {
+ if piece >= endPieceIndex {
+ return false
+ }
+ if piece > firstPieceIndex {
+ left += pieceSize