-/*
- * TypeDescription.h
- *
- * Created on: Sep 4, 2012
- * Author: holy
- */
-
#ifndef LOADER_TYPEDESCRIPTION_H_
#define LOADER_TYPEDESCRIPTION_H_
bool HasField(const std::string &name) const;
const FieldDescription &GetField(const std::string &name) const;
void Construct(void *) const;
+ void Init(void *) const;
void Load(void *) const;
void SetConstructor(void (*ctor)(void *)) { constructor = ctor; }
+ void SetInitializer(void (*init)(void *)) { initializer = init; }
void SetLoader(void (*ld)(void *)) { loader = ld; }
void AddSupertype(int id, std::ptrdiff_t offset);
bool IsSubtypeOf(int id) const;
FieldIterator FieldsBegin() const { return fields.begin(); }
FieldIterator FieldsEnd() const { return fields.end(); }
- static TypeDescription &CreateOrGet(const std::string &name);
+ static TypeDescription &Create(int id, const std::string &name);
static int GetTypeId(const std::string &);
static const TypeDescription &Get(int id);
+ static int GetMaxSize();
+
static void WriteSourceWiki(std::ostream &);
private:
- TypeDescription(int id, const std::string &name) : constructor(0), loader(0), description(0), name(name), id(id), size(0) { }
+ TypeDescription(int id, const std::string &name)
+ : constructor(0)
+ , initializer(0)
+ , loader(0)
+ , description(0)
+ , name(name)
+ , id(id)
+ , size(0)
+ { }
private:
void (*constructor)(void *);
+ void (*initializer)(void *);
void (*loader)(void *);
const char *description;
std::string name;
int id;
int size;
- static std::vector<TypeDescription> typeDescriptions;
+ static std::map<int, TypeDescription> typeDescriptions;
+ static std::map<std::string, int> typeName2ID;
};
}
-#endif /* LOADER_TYPEDESCRIPTION_H_ */
+#endif