void AddField(const std::string &name, const FieldDescription &f);
bool HasField(const std::string &name) const;
const FieldDescription &GetField(const std::string &name) const;
+ void Construct(void *) const;
+ void SetConstructor(void (*ctor)(void *)) { constructor = ctor; }
void AddSupertype(int id, std::ptrdiff_t offset);
bool IsSubtypeOf(int id) const;
bool IsSubtypeOf(const TypeDescription &other) const { return IsSubtypeOf(other.TypeId()); }
void SetSize(int s) { size = s; }
int Size() const { return size; }
+ typedef std::map<std::string, FieldDescription>::const_iterator FieldIterator;
+ FieldIterator FieldsBegin() const { return fields.begin(); }
+ FieldIterator FieldsEnd() const { return fields.end(); }
+
static TypeDescription &CreateOrGet(const std::string &name);
static int GetTypeId(const std::string &);
static const TypeDescription &Get(int id);
private:
- TypeDescription(int id, const std::string &name) : name(name), id(id), size(0) { }
+ TypeDescription(int id, const std::string &name) : constructor(0), name(name), id(id), size(0) { }
private:
+ void (*constructor)(void *);
std::string name;
std::map<std::string, FieldDescription> fields;
std::map<int, std::ptrdiff_t> supertypes;