]> git.tdb.fi Git - libs/game.git/blob - tools/setupgen/struct.h
Add a tool for generating setup structs and loaders for them
[libs/game.git] / tools / setupgen / struct.h
1 #ifndef STRUCT_H_
2 #define STRUCT_H_
3
4 #include <string>
5 #include <vector>
6 #include <msp/datafile/objectloader.h>
7 #include <msp/io/base.h>
8
9 class SetupGen;
10 class Type;
11
12 class Struct
13 {
14 public:
15         enum Kind
16         {
17                 DATA,
18                 ENTITY,
19                 COMPONENT
20         };
21
22         struct Field
23         {
24                 class Loader;
25
26                 std::string name;
27                 const Type *type = nullptr;
28                 std::string default_value;
29         };
30
31         class Loader;
32
33 private:
34         std::string name;
35         Kind kind;
36         std::vector<Field> fields;
37
38 public:
39         Struct(const std::string &, Kind);
40
41         const std::vector<Field> &get_fields() const { return fields; }
42
43         void define_type(Msp::IO::Base &) const;
44         void define_loader(Msp::IO::Base &) const;
45         void define_functions(Msp::IO::Base &) const;
46 };
47
48 class Struct::Loader: public Msp::DataFile::ObjectLoader<Struct>
49 {
50 private:
51         const SetupGen &gen;
52
53 public:
54         Loader(Struct &, const SetupGen &);
55
56 private:
57         void init_actions() override;
58
59         void field(const Msp::DataFile::Symbol &, const Msp::DataFile::Symbol &);
60 };
61
62 #endif