5 #ifndef TILESON_ENUMBITFLAGS_HPP
6 #define TILESON_ENUMBITFLAGS_HPP
13 #define ENABLE_BITMASK_OPERATORS(x) \
15 struct EnableBitMaskOperators<x> \
17 static const bool enable = true; \
20 template<
typename Enum>
27 template<
typename Enum>
28 typename std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type
31 static_assert(std::is_enum<Enum>::value,
32 "template parameter is not an enum type");
34 using underlying =
typename std::underlying_type<Enum>::type;
36 return static_cast<Enum
> (
37 static_cast<underlying
>(lhs) |
38 static_cast<underlying
>(rhs)
43 template<
typename Enum>
44 typename std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type
47 static_assert(std::is_enum<Enum>::value,
48 "template parameter is not an enum type");
50 using underlying =
typename std::underlying_type<Enum>::type;
52 return static_cast<Enum
> (
53 static_cast<underlying
>(lhs) &
54 static_cast<underlying
>(rhs)
59 template<
typename Enum>
60 typename std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type
63 static_assert(std::is_enum<Enum>::value,
64 "template parameter is not an enum type");
66 using underlying =
typename std::underlying_type<Enum>::type;
68 return static_cast<Enum
> (
69 static_cast<underlying
>(lhs) ^
70 static_cast<underlying
>(rhs)
75 template<
typename Enum>
76 typename std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type
79 static_assert(std::is_enum<Enum>::value,
80 "template parameter is not an enum type");
82 using underlying =
typename std::underlying_type<Enum>::type;
84 return static_cast<Enum
> (
85 ~static_cast<underlying>(rhs)
90 template<
typename Enum>
91 typename std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type
94 static_assert(std::is_enum<Enum>::value,
95 "template parameter is not an enum type");
97 using underlying =
typename std::underlying_type<Enum>::type;
99 lhs =
static_cast<Enum
> (
100 static_cast<underlying
>(lhs) |
101 static_cast<underlying
>(rhs)
108 template<
typename Enum>
109 typename std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type
112 static_assert(std::is_enum<Enum>::value,
113 "template parameter is not an enum type");
115 using underlying =
typename std::underlying_type<Enum>::type;
117 lhs =
static_cast<Enum
> (
118 static_cast<underlying
>(lhs) &
119 static_cast<underlying
>(rhs)
126 template<
typename Enum>
127 typename std::enable_if<EnableBitMaskOperators<Enum>::enable, Enum>::type
130 static_assert(std::is_enum<Enum>::value,
131 "template parameter is not an enum type");
133 using underlying =
typename std::underlying_type<Enum>::type;
135 lhs =
static_cast<Enum
> (
136 static_cast<underlying
>(lhs) ^
137 static_cast<underlying
>(rhs)
Definition: Base64.hpp:12
std::enable_if< EnableBitMaskOperators< Enum >::enable, Enum >::type operator|(Enum lhs, Enum rhs)
Definition: EnumBitflags.hpp:29
std::enable_if< EnableBitMaskOperators< Enum >::enable, Enum >::type & operator^=(Enum &lhs, Enum rhs)
Definition: EnumBitflags.hpp:128
std::enable_if< EnableBitMaskOperators< Enum >::enable, Enum >::type operator~(Enum rhs)
Definition: EnumBitflags.hpp:77
std::enable_if< EnableBitMaskOperators< Enum >::enable, Enum >::type & operator|=(Enum &lhs, Enum rhs)
Definition: EnumBitflags.hpp:92
std::enable_if< EnableBitMaskOperators< Enum >::enable, Enum >::type operator^(Enum lhs, Enum rhs)
Definition: EnumBitflags.hpp:61
std::enable_if< EnableBitMaskOperators< Enum >::enable, Enum >::type operator&(Enum lhs, Enum rhs)
Definition: EnumBitflags.hpp:45
std::enable_if< EnableBitMaskOperators< Enum >::enable, Enum >::type & operator&=(Enum &lhs, Enum rhs)
Definition: EnumBitflags.hpp:110
Definition: EnumBitflags.hpp:22
static const bool enable
Definition: EnumBitflags.hpp:23