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

     1  package trie
     2  
     3  import "fmt"
     4  
     5  type FullNode struct {
     6  	trie  *Trie
     7  	nodes [17]Node
     8  }
     9  
    10  func NewFullNode(t *Trie) *FullNode {
    11  	return &FullNode{trie: t}
    12  }
    13  
    14  func (self *FullNode) Dirty() bool { return true }
    15  func (self *FullNode) Value() Node {
    16  	self.nodes[16] = self.trie.trans(self.nodes[16])
    17  	return self.nodes[16]
    18  }
    19  func (self *FullNode) Branches() []Node {
    20  	return self.nodes[:16]
    21  }
    22  
    23  func (self *FullNode) Copy(t *Trie) Node {
    24  	nnode := NewFullNode(t)
    25  	for i, node := range self.nodes {
    26  		if node != nil {
    27  			nnode.nodes[i] = node.Copy(t)
    28  		}
    29  	}
    30  
    31  	return nnode
    32  }
    33  
    34  // Returns the length of non-nil nodes
    35  func (self *FullNode) Len() (amount int) {
    36  	for _, node := range self.nodes {
    37  		if node != nil {
    38  			amount++
    39  		}
    40  	}
    41  
    42  	return
    43  }
    44  
    45  func (self *FullNode) Hash() interface{} {
    46  	return self.trie.store(self)
    47  }
    48  
    49  func (self *FullNode) RlpData() interface{} {
    50  	t := make([]interface{}, 17)
    51  	for i, node := range self.nodes {
    52  		if node != nil {
    53  			t[i] = node.Hash()
    54  		} else {
    55  			t[i] = ""
    56  		}
    57  	}
    58  
    59  	return t
    60  }
    61  
    62  func (self *FullNode) set(k byte, value Node) {
    63  	if _, ok := value.(*ValueNode); ok && k != 16 {
    64  		fmt.Println(value, k)
    65  	}
    66  
    67  	self.nodes[int(k)] = value
    68  }
    69  
    70  func (self *FullNode) branch(i byte) Node {
    71  	if self.nodes[int(i)] != nil {
    72  		self.nodes[int(i)] = self.trie.trans(self.nodes[int(i)])
    73  
    74  		return self.nodes[int(i)]
    75  	}
    76  	return nil
    77  }