diff options
| author | Felix Morgner <felix.morgner@gmail.com> | 2025-05-19 16:28:02 +0200 |
|---|---|---|
| committer | Felix Morgner <felix.morgner@gmail.com> | 2025-05-19 16:28:02 +0200 |
| commit | f61df0b33ea2a2de064f1fa2a9cde191b790a5ba (patch) | |
| tree | 45c5cda251be02edefde3c975b555e7c504726a6 /lib/src/turnsmm/enum_helpers.hpp | |
| parent | 0a5f3b25214c11556f62ce04601c06812a3464d8 (diff) | |
| download | turns-f61df0b33ea2a2de064f1fa2a9cde191b790a5ba.tar.xz turns-f61df0b33ea2a2de064f1fa2a9cde191b790a5ba.zip | |
lib: rescope enums
Diffstat (limited to 'lib/src/turnsmm/enum_helpers.hpp')
| -rw-r--r-- | lib/src/turnsmm/enum_helpers.hpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/lib/src/turnsmm/enum_helpers.hpp b/lib/src/turnsmm/enum_helpers.hpp new file mode 100644 index 0000000..a3f1455 --- /dev/null +++ b/lib/src/turnsmm/enum_helpers.hpp @@ -0,0 +1,34 @@ +#ifndef TURNSMM_ENUM_HELPERS_HPP +#define TURNSMM_ENUM_HELPERS_HPP + +#include <glibmm/value.h> + +#include <glib-object.h> +#include <glib.h> + +#include <type_traits> + +#define TURNS_DECLARE_ENUM_VALUE_SPECIALIZATION(Enum) \ + template<> \ + class Value<::Turns::Enum> : public Glib::Value_Enum<::Turns::Enum> \ + { \ + public: \ + auto static value_type() -> GType; \ + } + +#define TURNS_DEFINE_VALUE_SPECIALIZATION(Enum, TurnsEnumName) \ + auto Value<::Turns::Enum>::value_type() -> GType \ + { \ + return ::turns_##TurnsEnumName##_get_type(); \ + } + +namespace Turns +{ + + template<auto Wrapped, auto Unwrapped> + auto constexpr enum_matches = + static_cast<std::underlying_type_t<decltype(Wrapped)>>(Wrapped) == static_cast<std::underlying_type_t<decltype(Unwrapped)>>(Unwrapped); + +} // namespace Turns + +#endif
\ No newline at end of file |
