1
0
treerack/registry.go

59 lines
1.0 KiB
Go

package treerack
type registry struct {
idSeed int
definition map[string]definition
definitions []definition
referenced map[string]bool
}
func newRegistry(defs ...definition) *registry {
r := &registry{
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
}