forked from cerc-io/plugeth
Iterator fix
This commit is contained in:
parent
9ed0d389b2
commit
82272ee08a
@ -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
|
|||||||
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) {
|
|||||||
|
|
||||||
_, 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)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user