From b6ef89b7f1490e37856cf2618f341f1d14f2a9b7 Mon Sep 17 00:00:00 2001 From: Hans Moog <hm@mkjc.net> Date: Tue, 20 Aug 2019 23:33:28 +0200 Subject: [PATCH] Feat: fixed last issues in PrefixTrie --- packages/datastructure/prefix_trie.go | 19 ++++++++++++++----- packages/datastructure/prefix_trie_test.go | 8 ++------ 2 files changed, 16 insertions(+), 11 deletions(-) diff --git a/packages/datastructure/prefix_trie.go b/packages/datastructure/prefix_trie.go index a7e712a6..32e27e69 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 34eb6e4f..9a2d09bb 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) -- GitLab