blob: e829b76c32633bc128e814cf6fb906bafdb5a3bb (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
|
/*
* SPDX-FileCopyrightText: 2025 Felix Morgner <felix.morgner@gmail.com>
* SPDX-License-Identifier: LGPL-2.1-only
*/
#ifndef TURNSMM_ENUM_HELPERS_HPP
#define TURNSMM_ENUM_HELPERS_HPP
#include <glib-object.h>
#include <glib.h>
#include <glibmm/value.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
|