typebuilder.hh
Go to the documentation of this file.00001 #ifndef __TYPEBUILDER_H__
00002 #define __TYPEBUILDER_H__
00003
00004 #include <string>
00005 #include <list>
00006
00007 #include "typemodel.hh"
00008
00009 namespace Typelib
00010 {
00011 class Registry;
00012
00014 class TypeBuilder
00015 {
00016 std::string m_basename;
00017 Type const* m_type;
00018
00019 struct Modifier
00020 {
00021 Type::Category category;
00022 int size;
00023 };
00024 typedef std::list<Modifier> ModifierList;
00025 typedef std::pair<const Type*, ModifierList> TypeSpec;
00026
00027 static TypeSpec parse(const Registry& registry, const std::string& full_name);
00028 static const Type& build(Registry& registry, const TypeSpec& spec);
00029
00030 Registry& m_registry;
00031
00032 public:
00041 TypeBuilder(Registry& registry, const std::list<std::string>& base);
00042
00047 TypeBuilder(Registry& registry, const Type* base_type);
00048
00050 void addPointer(int level);
00053 void addArrayMajor(int size);
00056 void addArrayMinor(int size);
00057
00059 const Type& getType() const;
00060
00063 static const Type* build(Registry& registry, const std::string& full_name);
00065 static std::string getBaseTypename(const std::string& full_name);
00068 static const Type* getBaseType(const Registry& registry, const std::string& full_name);
00069 };
00070 };
00071
00072 #endif
00073