(_node node)
| 66 | } |
| 67 | |
| 68 | func (mt *MerkleTree) insertNode(_node node) { |
| 69 | var e, prev *list.Element |
| 70 | var cNode, prevNode node |
| 71 | e = mt.mtbuf.PushBack(_node) |
| 72 | for { |
| 73 | prev = e.Prev() |
| 74 | cNode = e.Value.(node) |
| 75 | if prev == nil { |
| 76 | break |
| 77 | } |
| 78 | prevNode = prev.Value.(node) |
| 79 | if cNode.NodeCount != prevNode.NodeCount { |
| 80 | break |
| 81 | } |
| 82 | if prevNode.Branches != nil { |
| 83 | // fmt.Printf("Accepting right sibling\n") |
| 84 | for k, v := range *prevNode.Branches { |
| 85 | v.Root = AcceptRightSibling(v.Root, cNode.Data) |
| 86 | (*prevNode.Branches)[k] = v |
| 87 | // fmt.Printf("Proof: %v\n", v.String()) |
| 88 | } |
| 89 | } |
| 90 | if cNode.Branches != nil { |
| 91 | // fmt.Printf("Accepting left sibling\n") |
| 92 | for k, v := range *cNode.Branches { |
| 93 | v.Root = AcceptLeftSibling(v.Root, prevNode.Data) |
| 94 | (*prevNode.Branches)[k] = v |
| 95 | // fmt.Printf("Proof: %v\n", v.String()) |
| 96 | } |
| 97 | } |
| 98 | // fmt.Printf("Creating new Node: h(%4s, %4s) ", hex.EncodeToString(prevNode.Data[:]), hex.EncodeToString(cNode.Data[:])) |
| 99 | prevNode.Data = mt.h(prevNode.Data, cNode.Data) |
| 100 | // fmt.Printf("=> %4s\n", hex.EncodeToString(prevNode.Data[:])) |
| 101 | prevNode.NodeCount = cNode.NodeCount*2 + 1 |
| 102 | |
| 103 | mt.mtbuf.Remove(e) |
| 104 | mt.mtbuf.Remove(prev) |
| 105 | e = mt.mtbuf.PushBack(prevNode) |
| 106 | } |
| 107 | } |
| 108 | |
| 109 | func (mt *MerkleTree) Finalize() { |
| 110 | if !mt.finalized && mt.mtbuf.Len() > 1 { |
no test coverage detected