mirror of
https://github.com/featurebasedb/featurebase.git
synced 2026-09-07 17:15:56 +00:00
failed attempt at moving from array to slice
This commit is contained in:
parent
e4ab00ae1f
commit
232ac40f81
2 changed files with 21 additions and 17 deletions
|
|
@ -27,6 +27,7 @@ var (
|
|||
func init() {
|
||||
var dumb = COUNTERMASK
|
||||
COUNTER_KEY = int64(dumb)
|
||||
|
||||
}
|
||||
|
||||
//
|
||||
|
|
@ -80,19 +81,20 @@ func popcount(x uint64) (n uint64) {
|
|||
*/
|
||||
|
||||
type BlockArray struct {
|
||||
Block [32]uint64
|
||||
Block []uint64
|
||||
}
|
||||
|
||||
func (s *BlockArray) bitcount() uint64 {
|
||||
var sum uint64
|
||||
/*var sum uint64
|
||||
for _, b := range (*s).Block {
|
||||
sum += popcount(b)
|
||||
}
|
||||
return sum
|
||||
// return popcntSlice(s.Block)
|
||||
*/
|
||||
return popcntSlice(s.Block)
|
||||
}
|
||||
func BlockArray_union(a *BlockArray, b *BlockArray) BlockArray {
|
||||
var o = BlockArray{}
|
||||
var o = BlockArray{make([]uint64, 32, 32)}
|
||||
for i, _ := range a.Block {
|
||||
o.Block[i] = a.Block[i] | b.Block[i]
|
||||
}
|
||||
|
|
@ -100,7 +102,7 @@ func BlockArray_union(a *BlockArray, b *BlockArray) BlockArray {
|
|||
}
|
||||
|
||||
func BlockArray_invert(a *BlockArray) BlockArray {
|
||||
var o = BlockArray{}
|
||||
var o = BlockArray{make([]uint64, 32, 32)}
|
||||
for i, _ := range a.Block {
|
||||
o.Block[i] = ^a.Block[i]
|
||||
}
|
||||
|
|
@ -108,14 +110,14 @@ func BlockArray_invert(a *BlockArray) BlockArray {
|
|||
}
|
||||
|
||||
func BlockArray_copy(a *BlockArray) BlockArray {
|
||||
var o = BlockArray{}
|
||||
var o = BlockArray{make([]uint64, 32, 32)}
|
||||
for i, _ := range a.Block {
|
||||
o.Block[i] = a.Block[i]
|
||||
}
|
||||
return o
|
||||
}
|
||||
func BlockArray_intersection(a *BlockArray, b *BlockArray) BlockArray {
|
||||
var o = BlockArray{}
|
||||
var o = BlockArray{make([]uint64, 32, 32)}
|
||||
for i, _ := range a.Block {
|
||||
o.Block[i] = a.Block[i] & b.Block[i]
|
||||
}
|
||||
|
|
@ -123,7 +125,7 @@ func BlockArray_intersection(a *BlockArray, b *BlockArray) BlockArray {
|
|||
}
|
||||
|
||||
func BlockArray_difference(a *BlockArray, b *BlockArray) BlockArray {
|
||||
var o = BlockArray{}
|
||||
var o = BlockArray{make([]uint64, 32, 32)}
|
||||
for i, _ := range a.Block {
|
||||
o.Block[i] = a.Block[i] &^ b.Block[i]
|
||||
}
|
||||
|
|
@ -357,7 +359,7 @@ func (r *RBNodeIterator) Item() *Chunk {
|
|||
return nil
|
||||
}
|
||||
func GetChunk(bm IBitmap, ChunkKey uint64) *Chunk {
|
||||
look := &Chunk{ChunkKey, BlockArray{}}
|
||||
look := &Chunk{ChunkKey, BlockArray{make([]uint64, 32, 32)}}
|
||||
return bm.Get(look)
|
||||
}
|
||||
|
||||
|
|
@ -425,11 +427,12 @@ func (b *Bitmap) ToBytes() []byte {
|
|||
)
|
||||
enc := gob.NewEncoder(&buf)
|
||||
enc.Encode(b.nodes.Len())
|
||||
c := 0
|
||||
for i := b.nodes.Min(); !i.Limit(); i = i.Next() {
|
||||
obj := i.Item().(*Chunk)
|
||||
enc.Encode(obj)
|
||||
c += 1
|
||||
err := enc.Encode(&obj)
|
||||
if err != nil {
|
||||
log.Println(err)
|
||||
}
|
||||
}
|
||||
return buf.Bytes()
|
||||
}
|
||||
|
|
@ -442,9 +445,10 @@ func (self *Bitmap) FromBytes(raw []byte) {
|
|||
dec.Decode(&size)
|
||||
self.nodes = NewRB()
|
||||
for i := 0; i < size; i++ {
|
||||
chunk := &Chunk{}
|
||||
dec.Decode(&chunk)
|
||||
self.AddChunk(chunk)
|
||||
//chunk := &Chunk{0, BlockArray{make([]uint64, 32, 32)}}
|
||||
var chunk Chunk
|
||||
dec.Decode(chunk)
|
||||
self.AddChunk(&chunk)
|
||||
}
|
||||
self.SetCount(BitCount(self))
|
||||
}
|
||||
|
|
@ -510,7 +514,7 @@ func SetBit(b IBitmap, position uint64) (bool, *Chunk, Address) {
|
|||
item := GetChunk(b, address.ChunkKey)
|
||||
var node *Chunk
|
||||
if item == nil {
|
||||
node = &Chunk{address.ChunkKey, BlockArray{}}
|
||||
node = &Chunk{address.ChunkKey, BlockArray{make([]uint64, 32, 32)}}
|
||||
b.AddChunk(node)
|
||||
} else {
|
||||
node = item
|
||||
|
|
|
|||
|
|
@ -86,7 +86,7 @@ func (self *LevelDBStorage) Fetch(bitmap_id uint64, db string, frame string, sli
|
|||
block, filter = decodeValue(iter.Value())
|
||||
if chunk_key != COUNTERMASK {
|
||||
if chunk_key != last_key {
|
||||
chunk = &Chunk{chunk_key, BlockArray{}}
|
||||
chunk = &Chunk{chunk_key, BlockArray{make([]uint64, 32, 32)}}
|
||||
bitmap.AddChunk(chunk)
|
||||
}
|
||||
chunk.Value.Block[block_index] = block
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue