piece.go | 30 ------------------------------ undirtied-chunks-iter.go | 34 ++++++++++++++++++++++++++++++++++ diff --git a/piece.go b/piece.go index 44f2dd9d623410844a2769f952130aa1886e3163..d892a406e809843af1eee379f28c5171724e2e25 100644 --- a/piece.go +++ b/piece.go @@ -10,7 +10,6 @@ "github.com/anacrolix/missinggo/v2/bitmap" "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 { @@ -247,35 +246,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 { diff --git a/undirtied-chunks-iter.go b/undirtied-chunks-iter.go new file mode 100644 index 0000000000000000000000000000000000000000..14f88a24f922ee966d7315263f716b41c77130b2 --- /dev/null +++ b/undirtied-chunks-iter.go @@ -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 +}