3#ifndef _aspose_system_enum_helpers_h_
4#define _aspose_system_enum_helpers_h_
9#define DECLARE_ENUM_OPERATORS(E) \
11 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator|(E a, T b)\
13 return static_cast<E>( static_cast<std::underlying_type<E>::type>(a) | static_cast<std::underlying_type<E>::type>(b) );\
17 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator&(E a, T b)\
19 return static_cast<E>( static_cast<std::underlying_type<E>::type>(a) & static_cast<std::underlying_type<E>::type>(b) );\
23 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator^(E a, T b)\
25 return static_cast<E>(static_cast<std::underlying_type<E>::type>(a) ^ static_cast<std::underlying_type<E>::type>(b));\
29 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, bool>::type operator!=(E a, T b)\
31 return static_cast<std::underlying_type<E>::type>(a) != static_cast<std::underlying_type<E>::type>(b);\
35 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, bool>::type operator==(E a, T b)\
37 return static_cast<std::underlying_type<E>::type>(a) == static_cast<std::underlying_type<E>::type>(b);\
40 inline constexpr E operator~(E a)\
42 return static_cast<E>(~static_cast<std::underlying_type<E>::type>(a));\
46 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator|=(E& a, T b)\
48 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) | static_cast<std::underlying_type<E>::type>(b));\
53 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator&=(E& a, T b)\
55 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) & static_cast<std::underlying_type<E>::type>(b));\
60 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator^=(E& a, T b)\
62 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) ^ static_cast<std::underlying_type<E>::type>(b));\
67 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator-(E a, T b)\
69 return static_cast<E>(static_cast<std::underlying_type<E>::type>(a) - static_cast<std::underlying_type<E>::type>(b));\
73 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator-=(E& a, T b)\
75 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) - static_cast<std::underlying_type<E>::type>(b));\
80 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator+=(E& a, T b)\
82 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) + static_cast<std::underlying_type<E>::type>(b));\
86 inline E operator++(E& a, int)\
89 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) + 1);\
92 inline E operator++(E& a)\
94 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) + 1);\
98 inline E operator--(E& a, int)\
101 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) - 1);\
104 inline E operator--(E& a)\
106 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) - 1);\
111 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator<<(E a, T b)\
113 return static_cast<E>( static_cast<std::underlying_type<E>::type>(a) << static_cast<std::underlying_type<E>::type>(b) );\
117 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator>>(E a, T b)\
119 return static_cast<E>( static_cast<std::underlying_type<E>::type>(a) >> static_cast<std::underlying_type<E>::type>(b) );\
123#define DECLARE_FRIEND_ENUM_OPERATORS(E) \
124 template<class T> friend inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator|(E a, T b);\
125 template<class T> friend inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator&(E a, T b);\
126 template<class T> friend inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator^(E a, T b);\
127 template<class T> friend inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, bool>::type operator!=(E a, T b);\
128 template<class T> friend inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, bool>::type operator==(E a, T b);\
129 friend inline constexpr E operator~(E a);\
130 template<class T> friend inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator|=(E& a, T b);\
131 template<class T> friend inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator&=(E& a, T b);\
132 template<class T> friend inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator^=(E& a, T b);\
133 template<class T> friend inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator-(E a, T b);\
134 template<class T> friend inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator-=(E& a, T b);\
135 template<class T> friend inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator+=(E& a, T b);\
136 friend inline E operator++(E& a, int); \
137 friend inline E operator++(E& a); \
138 friend inline E operator--(E& a, int); \
139 friend inline E operator--(E& a); \
140 template<class T> friend inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator<<(E a, T b); \
141 template<class T> friend inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator>>(E a, T b);
144#define DECLARE_USING_ENUM_OPERATORS(NS) \
145 using NS::operator|;\
146 using NS::operator&;\
147 using NS::operator^;\
148 using NS::operator!=;\
149 using NS::operator==;\
150 using NS::operator~;\
151 using NS::operator|=;\
152 using NS::operator&=;\
153 using NS::operator^=;\
154 using NS::operator-;\
155 using NS::operator-=;\
156 using NS::operator+=;\
157 using NS::operator++;\
158 using NS::operator--;\
159 using NS::operator<<;\
160 using NS::operator>>;
163#define DECLARE_USING_GLOBAL_OPERATORS \
181namespace DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A
184 struct DummyEnumOperatorsStruct
191constexpr DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct operator|(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
193constexpr DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct operator&(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
195constexpr DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct operator^(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
197constexpr bool operator!=(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
199constexpr bool operator==(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
201constexpr DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct operator~(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a);
203DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& operator|=(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
205DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& operator&=(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
207DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& operator^=(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
209constexpr DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct
operator-(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
211DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& operator-=(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
213DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& operator+=(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
215DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& operator++(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& a,
int);
217DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& operator--(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct& a,
int);
219constexpr DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct
operator<<(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
221constexpr DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct operator>>(DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct a, DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A::DummyEnumOperatorsStruct b);
std::ostream & operator<<(std::ostream &stream, Color color)
Insert data into the stream using UTF-8 encoding.
Definition: color.h:427
bool operator!=(System::SharedPtr< HttpMethod > left, System::SharedPtr< HttpMethod > right)
bool operator==(System::SharedPtr< HttpMethod > left, System::SharedPtr< HttpMethod > right)
auto operator-(DayOfWeek a, DayOfWeek b)
Calculates the number of days between two days of week.
Definition: day_of_week.h:25