34 lines
581 B
Go
34 lines
581 B
Go
package treerack
|
|
|
|
type registry struct {
|
|
idSeed int
|
|
definition map[string]definition
|
|
definitions []definition
|
|
}
|
|
|
|
func newRegistry(defs ...definition) *registry {
|
|
r := ®istry{
|
|
definition: make(map[string]definition),
|
|
}
|
|
|
|
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
|
|
}
|