]> git.tdb.fi Git - libs/game.git/blob - tools/setupgen/type.h
Add a tool for generating setup structs and loaders for them
[libs/game.git] / tools / setupgen / type.h
1 #ifndef TYPE_H_
2 #define TYPE_H_
3
4 #include <string>
5
6 class Enum;
7 class Struct;
8
9 class Type
10 {
11 public:
12         enum Kind
13         {
14                 VALUE,
15                 AGGREGATE,
16                 POINTER,
17                 DYN_ARRAY,
18                 STRUCT,
19                 ENUM
20         };
21
22 private:
23         std::string name;
24         Kind kind = VALUE;
25         std::string cpp_type;
26         std::string header;
27         const Type *element_type = nullptr;
28         unsigned element_count = 0;
29         std::string load_type;
30         std::string conversion;
31         const Struct *struct_def = nullptr;
32         const Enum *enum_def = nullptr;
33
34 public:
35         Type(const std::string &, Kind);
36
37         Type &set_cpp_type(const std::string &, const std::string & = std::string());
38         Type &set_elements(const Type &, unsigned = 0);
39         Type &set_struct(const Struct &);
40         Type &set_enum(const Enum &);
41         Type &set_load(const std::string &, const std::string & = std::string());
42
43         const std::string &get_name() const { return name; }
44         Kind get_kind() const { return kind; }
45         const std::string &get_cpp_type() const { return cpp_type; }
46         const std::string &get_header() const { return header; }
47         const Type &get_element_type() const;
48         const std::string &get_conversion() const { return conversion; }
49         const Struct &get_struct() const;
50         const Enum &get_enum() const;
51
52         bool needs_loader_function() const;
53         std::string create_loader_params(bool) const;
54         std::string create_loader_statement() const;
55 };
56
57 #endif