CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
enum_helpers.h
1
3#ifndef _aspose_system_enum_helpers_h_
4#define _aspose_system_enum_helpers_h_
5
6#include <type_traits>
7
9#define DECLARE_ENUM_OPERATORS(E) \
10 template<class T>\
11 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator|(E a, T b)\
12 {\
13 return static_cast<E>( static_cast<std::underlying_type<E>::type>(a) | static_cast<std::underlying_type<E>::type>(b) );\
14 }\
15\
16 template<class T>\
17 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator&(E a, T b)\
18 {\
19 return static_cast<E>( static_cast<std::underlying_type<E>::type>(a) & static_cast<std::underlying_type<E>::type>(b) );\
20 }\
21\
22 template<class T>\
23 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator^(E a, T b)\
24 {\
25 return static_cast<E>(static_cast<std::underlying_type<E>::type>(a) ^ static_cast<std::underlying_type<E>::type>(b));\
26 }\
27\
28 template<class T>\
29 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, bool>::type operator!=(E a, T b)\
30 {\
31 return static_cast<std::underlying_type<E>::type>(a) != static_cast<std::underlying_type<E>::type>(b);\
32 }\
33\
34 template<class T>\
35 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, bool>::type operator==(E a, T b)\
36 {\
37 return static_cast<std::underlying_type<E>::type>(a) == static_cast<std::underlying_type<E>::type>(b);\
38 }\
39\
40 inline constexpr E operator~(E a)\
41 {\
42 return static_cast<E>(~static_cast<std::underlying_type<E>::type>(a));\
43 }\
44\
45 template<class T>\
46 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator|=(E& a, T b)\
47 {\
48 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) | static_cast<std::underlying_type<E>::type>(b));\
49 return a;\
50 }\
51\
52 template<class T>\
53 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator&=(E& a, T b)\
54 {\
55 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) & static_cast<std::underlying_type<E>::type>(b));\
56 return a;\
57 }\
58\
59 template<class T>\
60 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator^=(E& a, T b)\
61 {\
62 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) ^ static_cast<std::underlying_type<E>::type>(b));\
63 return a;\
64 }\
65\
66 template<class T>\
67 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator-(E a, T b)\
68 {\
69 return static_cast<E>(static_cast<std::underlying_type<E>::type>(a) - static_cast<std::underlying_type<E>::type>(b));\
70 }\
71\
72 template<class T>\
73 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator-=(E& a, T b)\
74 {\
75 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) - static_cast<std::underlying_type<E>::type>(b));\
76 return a;\
77 }\
78\
79 template<class T>\
80 inline typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E&>::type operator+=(E& a, T b)\
81 {\
82 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) + static_cast<std::underlying_type<E>::type>(b));\
83 return a;\
84 }\
85\
86 inline E operator++(E& a, int)\
87 {\
88 E tmp = a;\
89 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) + 1);\
90 return tmp;\
91 }\
92 inline E operator++(E& a)\
93 {\
94 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) + 1);\
95 return a;\
96 }\
97\
98 inline E operator--(E& a, int)\
99 {\
100 E tmp = a;\
101 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) - 1);\
102 return tmp;\
103 }\
104 inline E operator--(E& a)\
105 {\
106 a = static_cast<E>(static_cast<std::underlying_type<E>::type>(a) - 1);\
107 return a;\
108 }\
109\
110 template<class T>\
111 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator<<(E a, T b)\
112 {\
113 return static_cast<E>( static_cast<std::underlying_type<E>::type>(a) << static_cast<std::underlying_type<E>::type>(b) );\
114 }\
115\
116 template<class T>\
117 inline constexpr typename std::enable_if<std::is_integral<T>::value || std::is_enum<T>::value, E>::type operator>>(E a, T b)\
118 {\
119 return static_cast<E>( static_cast<std::underlying_type<E>::type>(a) >> static_cast<std::underlying_type<E>::type>(b) );\
120 }\
121
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);
142
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>>;
161
163#define DECLARE_USING_GLOBAL_OPERATORS \
164 using ::operator|;\
165 using ::operator&;\
166 using ::operator^;\
167 using ::operator!=;\
168 using ::operator==;\
169 using ::operator~;\
170 using ::operator|=;\
171 using ::operator&=;\
172 using ::operator^=;\
173 using ::operator-;\
174 using ::operator-=;\
175 using ::operator+=;\
176 using ::operator++;\
177 using ::operator--;\
178 using ::operator>>;\
179 using ::operator<<;
180
181namespace DummyNamespace_83FABA9C_01E7_49DD_9184_3653C866E56A
182{
183
184 struct DummyEnumOperatorsStruct
185 {
186 };
187
188}
189
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);
222
223#endif // _aspose_system_enum_helpers_h_
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