#ifndef SETUPGEN_H_
#define SETUPGEN_H_
+#include <list>
#include <map>
#include <memory>
#include <set>
#include <string>
#include <msp/core/application.h>
#include <msp/datafile/objectloader.h>
+#include <msp/fs/path.h>
#include "enum.h"
#include "struct.h"
#include "type.h"
class SetupGen: public Msp::RegisteredApplication<SetupGen>
{
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;
+ };
+
class Loader: public Msp::DataFile::ObjectLoader<SetupGen>
{
+ private:
+ Module &mod;
+
public:
- Loader(SetupGen &);
+ Loader(SetupGen &, Module &);
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 &);
void struct_def(Struct::Kind, const Msp::DataFile::Symbol &);
};
std::string in_fn;
std::string out_fn;
- std::string name_space;
+ std::vector<Msp::FS::Path> import_path;
+ std::list<Module> modules;
std::map<std::string, Type> types;
std::vector<std::unique_ptr<Enum>> enums;
std::vector<std::unique_ptr<Struct>> structs;
const Type &get_type(const std::string &) const;
private:
- void load();
- void collect_headers();
- void generate_header(Msp::IO::Base &) const;
- void generate_code(Msp::IO::Base &) const;
+ void load(const Msp::FS::Path &);
+ void collect_headers(const Module &);
+ void generate_header(const Module &, Msp::IO::Base &) const;
+ void generate_code(const Module &, Msp::IO::Base &) const;
};
#endif