mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-06 19:07:50 +00:00
more comments and cleanup
This commit is contained in:
parent
8e3da346c3
commit
c02479a5f9
1 changed files with 15 additions and 15 deletions
|
|
@ -552,17 +552,18 @@ func (b *Bitmap) unionIntoTarget(target *Bitmap, others ...*Bitmap) {
|
|||
target.Containers.Put(iKey, container)
|
||||
otherIters[i:].markItersWithCurrentKeyAsHandled(iKey)
|
||||
} else {
|
||||
// TODO: Implement this
|
||||
// if n < ArrayMaxSize {
|
||||
// // Use an array
|
||||
// // container := &Container{
|
||||
// // containerType: containerArray,
|
||||
// // array: make([]uint16, 0, n),
|
||||
// // }
|
||||
// }
|
||||
// else {
|
||||
// Use a bitmap
|
||||
// Use a bitmap container for the target bitmap, and union everything
|
||||
// into it.
|
||||
//
|
||||
// TODO(rartoul): Add another conditional case for n < ArrayMaxSize
|
||||
// (or some fraction of that value) to avoid allocating expensive
|
||||
// bitmaps when unioning many low-density array containers, but this
|
||||
// will require writing a union in place algorithm for an array container
|
||||
// that accepts multiple different containers to union into it for
|
||||
// efficiency.
|
||||
container := target.Containers.Get(iKey)
|
||||
// If target already has a bitmap container for iKey then we can reuse that,
|
||||
// otherwise we have to allocate a new one.
|
||||
if container == nil || container.containerType != containerBitmap {
|
||||
buf := make([]uint64, bitmapN)
|
||||
ob := buf[:bitmapN]
|
||||
|
|
@ -573,6 +574,10 @@ func (b *Bitmap) unionIntoTarget(target *Bitmap, others ...*Bitmap) {
|
|||
}
|
||||
}
|
||||
|
||||
// Once we've acquire a bitmap container (either by reusing the existing one
|
||||
// or allocating a new one) then the last step is to iterate through all the
|
||||
// other containers to see which ones have the same key, and union all of them
|
||||
// into the target bitmap container.
|
||||
for j, jIter := range otherIters {
|
||||
jKey, jContainer := jIter.iter.Value()
|
||||
|
||||
|
|
@ -592,11 +597,6 @@ func (b *Bitmap) unionIntoTarget(target *Bitmap, others ...*Bitmap) {
|
|||
}
|
||||
|
||||
hasNext = otherIters.next()
|
||||
|
||||
if !hasNext {
|
||||
// None of the iters had any more values, we're done.
|
||||
break
|
||||
}
|
||||
}
|
||||
|
||||
// Repair bitmaps after the fact
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue