Move undirtiedChunksIter into its own file

This commit is contained in:
Matt Joiner 2022-05-09 12:51:01 +10:00
parent e90037216c
commit daff06cf20
No known key found for this signature in database
GPG Key ID: 6B990B8185E7F782
2 changed files with 34 additions and 30 deletions

View File

@ -10,7 +10,6 @@ import (
"github.com/anacrolix/torrent/metainfo"
pp "github.com/anacrolix/torrent/peer_protocol"
"github.com/anacrolix/torrent/storage"
"github.com/anacrolix/torrent/typed-roaring"
)
type Piece struct {
@ -249,35 +248,6 @@ func init() {
gob.Register(undirtiedChunksIter{})
}
// Use an iterator to jump between dirty bits.
type undirtiedChunksIter struct {
TorrentDirtyChunks *typedRoaring.Bitmap[RequestIndex]
StartRequestIndex RequestIndex
EndRequestIndex RequestIndex
}
func (me *undirtiedChunksIter) Iter(f func(chunkIndexType)) {
it := me.TorrentDirtyChunks.Iterator()
startIndex := me.StartRequestIndex
endIndex := me.EndRequestIndex
it.AdvanceIfNeeded(startIndex)
lastDirty := startIndex - 1
for it.HasNext() {
next := it.Next()
if next >= endIndex {
break
}
for index := lastDirty + 1; index < next; index++ {
f(index - startIndex)
}
lastDirty = next
}
for index := lastDirty + 1; index < endIndex; index++ {
f(index - startIndex)
}
return
}
func (p *Piece) requestIndexOffset() RequestIndex {
return p.t.pieceRequestIndexOffset(p.index)
}

34
undirtied-chunks-iter.go Normal file
View File

@ -0,0 +1,34 @@
package torrent
import (
"github.com/anacrolix/torrent/typed-roaring"
)
// Use an iterator to jump between dirty bits.
type undirtiedChunksIter struct {
TorrentDirtyChunks *typedRoaring.Bitmap[RequestIndex]
StartRequestIndex RequestIndex
EndRequestIndex RequestIndex
}
func (me *undirtiedChunksIter) Iter(f func(chunkIndexType)) {
it := me.TorrentDirtyChunks.Iterator()
startIndex := me.StartRequestIndex
endIndex := me.EndRequestIndex
it.AdvanceIfNeeded(startIndex)
lastDirty := startIndex - 1
for it.HasNext() {
next := it.Next()
if next >= endIndex {
break
}
for index := lastDirty + 1; index < next; index++ {
f(index - startIndex)
}
lastDirty = next
}
for index := lastDirty + 1; index < endIndex; index++ {
f(index - startIndex)
}
return
}