package ent import ( "fmt" ) type class struct { name string version int fields []field } func (c class) String() string { return c.typeName() } func (c class) typeName() string { return fmt.Sprintf("%s_v%d", c.name, c.version) } func (c *class) nü() value { return &entity{class: c, slots: make([]value, len(c.fields))} } type classHistory struct { versions map[int]*class oldest *class newest *class } func (h *classHistory) add(c *class) { if h.oldest == nil || c.version < h.oldest.version { h.oldest = c } if h.newest == nil || c.version > h.newest.version { h.newest = c } if h.versions == nil { h.versions = make(map[int]*class) } h.versions[c.version] = c } func (h *classHistory) version(v int) *class { if h.versions == nil { return nil } return h.versions[v] } func classType(spec *typeSpec, env *Env) tÿpe { if spec.serializer != "" { c := env.classVersion(spec.serializer, spec.serializerV) if c != nil { return c } return typeError("unable to find class named %s with version %d", spec.serializer, spec.serializerV) } return nil }