add("component", &Loader::struct_def, Struct::COMPONENT);
add("entity", &Loader::struct_def, Struct::ENTITY);
add("enum", &Loader::enum_def);
+ add("external", &Loader::external);
add("import", &Loader::import);
add("namespace", &Loader::name_space);
}
type.set_enum(*mod.enums.emplace_back(make_unique<Enum>(move(en))));
}
+void SetupGen::Loader::external(const std::string &h)
+{
+ ExternalLoader ldr(obj, h);
+ load_sub_with(ldr);
+ obj.headers.insert(h);
+}
+
void SetupGen::Loader::import(const string &n)
{
string fn = n+".mgs";
type.set_cpp_type(join(mod.name_space, "::", type.get_cpp_type()));
type.set_struct(*mod.structs.emplace_back(make_unique<Struct>(move(sct))));
}
+
+
+SetupGen::ExternalLoader::ExternalLoader(SetupGen &s, const string &h):
+ ObjectLoader(s),
+ header(h)
+{
+ static ActionMap shared_actions;
+ set_actions(shared_actions);
+}
+
+void SetupGen::ExternalLoader::init_actions()
+{
+ add("component", &ExternalLoader::declaration, Type::STRUCT);
+ add("entity", &ExternalLoader::declaration, Type::STRUCT);
+ add("enum", &ExternalLoader::declaration, Type::ENUM);
+ add("namespace", &ExternalLoader::set_namespace);
+}
+
+void SetupGen::ExternalLoader::declaration(Type::Kind k, const DataFile::Symbol &n)
+{
+ Type &type = obj.add_type(n.name, k);
+ type.set_cpp_type(join(name_space, "::", type.get_cpp_type()), header);
+}
+
+void SetupGen::ExternalLoader::set_namespace(const string &n)
+{
+ name_space = n;
+}
void api(const std::string &);
void api_with_header(const std::string &, const std::string &);
void enum_def(const Msp::DataFile::Symbol &);
+ void external(const std::string &);
void import(const std::string &);
void name_space(const std::string &);
void struct_def(Struct::Kind, const Msp::DataFile::Symbol &);
};
+ class ExternalLoader: public Msp::DataFile::ObjectLoader<SetupGen>
+ {
+ private:
+ std::string header;
+ std::string name_space;
+
+ public:
+ ExternalLoader(SetupGen &, const std::string &);
+
+ private:
+ void init_actions() override;
+
+ void declaration(Type::Kind, const Msp::DataFile::Symbol &);
+ void set_namespace(const std::string &);
+ };
+
std::string in_fn;
std::string out_fn;
std::vector<Msp::FS::Path> import_path;