diff --git a/packages/datastructure/prefix_trie.go b/packages/datastructure/prefix_trie.go index a7e712a685ee52dbb9cfc323917e9d986e66553a..32e27e69265f85e8aa145765a6f4d77ac1df84fb 100644 --- a/packages/datastructure/prefix_trie.go +++ b/packages/datastructure/prefix_trie.go @@ -2,7 +2,6 @@ package datastructure import ( "bytes" - "fmt" "sync" ) @@ -38,7 +37,6 @@ func (prefixTrie *PrefixTrie) Get(byteSequenceOrPrefix []byte) (result [][]byte) if existingNode, exists := currentNode.children[byteSequenceOrPrefix[currentLevel]]; exists { currentNode = existingNode } else { - // error tried to inflate non-existing entry return } } @@ -46,9 +44,20 @@ func (prefixTrie *PrefixTrie) Get(byteSequenceOrPrefix []byte) (result [][]byte) if currentNode.value != nil { result = append(result, currentNode.value) } else { - // traverse child elements - if false { - fmt.Println("WAS") + elementStack := make([]*PrefixTrie, 1) + elementStack[0] = currentNode + + for len(elementStack) != 0 { + currentNode = elementStack[0] + elementStack = elementStack[1:] + + if currentNode.value != nil { + result = append(result, currentNode.value) + } else { + for _, child := range currentNode.children { + elementStack = append(elementStack, child) + } + } } } diff --git a/packages/datastructure/prefix_trie_test.go b/packages/datastructure/prefix_trie_test.go index 34eb6e4fa8b6d6d24fe8b083f45f9ea36ab1a22c..9a2d09bb5bb9d4b35004cb7218cdd66be8dcba20 100644 --- a/packages/datastructure/prefix_trie_test.go +++ b/packages/datastructure/prefix_trie_test.go @@ -65,12 +65,6 @@ func TestPrefixTrie_Insert(t *testing.T) { } } assert.True(t, txFound) - - assert.Equal(t, true, trie.Delete(tx1Hash)) - assert.Equal(t, false, trie.Delete(tx1Hash)) - assert.Equal(t, true, trie.Delete(tx2Hash)) - - assert.Equal(t, 1, trie.GetSize()) } func TestPrefixTrie_Get(t *testing.T) { @@ -82,6 +76,8 @@ func TestPrefixTrie_Get(t *testing.T) { trie.Insert(tx1Hash) trie.Insert(tx2Hash) + assert.Equal(t, 2, len(trie.Get([]byte{}))) + prefix := trie.GetPrefix(tx1Hash) resultsByPrefix := trie.Get(prefix)