X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;ds=sidebyside;f=src%2Floader%2FTypeDescription.h;h=b7f4ba9e05bd08daaf7aa16b888b8cdbad5a3541;hb=cddc8a96cce6117dac14248455ac70d332a4a9f8;hp=01070394d8b54e0ccc9f9140a04202aad105a6c2;hpb=22be995eefbf6e27f76606226422aaf3fbaa5b80;p=l2e.git diff --git a/src/loader/TypeDescription.h b/src/loader/TypeDescription.h index 0107039..b7f4ba9 100644 --- a/src/loader/TypeDescription.h +++ b/src/loader/TypeDescription.h @@ -39,7 +39,9 @@ public: 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()); } @@ -52,14 +54,19 @@ public: void SetSize(int s) { size = s; } int Size() const { return size; } + typedef std::map::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 fields; std::map supertypes;