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