From db4aaedcbdb409e17ea3de161e7b24a80ba0a58c Mon Sep 17 00:00:00 2001
From: obscuren <geffobscura@gmail.com>
Date: Thu, 8 Jan 2015 11:47:04 +0100
Subject: Moved ptrie => trie. Removed old trie

---
 trie/fullnode.go | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 77 insertions(+)
 create mode 100644 trie/fullnode.go

(limited to 'trie/fullnode.go')

diff --git a/trie/fullnode.go b/trie/fullnode.go
new file mode 100644
index 000000000..ebbe7f384
--- /dev/null
+++ b/trie/fullnode.go
@@ -0,0 +1,77 @@
+package trie
+
+import "fmt"
+
+type FullNode struct {
+	trie  *Trie
+	nodes [17]Node
+}
+
+func NewFullNode(t *Trie) *FullNode {
+	return &FullNode{trie: t}
+}
+
+func (self *FullNode) Dirty() bool { return true }
+func (self *FullNode) Value() Node {
+	self.nodes[16] = self.trie.trans(self.nodes[16])
+	return self.nodes[16]
+}
+func (self *FullNode) Branches() []Node {
+	return self.nodes[:16]
+}
+
+func (self *FullNode) Copy() Node {
+	nnode := NewFullNode(self.trie)
+	for i, node := range self.nodes {
+		if node != nil {
+			nnode.nodes[i] = node
+		}
+	}
+
+	return nnode
+}
+
+// Returns the length of non-nil nodes
+func (self *FullNode) Len() (amount int) {
+	for _, node := range self.nodes {
+		if node != nil {
+			amount++
+		}
+	}
+
+	return
+}
+
+func (self *FullNode) Hash() interface{} {
+	return self.trie.store(self)
+}
+
+func (self *FullNode) RlpData() interface{} {
+	t := make([]interface{}, 17)
+	for i, node := range self.nodes {
+		if node != nil {
+			t[i] = node.Hash()
+		} else {
+			t[i] = ""
+		}
+	}
+
+	return t
+}
+
+func (self *FullNode) set(k byte, value Node) {
+	if _, ok := value.(*ValueNode); ok && k != 16 {
+		fmt.Println(value, k)
+	}
+
+	self.nodes[int(k)] = value
+}
+
+func (self *FullNode) branch(i byte) Node {
+	if self.nodes[int(i)] != nil {
+		self.nodes[int(i)] = self.trie.trans(self.nodes[int(i)])
+
+		return self.nodes[int(i)]
+	}
+	return nil
+}
-- 
cgit