Path: blob/main/vendor/github.com/pelletier/go-toml/v2/unstable/builder.go
2893 views
package unstable12// root contains a full AST.3//4// It is immutable once constructed with Builder.5type root struct {6nodes []Node7}89// Iterator over the top level nodes.10func (r *root) Iterator() Iterator {11it := Iterator{}12if len(r.nodes) > 0 {13it.node = &r.nodes[0]14}15return it16}1718func (r *root) at(idx reference) *Node {19return &r.nodes[idx]20}2122type reference int2324const invalidReference reference = -12526func (r reference) Valid() bool {27return r != invalidReference28}2930type builder struct {31tree root32lastIdx int33}3435func (b *builder) Tree() *root {36return &b.tree37}3839func (b *builder) NodeAt(ref reference) *Node {40return b.tree.at(ref)41}4243func (b *builder) Reset() {44b.tree.nodes = b.tree.nodes[:0]45b.lastIdx = 046}4748func (b *builder) Push(n Node) reference {49b.lastIdx = len(b.tree.nodes)50b.tree.nodes = append(b.tree.nodes, n)51return reference(b.lastIdx)52}5354func (b *builder) PushAndChain(n Node) reference {55newIdx := len(b.tree.nodes)56b.tree.nodes = append(b.tree.nodes, n)57if b.lastIdx >= 0 {58b.tree.nodes[b.lastIdx].next = newIdx - b.lastIdx59}60b.lastIdx = newIdx61return reference(b.lastIdx)62}6364func (b *builder) AttachChild(parent reference, child reference) {65b.tree.nodes[parent].child = int(child) - int(parent)66}6768func (b *builder) Chain(from reference, to reference) {69b.tree.nodes[from].next = int(to) - int(from)70}717273