Commit 82272ee0 authored by obscuren's avatar obscuren

Iterator fix

parent 9ed0d389
...@@ -538,15 +538,13 @@ func (it *TrieIterator) fetchNode(key []int, node []byte, cb EachCallback) { ...@@ -538,15 +538,13 @@ func (it *TrieIterator) fetchNode(key []int, node []byte, cb EachCallback) {
} }
func (it *TrieIterator) iterateNode(key []int, currentNode *Value, cb EachCallback) { func (it *TrieIterator) iterateNode(key []int, currentNode *Value, cb EachCallback) {
//fmt.Println("node", currentNode)
if currentNode.Len() == 2 { if currentNode.Len() == 2 {
k := CompactDecode(currentNode.Get(0).Str()) k := CompactDecode(currentNode.Get(0).Str())
if currentNode.Get(1).Str() == "" { pk := append(key, k...)
it.iterateNode(key, currentNode.Get(1), cb) if currentNode.Get(1).Len() != 0 && currentNode.Get(1).Str() == "" {
it.iterateNode(pk, currentNode.Get(1), cb)
} else { } else {
pk := append(key, k...)
if k[len(k)-1] == 16 { if k[len(k)-1] == 16 {
cb(DecodeCompact(pk), currentNode.Get(1)) cb(DecodeCompact(pk), currentNode.Get(1))
...@@ -560,7 +558,7 @@ func (it *TrieIterator) iterateNode(key []int, currentNode *Value, cb EachCallba ...@@ -560,7 +558,7 @@ func (it *TrieIterator) iterateNode(key []int, currentNode *Value, cb EachCallba
if i == 16 && currentNode.Get(i).Len() != 0 { if i == 16 && currentNode.Get(i).Len() != 0 {
cb(DecodeCompact(pk), currentNode.Get(i)) cb(DecodeCompact(pk), currentNode.Get(i))
} else { } else {
if currentNode.Get(i).Str() == "" { if currentNode.Get(i).Len() != 0 && currentNode.Get(i).Str() == "" {
it.iterateNode(pk, currentNode.Get(i), cb) it.iterateNode(pk, currentNode.Get(i), cb)
} else { } else {
val := currentNode.Get(i).Str() val := currentNode.Get(i).Str()
......
...@@ -261,13 +261,13 @@ func TestTrieReplay(t *testing.T) { ...@@ -261,13 +261,13 @@ func TestTrieReplay(t *testing.T) {
_, trie2 := New() _, trie2 := New()
trie.NewIterator().Each(func(key string, v *Value) { trie.NewIterator().Each(func(key string, v *Value) {
trie2.Update(key, string(v.Str())) trie2.Update(key, v.Str())
}) })
a := NewValue(trie.Root).Bytes() a := NewValue(trie.Root).Bytes()
b := NewValue(trie2.Root).Bytes() b := NewValue(trie2.Root).Bytes()
if bytes.Compare(a, b) != 0 { if bytes.Compare(a, b) != 0 {
t.Errorf("root %x %x\n", trie.Root, trie2.Root) t.Errorf("%s %x %x\n", test.Name, trie.Root, trie2.Root)
} }
}) })
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment