]> git.tdb.fi Git - libs/game.git/blobdiff - tools/setupgen/enum.h
Add a tool for generating setup structs and loaders for them
[libs/game.git] / tools / setupgen / enum.h
diff --git a/tools/setupgen/enum.h b/tools/setupgen/enum.h
new file mode 100644 (file)
index 0000000..26723b2
--- /dev/null
@@ -0,0 +1,43 @@
+#ifndef ENUM_H_
+#define ENUM_H_
+
+#include <optional>
+#include <string>
+#include <vector>
+#include <msp/datafile/objectloader.h>
+#include <msp/io/base.h>
+
+class Enum
+{
+public:
+       class Loader: public Msp::DataFile::ObjectLoader<Enum>
+       {
+       public:
+               Loader(Enum &);
+
+       private:
+               void init_actions() override;
+
+               void value(const Msp::DataFile::Symbol &, int);
+               void value_auto(const Msp::DataFile::Symbol &);
+       };
+
+       struct Value
+       {
+               std::string name;
+               std::optional<int> value;
+       };
+
+private:
+       std::string name;
+       std::vector<Value> values;
+
+public:
+       Enum(const std::string &);
+
+       void define_type(Msp::IO::Base &) const;
+       void declare_conversions(Msp::IO::Base &) const;
+       void define_conversions(Msp::IO::Base &) const;
+};
+
+#endif