diff options
author | obscuren <geffobscura@gmail.com> | 2014-02-15 08:34:18 +0800 |
---|---|---|
committer | obscuren <geffobscura@gmail.com> | 2014-02-15 08:34:18 +0800 |
commit | 73fd358d940418b15dec850f50407bd2e504d88c (patch) | |
tree | a1202689cf2e715fef9c31fa17ca4ad241de1d0f /ethutil/trie.go | |
parent | f247f0c518c6e848061462e3234f32cc7d854a46 (diff) | |
download | go-tangerine-73fd358d940418b15dec850f50407bd2e504d88c.tar go-tangerine-73fd358d940418b15dec850f50407bd2e504d88c.tar.gz go-tangerine-73fd358d940418b15dec850f50407bd2e504d88c.tar.bz2 go-tangerine-73fd358d940418b15dec850f50407bd2e504d88c.tar.lz go-tangerine-73fd358d940418b15dec850f50407bd2e504d88c.tar.xz go-tangerine-73fd358d940418b15dec850f50407bd2e504d88c.tar.zst go-tangerine-73fd358d940418b15dec850f50407bd2e504d88c.zip |
Removed RlpValue in favour of Value
Diffstat (limited to 'ethutil/trie.go')
-rw-r--r-- | ethutil/trie.go | 70 |
1 files changed, 7 insertions, 63 deletions
diff --git a/ethutil/trie.go b/ethutil/trie.go index 44d2d5774..0a3f73136 100644 --- a/ethutil/trie.go +++ b/ethutil/trie.go @@ -82,7 +82,12 @@ func (cache *Cache) Undo() { } } -// A (modified) Radix Trie implementation +// A (modified) Radix Trie implementation. The Trie implements +// a caching mechanism and will used cached values if they are +// present. If a node is not present in the cache it will try to +// fetch it from the database and store the cached value. +// Please note that the data isn't persisted unless `Sync` is +// explicitly called. type Trie struct { Root interface{} //db Database @@ -93,6 +98,7 @@ func NewTrie(db Database, Root interface{}) *Trie { return &Trie{cache: NewCache(db), Root: Root} } +// Save the cached value to the database. func (t *Trie) Sync() { t.cache.Commit() } @@ -157,20 +163,8 @@ func (t *Trie) GetNode(node interface{}) *Value { } else if len(str) < 32 { return NewValueFromBytes([]byte(str)) } - /* - else { - // Fetch the encoded node from the db - o, err := t.db.Get(n.Bytes()) - if err != nil { - fmt.Println("Error InsertState", err) - return NewValue("") - } - return NewValueFromBytes(o) - } - */ return t.cache.Get(n.Bytes()) - } func (t *Trie) UpdateState(node interface{}, key []int, value string) interface{} { @@ -302,53 +296,3 @@ func (t *Trie) Copy() *Trie { return trie } - -/* - * Trie helper functions - */ -// Helper function for printing out the raw contents of a slice -func PrintSlice(slice []string) { - fmt.Printf("[") - for i, val := range slice { - fmt.Printf("%q", val) - if i != len(slice)-1 { - fmt.Printf(",") - } - } - fmt.Printf("]\n") -} - -func PrintSliceT(slice interface{}) { - c := Conv(slice) - for i := 0; i < c.Length(); i++ { - val := c.Get(i) - if val.Type() == reflect.Slice { - PrintSliceT(val.AsRaw()) - } else { - fmt.Printf("%q", val) - if i != c.Length()-1 { - fmt.Printf(",") - } - } - } -} - -// RLP Decodes a node in to a [2] or [17] string slice -func DecodeNode(data []byte) []string { - dec, _ := Decode(data, 0) - if slice, ok := dec.([]interface{}); ok { - strSlice := make([]string, len(slice)) - - for i, s := range slice { - if str, ok := s.([]byte); ok { - strSlice[i] = string(str) - } - } - - return strSlice - } else { - fmt.Printf("It wasn't a []. It's a %T\n", dec) - } - - return nil -} |