use NeedleValue directly instead of additional pointer, to reduce memory
usage
This commit is contained in:
@@ -13,13 +13,13 @@ type NeedleValue struct {
|
|||||||
|
|
||||||
type NeedleMap struct {
|
type NeedleMap struct {
|
||||||
indexFile *os.File
|
indexFile *os.File
|
||||||
m map[uint64]*NeedleValue //mapping needle key(uint64) to NeedleValue
|
m map[uint64]NeedleValue //mapping needle key(uint64) to NeedleValue
|
||||||
bytes []byte
|
bytes []byte
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewNeedleMap(file *os.File) *NeedleMap {
|
func NewNeedleMap(file *os.File) *NeedleMap {
|
||||||
nm := &NeedleMap{
|
nm := &NeedleMap{
|
||||||
m: make(map[uint64]*NeedleValue),
|
m: make(map[uint64]NeedleValue),
|
||||||
bytes: make([]byte, 16),
|
bytes: make([]byte, 16),
|
||||||
indexFile: file,
|
indexFile: file,
|
||||||
}
|
}
|
||||||
@@ -44,7 +44,7 @@ func LoadNeedleMap(file *os.File) *NeedleMap {
|
|||||||
offset := util.BytesToUint32(bytes[i+8 : i+12])
|
offset := util.BytesToUint32(bytes[i+8 : i+12])
|
||||||
size := util.BytesToUint32(bytes[i+12 : i+16])
|
size := util.BytesToUint32(bytes[i+12 : i+16])
|
||||||
if offset>0 {
|
if offset>0 {
|
||||||
nm.m[key] = &NeedleValue{util.Offset: offset, Size: size}
|
nm.m[key] = NeedleValue{util.Offset: offset, Size: size}
|
||||||
}else{
|
}else{
|
||||||
delete(nm.m, key)
|
delete(nm.m, key)
|
||||||
}
|
}
|
||||||
@@ -56,13 +56,13 @@ func LoadNeedleMap(file *os.File) *NeedleMap {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (nm *NeedleMap) Put(key uint64, offset uint32, size uint32) (int, error) {
|
func (nm *NeedleMap) Put(key uint64, offset uint32, size uint32) (int, error) {
|
||||||
nm.m[key] = &NeedleValue{Offset: offset, Size: size}
|
nm.m[key] = NeedleValue{Offset: offset, Size: size}
|
||||||
util.Uint64toBytes(nm.bytes[0:8], key)
|
util.Uint64toBytes(nm.bytes[0:8], key)
|
||||||
util.Uint32toBytes(nm.bytes[8:12], offset)
|
util.Uint32toBytes(nm.bytes[8:12], offset)
|
||||||
util.Uint32toBytes(nm.bytes[12:16], size)
|
util.Uint32toBytes(nm.bytes[12:16], size)
|
||||||
return nm.indexFile.Write(nm.bytes)
|
return nm.indexFile.Write(nm.bytes)
|
||||||
}
|
}
|
||||||
func (nm *NeedleMap) Get(key uint64) (element *NeedleValue, ok bool) {
|
func (nm *NeedleMap) Get(key uint64) (element NeedleValue, ok bool) {
|
||||||
element, ok = nm.m[key]
|
element, ok = nm.m[key]
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
@@ -76,3 +76,6 @@ func (nm *NeedleMap) Delete(key uint64) {
|
|||||||
func (nm *NeedleMap) Close() {
|
func (nm *NeedleMap) Close() {
|
||||||
nm.indexFile.Close()
|
nm.indexFile.Close()
|
||||||
}
|
}
|
||||||
|
func (nm *NeedleMap) Length() int{
|
||||||
|
return len(nm.m)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user