]> git.tdb.fi Git - libs/game.git/commitdiff
Support API decorations for setups
authorMikko Rasa <tdb@tdb.fi>
Sun, 8 Jan 2023 13:01:17 +0000 (15:01 +0200)
committerMikko Rasa <tdb@tdb.fi>
Sun, 8 Jan 2023 13:01:17 +0000 (15:01 +0200)
tools/setupgen/setupgen.cpp
tools/setupgen/setupgen.h
tools/setupgen/struct.cpp

index efb93fb81c32e80f0093a5fbd92396996ea0678a..204045fbd364a90c5da1199cdb10176e07de633e 100644 (file)
@@ -106,6 +106,8 @@ void SetupGen::collect_headers(const Module &mod)
 {
        headers.insert("msp/datafile/objectloader.h");
        headers.insert("msp/strings/lexicalcast.h");
+       if(!mod.api_header.empty())
+               headers.insert(mod.api_header);
        for(const unique_ptr<Struct> &s: mod.structs)
                for(const Struct::Field &f: s->get_fields())
                        if(const string &h = f.type->get_header(); !h.empty())
@@ -131,6 +133,8 @@ void SetupGen::generate_header(const Module &mod, IO::Base &out) const
                        IO::print(out, "#include <%s>\n", h);
        }
 
+       IO::print(out, "\n#define API %s\n", mod.api);
+
        if(!mod.name_space.empty())
                IO::print(out, "\nnamespace %s {\n", mod.name_space);
 
@@ -196,6 +200,8 @@ SetupGen::Loader::Loader(SetupGen &s, Module &m):
 
 void SetupGen::Loader::init_actions()
 {
+       add("api", &Loader::api);
+       add("api", &Loader::api_with_header);
        add("component", &Loader::struct_def, Struct::COMPONENT);
        add("entity", &Loader::struct_def, Struct::ENTITY);
        add("enum", &Loader::enum_def);
@@ -203,6 +209,17 @@ void SetupGen::Loader::init_actions()
        add("namespace", &Loader::name_space);
 }
 
+void SetupGen::Loader::api(const string &a)
+{
+       api_with_header(a, string());
+}
+
+void SetupGen::Loader::api_with_header(const string &a, const string &h)
+{
+       mod.api = a;
+       mod.api_header = h;
+}
+
 void SetupGen::Loader::enum_def(const DataFile::Symbol &n)
 {
        Enum en(n.name);
index 1ff2b8d9800af80d626803e4a6907eec25230e14..f792e4506c2ca88a4e2196c5a99a23fb2b560205 100644 (file)
@@ -19,6 +19,8 @@ private:
        struct Module
        {
                std::string name_space;
+               std::string api;
+               std::string api_header;
                std::vector<std::unique_ptr<Enum>> enums;
                std::vector<std::unique_ptr<Struct>> structs;
        };
@@ -34,6 +36,8 @@ private:
        private:
                void init_actions() override;
 
+               void api(const std::string &);
+               void api_with_header(const std::string &, const std::string &);
                void enum_def(const Msp::DataFile::Symbol &);
                void import(const std::string &);
                void name_space(const std::string &);
index b93b5be596b82b83dce239e6e6b02eefddd4d5ab..89b30f1889f9f509e409baa25b387a3cd0c41d12 100644 (file)
@@ -24,7 +24,7 @@ Struct::Struct(const string &n, Kind k):
 
 void Struct::define_type(IO::Base &out) const
 {
-       IO::print(out, "struct %s\n{\n", name);
+       IO::print(out, "struct API %s\n{\n", name);
        IO::print(out, "\tclass Loader;\n\n");
 
        for(const Field &f: fields)
@@ -49,7 +49,7 @@ void Struct::define_type(IO::Base &out) const
 
 void Struct::define_loader(IO::Base &out) const
 {
-       IO::print(out, "class %s::Loader: public Msp::DataFile::ObjectLoader<%s>\n{\n", name, name);
+       IO::print(out, "class API %s::Loader: public Msp::DataFile::ObjectLoader<%s>\n{\n", name, name);
        IO::print(out, "public:\n");
        IO::print(out, "\tLoader(%s &);\n", name);
        IO::print(out, "\nprivate:\n");