treerack/registry.go

48 lines
972 B
Go
Raw 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
ids map[string]int
names map[int]string
2017-06-25 17:51:08 +02:00
definitions map[string]definition
parsers map[string]parser
}
func newRegistry() *registry {
return &registry{
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),
parsers: make(map[string]parser),
}
}
func (r *registry) definition(name string) (definition, bool) {
d, ok := r.definitions[name]
return d, ok
}
func (r *registry) parser(name string) (parser, bool) {
p, ok := r.parsers[name]
return p, 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
}
func (r *registry) setParser(p parser) {
r.parsers[p.nodeName()] = p
}