node.go 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  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() 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. // Full node
  19. func (self *FullNode) fstring(ind string) string {
  20. resp := fmt.Sprintf("[\n%s ", ind)
  21. for i, node := range self.nodes {
  22. if node == nil {
  23. resp += fmt.Sprintf("%s: <nil> ", indices[i])
  24. } else {
  25. resp += fmt.Sprintf("%s: %v", indices[i], node.fstring(ind+" "))
  26. }
  27. }
  28. return resp + fmt.Sprintf("\n%s] ", ind)
  29. }
  30. // Short node
  31. func (self *ShortNode) fstring(ind string) string {
  32. return fmt.Sprintf("[ %x: %v ] ", self.key, self.value.fstring(ind+" "))
  33. }