node.go 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. package trie
  2. import "fmt"
  3. var indices = []string{"0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f", "[17]"}
  4. type Node interface {
  5. Value() Node
  6. Copy(*Trie) Node // All nodes, for now, return them self
  7. Dirty() bool
  8. fstring(string) string
  9. Hash() interface{}
  10. RlpData() interface{}
  11. }
  12. // Value node
  13. func (self *ValueNode) String() string { return self.fstring("") }
  14. func (self *FullNode) String() string { return self.fstring("") }
  15. func (self *ShortNode) String() string { return self.fstring("") }
  16. func (self *ValueNode) fstring(ind string) string { return fmt.Sprintf("%x ", self.data) }
  17. //func (self *HashNode) fstring(ind string) string { return fmt.Sprintf("< %x > ", self.key) }
  18. func (self *HashNode) fstring(ind string) string {
  19. return fmt.Sprintf("%v", self.trie.trans(self))
  20. }
  21. // Full node
  22. func (self *FullNode) fstring(ind string) string {
  23. resp := fmt.Sprintf("[\n%s ", ind)
  24. for i, node := range self.nodes {
  25. if node == nil {
  26. resp += fmt.Sprintf("%s: <nil> ", indices[i])
  27. } else {
  28. resp += fmt.Sprintf("%s: %v", indices[i], node.fstring(ind+" "))
  29. }
  30. }
  31. return resp + fmt.Sprintf("\n%s] ", ind)
  32. }
  33. // Short node
  34. func (self *ShortNode) fstring(ind string) string {
  35. return fmt.Sprintf("[ %x: %v ] ", self.key, self.value.fstring(ind+" "))
  36. }