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
|
|
|
|
ids map[string]int
|
|
|
|
names map[int]string
|
2017-06-25 17:51:08 +02:00
|
|
|
definitions map[string]definition
|
|
|
|
}
|
|
|
|
|
2017-11-01 02:43:46 +01:00
|
|
|
func newRegistry(defs ...definition) *registry {
|
|
|
|
r := ®istry{
|
2017-07-15 21:49:08 +02:00
|
|
|
ids: make(map[string]int),
|
|
|
|
names: make(map[int]string),
|
2017-06-25 17:51:08 +02:00
|
|
|
definitions: make(map[string]definition),
|
|
|
|
}
|
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) 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())
|
|
|
|
}
|
|
|
|
|
2017-07-15 21:49:08 +02:00
|
|
|
r.idSeed++
|
|
|
|
id := r.idSeed
|
|
|
|
d.setID(id)
|
|
|
|
r.ids[d.nodeName()] = id
|
|
|
|
r.names[id] = d.nodeName()
|
|
|
|
|
2017-06-25 17:51:08 +02:00
|
|
|
r.definitions[d.nodeName()] = d
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
2017-11-01 02:43:46 +01:00
|
|
|
func (r *registry) getDefinitions() []definition {
|
|
|
|
var defs []definition
|
|
|
|
for _, def := range r.definitions {
|
|
|
|
defs = append(defs, def)
|
|
|
|
}
|
|
|
|
|
|
|
|
return defs
|
|
|
|
}
|