failed attempt at moving from array to slice

This commit is contained in:
Todd Gruben 2014-08-18 15:36:27 +00:00
parent e4ab00ae1f
commit 232ac40f81
2 changed files with 21 additions and 17 deletions

View file

@ -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

View file

@ -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