package treerack type registry struct { idSeed int definition map[string]definition definitions []definition referenced map[string]bool } func newRegistry(defs ...definition) *registry { r := ®istry{ definition: make(map[string]definition), referenced: make(map[string]bool), } for _, def := range defs { r.setDefinition(def) } return r } func (r *registry) setDefinition(d definition) error { if _, ok := r.definition[d.nodeName()]; ok { return duplicateDefinition(d.nodeName()) } r.idSeed++ id := r.idSeed d.setID(id) r.definition[d.nodeName()] = d r.definitions = append(r.definitions, d) return nil } func (r *registry) setRef(d definition) { if d.commitType()&userDefined == 0 { return } r.referenced[d.nodeName()] = true } func (r *registry) unreferenced() []string { var u []string for _, def := range r.definitions { if def.commitType()&userDefined == 0 { continue } if !r.referenced[def.nodeName()] { u = append(u, def.nodeName()) } } return u }