github.com/jonasnick/go-ethereum@v0.7.12-0.20150216215225-22176f05d387/trie/node.go (about)

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