Reduce allocations in iterBitmapsDistinct
This commit is contained in:
parent
8dcc52ccf9
commit
95d72a452a
22
misc_test.go
22
misc_test.go
@ -23,14 +23,20 @@ func TestTorrentOffsetRequest(t *testing.T) {
|
||||
check(13, 5, 13, Request{}, false)
|
||||
}
|
||||
|
||||
func TestIterBitmapsDistinct(t *testing.T) {
|
||||
var skip, first, second bitmap.Bitmap
|
||||
skip.Add(1)
|
||||
first.Add(1, 0, 3)
|
||||
second.Add(1, 2, 0)
|
||||
skipCopy := skip.Copy()
|
||||
assert.Equal(t, []interface{}{0, 3, 2}, iter.ToSlice(iterBitmapsDistinct(&skipCopy, first, second)))
|
||||
assert.Equal(t, []int{1}, skip.ToSortedSlice())
|
||||
func BenchmarkIterBitmapsDistinct(t *testing.B) {
|
||||
t.ReportAllocs()
|
||||
for range iter.N(t.N) {
|
||||
var skip, first, second bitmap.Bitmap
|
||||
skip.Add(1)
|
||||
first.Add(1, 0, 3)
|
||||
second.Add(1, 2, 0)
|
||||
skipCopy := skip.Copy()
|
||||
t.StartTimer()
|
||||
output := iter.ToSlice(iterBitmapsDistinct(&skipCopy, first, second))
|
||||
t.StopTimer()
|
||||
assert.Equal(t, []interface{}{0, 3, 2}, output)
|
||||
assert.Equal(t, []int{1}, skip.ToSortedSlice())
|
||||
}
|
||||
}
|
||||
|
||||
func TestSpewConnStats(t *testing.T) {
|
||||
|
@ -743,12 +743,13 @@ func (cn *PeerConn) updateRequests() {
|
||||
func iterBitmapsDistinct(skip *bitmap.Bitmap, bms ...bitmap.Bitmap) iter.Func {
|
||||
return func(cb iter.Callback) {
|
||||
for _, bm := range bms {
|
||||
bm.Sub(*skip)
|
||||
if !iter.All(
|
||||
func(i interface{}) bool {
|
||||
skip.Add(i.(int))
|
||||
return cb(i)
|
||||
},
|
||||
bitmap.Sub(bm, *skip).Iter,
|
||||
bm.Iter,
|
||||
) {
|
||||
return
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user