]> git.tdb.fi Git - libs/game.git/blobdiff - tools/setupgen/type.h
Add a tool for generating setup structs and loaders for them
[libs/game.git] / tools / setupgen / type.h
diff --git a/tools/setupgen/type.h b/tools/setupgen/type.h
new file mode 100644 (file)
index 0000000..3338fd9
--- /dev/null
@@ -0,0 +1,57 @@
+#ifndef TYPE_H_
+#define TYPE_H_
+
+#include <string>
+
+class Enum;
+class Struct;
+
+class Type
+{
+public:
+       enum Kind
+       {
+               VALUE,
+               AGGREGATE,
+               POINTER,
+               DYN_ARRAY,
+               STRUCT,
+               ENUM
+       };
+
+private:
+       std::string name;
+       Kind kind = VALUE;
+       std::string cpp_type;
+       std::string header;
+       const Type *element_type = nullptr;
+       unsigned element_count = 0;
+       std::string load_type;
+       std::string conversion;
+       const Struct *struct_def = nullptr;
+       const Enum *enum_def = nullptr;
+
+public:
+       Type(const std::string &, Kind);
+
+       Type &set_cpp_type(const std::string &, const std::string & = std::string());
+       Type &set_elements(const Type &, unsigned = 0);
+       Type &set_struct(const Struct &);
+       Type &set_enum(const Enum &);
+       Type &set_load(const std::string &, const std::string & = std::string());
+
+       const std::string &get_name() const { return name; }
+       Kind get_kind() const { return kind; }
+       const std::string &get_cpp_type() const { return cpp_type; }
+       const std::string &get_header() const { return header; }
+       const Type &get_element_type() const;
+       const std::string &get_conversion() const { return conversion; }
+       const Struct &get_struct() const;
+       const Enum &get_enum() const;
+
+       bool needs_loader_function() const;
+       std::string create_loader_params(bool) const;
+       std::string create_loader_statement() const;
+};
+
+#endif