]> git.localhorst.tv Git - l2e.git/blobdiff - src/loader/TypeDescription.h
made fields of type descriptions accessible
[l2e.git] / src / loader / TypeDescription.h
index 01070394d8b54e0ccc9f9140a04202aad105a6c2..b7f4ba9e05bd08daaf7aa16b888b8cdbad5a3541 100644 (file)
@@ -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<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;