9 #include <msp/core/application.h>
10 #include <msp/datafile/objectloader.h>
11 #include <msp/fs/path.h>
16 class SetupGen: public Msp::RegisteredApplication<SetupGen>
21 std::string name_space;
23 std::string api_header;
24 std::vector<std::unique_ptr<Enum>> enums;
25 std::vector<std::unique_ptr<Struct>> structs;
28 class Loader: public Msp::DataFile::ObjectLoader<SetupGen>
34 Loader(SetupGen &, Module &);
37 void init_actions() override;
39 void api(const std::string &);
40 void api_with_header(const std::string &, const std::string &);
41 void enum_def(const Msp::DataFile::Symbol &);
42 void import(const std::string &);
43 void name_space(const std::string &);
44 void struct_def(Struct::Kind, const Msp::DataFile::Symbol &);
49 std::vector<Msp::FS::Path> import_path;
50 std::list<Module> modules;
51 std::map<std::string, Type> types;
52 std::vector<std::unique_ptr<Enum>> enums;
53 std::vector<std::unique_ptr<Struct>> structs;
54 std::set<std::string> headers;
57 SetupGen(int, char **);
61 void create_standard_types();
62 Type &add_type(const std::string &, Type::Kind);
64 const Type &get_type(const std::string &) const;
67 void load(const Msp::FS::Path &);
68 void collect_headers(const Module &);
69 void generate_header(const Module &, Msp::IO::Base &) const;
70 void generate_code(const Module &, Msp::IO::Base &) const;