aboutsummaryrefslogtreecommitdiffstats
path: root/trie.go
diff options
context:
space:
mode:
Diffstat (limited to 'trie.go')
-rw-r--r--trie.go50
1 files changed, 50 insertions, 0 deletions
diff --git a/trie.go b/trie.go
new file mode 100644
index 000000000..d9d5dba5a
--- /dev/null
+++ b/trie.go
@@ -0,0 +1,50 @@
+package main
+
+// Database interface
+type Database interface {
+ Put(key []byte, value []byte)
+ Get(key []byte) ([]byte, error)
+}
+
+type Trie struct {
+ root string
+ db Database
+}
+
+func NewTrie(db Database) *Trie {
+ return &Trie{db: db, root: ""}
+}
+
+func (t *Trie) Update(key string, value string) {
+ k := CompactHexDecode(key)
+
+ t.root = t.UpdateState(t.root, k, value)
+}
+
+func (t *Trie) Get(key []byte) ([]byte, error) {
+ return nil, nil
+}
+
+// Inserts a new sate or delete a state based on the value
+func (t *Trie) UpdateState(node string, key []int, value string) string {
+ if value != "" {
+ return t.InsertState(node, ""/*key*/, value)
+ } else {
+ // delete it
+ }
+
+ return ""
+}
+
+func (t *Trie) InsertState(node, key, value string) string {
+ return ""
+}
+
+func (t *Trie) Put(node []byte) []byte {
+ enc := Encode(node)
+ sha := Sha256Bin(enc)
+
+ t.db.Put([]byte(sha), enc)
+
+ return sha
+}