]> git.tdb.fi Git - libs/game.git/blob - tools/setupgen/enum.h
Add a tool for generating setup structs and loaders for them
[libs/game.git] / tools / setupgen / enum.h
1 #ifndef ENUM_H_
2 #define ENUM_H_
3
4 #include <optional>
5 #include <string>
6 #include <vector>
7 #include <msp/datafile/objectloader.h>
8 #include <msp/io/base.h>
9
10 class Enum
11 {
12 public:
13         class Loader: public Msp::DataFile::ObjectLoader<Enum>
14         {
15         public:
16                 Loader(Enum &);
17
18         private:
19                 void init_actions() override;
20
21                 void value(const Msp::DataFile::Symbol &, int);
22                 void value_auto(const Msp::DataFile::Symbol &);
23         };
24
25         struct Value
26         {
27                 std::string name;
28                 std::optional<int> value;
29         };
30
31 private:
32         std::string name;
33         std::vector<Value> values;
34
35 public:
36         Enum(const std::string &);
37
38         void define_type(Msp::IO::Base &) const;
39         void declare_conversions(Msp::IO::Base &) const;
40         void define_conversions(Msp::IO::Base &) const;
41 };
42
43 #endif