mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-10-08 03:47:51 +00:00
Merge pull request #1839 from tgruben/numbytes
added convenience function to efficiently calculate size of a roaring bitmap in bytes
This commit is contained in:
commit
923e67959c
2 changed files with 35 additions and 0 deletions
|
|
@ -232,6 +232,18 @@ func (b *Bitmap) Count() (n uint64) {
|
|||
return b.Containers.Count()
|
||||
}
|
||||
|
||||
// Size returns the number of bytes required for the bitmap.
|
||||
func (b *Bitmap) Size() int {
|
||||
numbytes := 0
|
||||
citer, _ := b.Containers.Iterator(0)
|
||||
for citer.Next() {
|
||||
_, c := citer.Value()
|
||||
numbytes += c.size()
|
||||
|
||||
}
|
||||
return numbytes
|
||||
}
|
||||
|
||||
// CountRange returns the number of bits set between [start, end).
|
||||
func (b *Bitmap) CountRange(start, end uint64) (n uint64) {
|
||||
if b.Containers.Size() == 0 {
|
||||
|
|
|
|||
|
|
@ -37,6 +37,29 @@ func TestContainerCount(t *testing.T) {
|
|||
t.Fatalf("Count != CountRange\n")
|
||||
}
|
||||
}
|
||||
func TestSize(t *testing.T) {
|
||||
//array
|
||||
a := roaring.NewFileBitmap(0, 65535, 131072)
|
||||
if a.Size() != 6 {
|
||||
t.Fatalf("Size in bytes incorrect \n")
|
||||
}
|
||||
|
||||
//bitmap
|
||||
b := roaring.NewFileBitmap()
|
||||
for i := uint64(0); i <= 4096; i++ {
|
||||
b.DirectAdd(i)
|
||||
}
|
||||
|
||||
if b.Size() != 8192 {
|
||||
t.Fatalf("Size in bytes incorrect \n")
|
||||
}
|
||||
//convert to rle
|
||||
b.Optimize()
|
||||
//rle
|
||||
if b.Size() != 6 {
|
||||
t.Fatalf("Size in bytes incorrect \n")
|
||||
}
|
||||
}
|
||||
|
||||
func TestCountRange(t *testing.T) {
|
||||
tests := []struct {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue