treerack/registry.go

34 lines
581 B
Go
Raw Permalink Normal View History

2017-07-15 21:49:08 +02:00
package treerack
2017-06-25 17:51:08 +02:00
type registry struct {
2017-07-15 21:49:08 +02:00
idSeed int
2018-01-09 03:53:20 +01:00
definition map[string]definition
definitions []definition
2017-06-25 17:51:08 +02:00
}
2017-11-01 02:43:46 +01:00
func newRegistry(defs ...definition) *registry {
r := &registry{
2018-01-09 03:53:20 +01:00
definition: make(map[string]definition),
2017-06-25 17:51:08 +02:00
}
2017-11-01 02:43:46 +01:00
for _, def := range defs {
r.setDefinition(def)
}
return r
2017-06-25 17:51:08 +02:00
}
func (r *registry) setDefinition(d definition) error {
2018-01-09 03:53:20 +01:00
if _, ok := r.definition[d.nodeName()]; ok {
2017-06-25 17:51:08 +02:00
return duplicateDefinition(d.nodeName())
}
2017-07-15 21:49:08 +02:00
r.idSeed++
id := r.idSeed
d.setID(id)
2018-01-09 03:53:20 +01:00
r.definition[d.nodeName()] = d
r.definitions = append(r.definitions, d)
2017-06-25 17:51:08 +02:00
return nil
}