From 232ac40f8135ba238594210afef4bd96ed62ee01 Mon Sep 17 00:00:00 2001 From: Todd Gruben Date: Mon, 18 Aug 2014 15:36:27 +0000 Subject: [PATCH] failed attempt at moving from array to slice --- index/bitmap.go | 36 ++++++++++++++++++++---------------- index/storage_leveldb.go | 2 +- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/index/bitmap.go b/index/bitmap.go index f68fd162e..f2ad791cf 100644 --- a/index/bitmap.go +++ b/index/bitmap.go @@ -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 diff --git a/index/storage_leveldb.go b/index/storage_leveldb.go index 06d3d7f87..3a50decd4 100644 --- a/index/storage_leveldb.go +++ b/index/storage_leveldb.go @@ -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