package basic import ( "math/big" ) // NodeSizeTable is not thread safe, make sure it is accessed with external // locks or in single routine. type NodeSizeTable struct { prices map[string]uint64 total uint64 } func (t *NodeSizeTable) Put(id []byte, avg uint64) { t.prices[string(id)] += avg t.total += avg } func (t *NodeSizeTable) Total() *big.Int { return big.NewInt(0).SetUint64(t.total) } func (t *NodeSizeTable) Iterate(f func([]byte, *big.Int)) { for k, v := range t.prices { n := big.NewInt(0).SetUint64(v) f([]byte(k), n) } } func NewNodeSizeTable() *NodeSizeTable { return &NodeSizeTable{ prices: make(map[string]uint64), } } type nodeInfoWrapper []byte func (nodeInfoWrapper) Price() *big.Int { panic("should not be used") } func (n nodeInfoWrapper) PublicKey() []byte { return n }