blob: 475d6f8050968fd262fb6e0c1aa4fe7f9e4aaa9c (
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
40
41
42
43
|
#include "turnsmm/enums.hpp"
#include "turns-disposition.h"
#include "turns-enums.h" // IWYU pragma: keep
#include <glib-object.h>
#include <turns-turn-order.h>
#include <type_traits>
namespace
{
template<auto Wrapped, auto Unwrapped>
auto constexpr matches =
static_cast<std::underlying_type_t<decltype(Wrapped)>>(Wrapped) == static_cast<std::underlying_type_t<decltype(Unwrapped)>>(Unwrapped);
} // namespace
namespace Turns
{
static_assert(matches<Disposition::Neutral, TURNS_DISPOSITION_NEUTRAL>);
static_assert(matches<Disposition::Friendly, TURNS_DISPOSITION_FRIENDLY>);
static_assert(matches<Disposition::Hostile, TURNS_DISPOSITION_HOSTILE>);
static_assert(matches<Disposition::Secret, TURNS_DISPOSITION_SECRET>);
static_assert(matches<SortMode::Descending, TURNS_TURN_ORDER_SORT_MODE_DESCENDING>);
static_assert(matches<SortMode::Ascending, TURNS_TURN_ORDER_SORT_MODE_ASCENDING>);
} // namespace Turns
namespace Glib
{
#define VALUE_SPECIALIZATION(Enum, TurnsEnumName) \
auto Value<Turns::Enum>::value_type() -> GType \
{ \
return turns_##TurnsEnumName##_get_type(); \
}
VALUE_SPECIALIZATION(Disposition, disposition)
VALUE_SPECIALIZATION(SortMode, turn_order_sort_mode)
#undef VALUE_SPECIALIZATION
} // namespace Glib
|