From: Matt Joiner Date: Thu, 25 Nov 2021 11:32:52 +0000 (+1100) Subject: Revert "Use a flat slice for pending request counts" X-Git-Tag: v1.39.0~45^2~1 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=8ddbf5a852e5090c3060f32ec92113b1a62bf342;p=btrtrc.git Revert "Use a flat slice for pending request counts" This reverts commit dfc421824ce6c146ff9d9062ad25748c0f8c9990. --- diff --git a/pending-requests.go b/pending-requests.go index 3d0e4ca6..dcb1faf1 100644 --- a/pending-requests.go +++ b/pending-requests.go @@ -1,33 +1,50 @@ package torrent +import ( + rbm "github.com/RoaringBitmap/roaring" + roaring "github.com/RoaringBitmap/roaring/BitSliceIndexing" +) + type pendingRequests struct { - m []int + m *roaring.BSI } func (p *pendingRequests) Dec(r RequestIndex) { - prev := p.m[r] + _r := uint64(r) + prev, _ := p.m.GetValue(_r) if prev <= 0 { panic(prev) } - p.m[r]-- + p.m.SetValue(_r, prev-1) } func (p *pendingRequests) Inc(r RequestIndex) { - p.m[r]++ + _r := uint64(r) + prev, _ := p.m.GetValue(_r) + p.m.SetValue(_r, prev+1) } func (p *pendingRequests) Init(maxIndex RequestIndex) { - p.m = make([]int, maxIndex) + p.m = roaring.NewDefaultBSI() +} + +var allBits rbm.Bitmap + +func init() { + allBits.AddRange(0, rbm.MaxRange) } func (p *pendingRequests) AssertEmpty() { - for _, count := range p.m { - if count != 0 { - panic(count) - } + if p.m == nil { + panic(p.m) + } + sum, _ := p.m.Sum(&allBits) + if sum != 0 { + panic(sum) } } func (p *pendingRequests) Get(r RequestIndex) int { - return p.m[r] + count, _ := p.m.GetValue(uint64(r)) + return int(count) }