mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-09 14:41:02 +00:00
optimize differenceArrayBitmap
This commit is contained in:
parent
71b7216c51
commit
08133368e3
2 changed files with 9 additions and 18 deletions
|
|
@ -2124,6 +2124,7 @@ func intersectArrayBitmap(a, b *container) *container {
|
|||
output.array = append(output.array, va)
|
||||
}
|
||||
}
|
||||
output.n = len(output.array)
|
||||
return output
|
||||
}
|
||||
|
||||
|
|
@ -2680,26 +2681,17 @@ func differenceRunRun(a, b *container) *container {
|
|||
|
||||
func differenceArrayBitmap(a, b *container) *container {
|
||||
output := &container{container_type: ContainerArray}
|
||||
itr := newBufBitmapIterator(newBitmapIterator(b.bitmap))
|
||||
for i := 0; i < len(a.array); {
|
||||
va := a.array[i]
|
||||
vb, eof := itr.next()
|
||||
if eof {
|
||||
output.add(va)
|
||||
i++
|
||||
continue
|
||||
}
|
||||
for _, va := range a.array {
|
||||
bmidx := va / 64
|
||||
bidx := va % 64
|
||||
mask := uint64(1) << bidx
|
||||
b := b.bitmap[bmidx]
|
||||
|
||||
if va < vb {
|
||||
output.add(va)
|
||||
i++
|
||||
itr.unread()
|
||||
} else if va > vb {
|
||||
// nop
|
||||
} else {
|
||||
i++
|
||||
if mask&^b > 0 {
|
||||
output.array = append(output.array, va)
|
||||
}
|
||||
}
|
||||
output.n = len(output.array)
|
||||
return output
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -2498,7 +2498,6 @@ func TestIntersectArrayBitmap(t *testing.T) {
|
|||
b.container_type = ContainerBitmap
|
||||
ret1 := intersectArrayBitmapOld(a, b).array
|
||||
ret2 := intersectArrayBitmap(a, b).array
|
||||
fmt.Println("ret1", ret1, "ret2", ret2, "test.exp", test.exp)
|
||||
if len(ret1) == 0 && len(ret2) == 0 && len(test.exp) == 0 {
|
||||
continue
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue