package treerack type registry struct { idSeed int definitions map[string]definition } func newRegistry(defs ...definition) *registry { r := ®istry{ definitions: make(map[string]definition), } for _, def := range defs { r.setDefinition(def) } return r } func (r *registry) definition(name string) (definition, bool) { d, ok := r.definitions[name] return d, ok } func (r *registry) setDefinition(d definition) error { if _, ok := r.definitions[d.nodeName()]; ok { return duplicateDefinition(d.nodeName()) } r.idSeed++ id := r.idSeed d.setID(id) r.definitions[d.nodeName()] = d return nil } func (r *registry) getDefinitions() []definition { var defs []definition for _, def := range r.definitions { defs = append(defs, def) } return defs }