48 lines
972 B
Go
48 lines
972 B
Go
package treerack
|
|
|
|
type registry struct {
|
|
idSeed int
|
|
ids map[string]int
|
|
names map[int]string
|
|
definitions map[string]definition
|
|
parsers map[string]parser
|
|
}
|
|
|
|
func newRegistry() *registry {
|
|
return ®istry{
|
|
ids: make(map[string]int),
|
|
names: make(map[int]string),
|
|
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())
|
|
}
|
|
|
|
r.idSeed++
|
|
id := r.idSeed
|
|
d.setID(id)
|
|
r.ids[d.nodeName()] = id
|
|
r.names[id] = d.nodeName()
|
|
|
|
r.definitions[d.nodeName()] = d
|
|
return nil
|
|
}
|
|
|
|
func (r *registry) setParser(p parser) {
|
|
r.parsers[p.nodeName()] = p
|
|
}
|