Generic trie

This commit is contained in:
obscuren 2014-06-30 13:34:47 +02:00
parent 00bb68d7d2
commit 9ed0d389b2

View File

@ -191,7 +191,17 @@ func (t *Trie) Get(key string) string {
} }
func (t *Trie) Delete(key string) { func (t *Trie) Delete(key string) {
t.Update(key, "") t.mut.Lock()
defer t.mut.Unlock()
k := CompactHexDecode(key)
root := t.DeleteState(t.Root, k)
if _, ok := root.([]byte); !ok {
t.Root = t.cache.PutValue(root, true)
} else {
t.Root = root
}
} }
func (t *Trie) GetState(node interface{}, key []int) interface{} { func (t *Trie) GetState(node interface{}, key []int) interface{} {
@ -243,15 +253,7 @@ func (t *Trie) GetNode(node interface{}) *Value {
} }
func (t *Trie) UpdateState(node interface{}, key []int, value string) interface{} { func (t *Trie) UpdateState(node interface{}, key []int, value string) interface{} {
return t.InsertState(node, key, value)
if value != "" {
return t.InsertState(node, key, value)
} else {
// delete it
return t.DeleteState(node, key)
}
return t.Root
} }
func (t *Trie) Put(node interface{}) interface{} { func (t *Trie) Put(node interface{}) interface{} {