-
Notifications
You must be signed in to change notification settings - Fork 0
/
h2hash.go
94 lines (82 loc) · 1.79 KB
/
h2hash.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
package utils
import (
"github.com/axis-cash/go-axis-import/c_type"
"github.com/axis-cash/go-axis/axisdb"
"github.com/axis-cash/go-axis/zero/txs/zstate/tri"
)
type H2Hash struct {
Name string
M map[c_type.Uint256]c_type.Uint256
}
func NewH2Hash(name string) (ret H2Hash) {
ret.Name = name
return
}
func (self *H2Hash) Clear() {
self.M = make(map[c_type.Uint256]c_type.Uint256)
}
func (self *H2Hash) Add(id *c_type.Uint256, hash *c_type.Uint256) {
self.M[*id] = *hash
}
func (self *H2Hash) Del(id *c_type.Uint256) (ret c_type.Uint256) {
ret = self.M[*id]
delete(self.M, *id)
return
}
func (self *H2Hash) Get(id *c_type.Uint256) (ret c_type.Uint256) {
ret = self.M[*id]
return
}
func (self *H2Hash) K2Name(k *c_type.Uint256) (ret []byte) {
ret = []byte(self.Name)
ret = append(ret, k[:]...)
return
}
func (self *H2Hash) SaveByDB(putter axisdb.Putter, id *c_type.Uint256) {
v := self.M[*id]
if err := putter.Put(self.K2Name(id), v[:]); err == nil {
return
} else {
panic(err)
return
}
}
func (self *H2Hash) GetByDB(getter axisdb.Getter, id *c_type.Uint256) (ret c_type.Uint256) {
var ok bool
if ret, ok = self.M[*id]; !ok {
if bs, err := getter.Get(self.K2Name(id)); err == nil {
copy(ret[:], bs[:])
self.M[*id] = ret
return
} else {
panic(err)
return
}
} else {
return
}
}
func (self *H2Hash) SaveByTri(tr tri.Tri, id *c_type.Uint256) {
v := self.M[*id]
if err := tr.TryUpdate(self.K2Name(id), v[:]); err == nil {
return
} else {
panic(err)
return
}
}
func (self *H2Hash) GetByTri(tr tri.Tri, id *c_type.Uint256) (ret c_type.Uint256) {
var ok bool
if ret, ok = self.M[*id]; !ok {
if bs, err := tr.TryGet(self.K2Name(id)); err == nil {
copy(ret[:], bs[:])
self.M[*id] = ret
return
} else {
panic(err)
return
}
} else {
return
}
}