glbinding  3.3.0.0
A C++ binding for the OpenGL API, generated using the gl.xml specification.
Loading...
Searching...
No Matches
SharedBitfield.inl
Go to the documentation of this file.
1
2#pragma once
3
4
5namespace glbinding
6{
7
8
9template <typename T>
14
15template <typename T>
17{
18 return m_value;
19}
20
21
22template <typename Type>
23template <typename ConstructionType>
25: SharedBitfieldBase<typename std::underlying_type<Type>::type>(static_cast<typename std::underlying_type<Type>::type>(value))
26{
27 static_assert(is_member_of_SharedBitfield<ConstructionType, Type>::value, "Not a member of SharedBitfield");
28}
29
30template <typename Type>
31GLBINDING_CONSTEXPR SharedBitfield<Type>::SharedBitfield(typename std::underlying_type<Type>::type value)
32: SharedBitfieldBase<typename std::underlying_type<Type>::type>(value)
33{
34}
35
36template <typename Type>
38{
39 return static_cast<Type>(this->m_value);
40}
41
42template <typename Type>
43template <typename... T>
44GLBINDING_CONSTEXPR auto SharedBitfield<Type>::operator|(SharedBitfield<T...> other) const -> typename std::enable_if<!std::is_same<typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type, SharedBitfield<>>::value, typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type>::type
45{
46 return typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type(this->m_value | static_cast<decltype(this->m_value)>(other));
47}
48
49template <typename Type>
50template <typename... T>
51auto SharedBitfield<Type>::operator|=(SharedBitfield<T...> other) -> typename std::enable_if<!std::is_same<typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type, SharedBitfield<>>::value, SharedBitfield &>::type
52{
53 this->m_value |= static_cast<decltype(this->m_value)>(other);
54
55 return *this;
56}
57
58template <typename Type>
59template <typename... T>
60GLBINDING_CONSTEXPR auto SharedBitfield<Type>::operator&(SharedBitfield<T...> other) const -> typename std::enable_if<!std::is_same<typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type, SharedBitfield<>>::value, typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type>::type
61{
62 return typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type(this->m_value & static_cast<decltype(this->m_value)>(other));
63}
64
65template <typename Type>
66template <typename... T>
67auto SharedBitfield<Type>::operator&=(SharedBitfield<T...> other) -> typename std::enable_if<!std::is_same<typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type, SharedBitfield<>>::value, SharedBitfield &>::type
68{
69 this->m_value &= static_cast<decltype(this->m_value)>(other);
70
71 return *this;
72}
73
74template <typename Type>
75template <typename... T>
76GLBINDING_CONSTEXPR auto SharedBitfield<Type>::operator^(SharedBitfield<T...> other) const -> typename std::enable_if<!std::is_same<typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type, SharedBitfield<>>::value, typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type>::type
77{
78 return typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type(this->m_value ^static_cast<decltype(this->m_value)>(other));
79}
80
81template <typename Type>
82template <typename... T>
83auto SharedBitfield<Type>::operator^=(SharedBitfield<T...> other) -> typename std::enable_if<!std::is_same<typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type, SharedBitfield<>>::value, SharedBitfield &>::type
84{
85 this->m_value ^= static_cast<decltype(this->m_value)>(other);
86
87 return *this;
88}
89
90template <typename Type>
91template <typename... T>
92GLBINDING_CONSTEXPR auto SharedBitfield<Type>::operator==(SharedBitfield<T...> other) const -> typename std::enable_if<!std::is_same<typename intersect_SharedBitfield<SharedBitfield<Type>, SharedBitfield<T...>>::type, SharedBitfield<>>::value, bool>::type
93{
94 return static_cast<UnderlyingType>(*this) == static_cast<UnderlyingType>(other);
95}
96
97template <typename Type>
98template <typename T>
99GLBINDING_CONSTEXPR auto SharedBitfield<Type>::operator==(T other) const -> typename std::enable_if<is_member_of_SharedBitfield<T, Type>::value, bool>::type
100{
101 return static_cast<UnderlyingType>(*this) == static_cast<UnderlyingType>(other);
102}
103
104
105template <typename Type, typename... Types>
106template <typename ConstructionType>
108: SharedBitfield<Types...>(static_cast<typename std::underlying_type<Type>::type>(value))
109{
110 static_assert(is_member_of_SharedBitfield<ConstructionType, Type, Types...>::value, "Not a member of SharedBitfield");
111}
112
113template <typename Type, typename... Types>
114GLBINDING_CONSTEXPR SharedBitfield<Type, Types...>::SharedBitfield(typename std::underlying_type<Type>::type value)
115: SharedBitfield<Types...>(value)
116{
117}
118
119template <typename Type, typename... Types>
121{
122 return static_cast<Type>(this->m_value);
123}
124
125template <typename Type, typename... Types>
126template <typename... T>
128{
129 return typename intersect_SharedBitfield<SharedBitfield<Type, Types...>, SharedBitfield<T...>>::type(this->m_value | static_cast<decltype(this->m_value)>(other));
130}
131
132template <typename Type, typename... Types>
133template <typename... T>
135{
136 this->m_value |= static_cast<decltype(this->m_value)>(other);
137
138 return *this;
139}
140
141template <typename Type, typename... Types>
142template <typename... T>
144{
145 return typename intersect_SharedBitfield<SharedBitfield<Type, Types...>, SharedBitfield<T...>>::type(this->m_value & static_cast<decltype(this->m_value)>(other));
146}
147
148template <typename Type, typename... Types>
149template <typename... T>
151{
152 this->m_value &= static_cast<decltype(this->m_value)>(other);
153
154 return *this;
155}
156
157template <typename Type, typename... Types>
158template <typename... T>
160{
161 return typename intersect_SharedBitfield<SharedBitfield<Type, Types...>, SharedBitfield<T...>>::type(this->m_value ^static_cast<decltype(this->m_value)>(other));
162}
163
164template <typename Type, typename... Types>
165template <typename... T>
167{
168 this->m_value ^= static_cast<decltype(this->m_value)>(other);
169
170 return *this;
171}
172
173template <typename Type, typename... Types>
174template <typename... T>
176{
177 return static_cast<UnderlyingType>(*this) == static_cast<UnderlyingType>(other);
178}
179
180template <typename Type, typename... Types>
181template <typename T>
182GLBINDING_CONSTEXPR auto SharedBitfield<Type, Types...>::operator==(T other) const -> typename std::enable_if<is_member_of_SharedBitfield<T, Type, Types...>::value, bool>::type
183{
184 return static_cast<UnderlyingType>(*this) == static_cast<UnderlyingType>(other);
185}
186
187
188template <typename Enum, typename ConvertibleEnum>
189GLBINDING_CONSTEXPR typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
191{
192 return a | static_cast<Enum>(b);
193}
194
195template <typename ConvertibleEnum, typename Enum>
196GLBINDING_CONSTEXPR typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
198{
199 return static_cast<Enum>(a) | b;
200}
201
202template <typename Enum, typename ConvertibleEnum>
203typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
205{
206 return a |= static_cast<Enum>(b);
207}
208
209template <typename Enum, typename ConvertibleEnum>
210GLBINDING_CONSTEXPR typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
212{
213 return a & static_cast<Enum>(b);
214}
215
216template <typename ConvertibleEnum, typename Enum>
217GLBINDING_CONSTEXPR typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
219{
220 return static_cast<Enum>(a) & b;
221}
222
223template <typename Enum, typename ConvertibleEnum>
224typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
226{
227 return a &= static_cast<Enum>(b);
228}
229
230template <typename Enum, typename ConvertibleEnum>
231GLBINDING_CONSTEXPR typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
233{
234 return a ^ static_cast<Enum>(b);
235}
236
237template <typename ConvertibleEnum, typename Enum>
238GLBINDING_CONSTEXPR typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
240{
241 return static_cast<Enum>(a) ^ b;
242}
243
244template <typename Enum, typename ConvertibleEnum>
245typename std::enable_if<std::is_base_of<SharedBitfieldBase<typename std::underlying_type<typename std::enable_if<std::is_enum<Enum>::value, Enum>::type>::type>, ConvertibleEnum>::value, Enum>::type
247{
248 return a ^= static_cast<Enum>(b);
249}
250
251
252} // namespace glbinding
typename SharedBitfield< Types... >::UnderlyingType UnderlyingType
inherit UnderlyingType declaration
Definition SharedBitfield.h:352
typename SharedBitfieldBase< typename std::underlying_type< Type >::type >::UnderlyingType UnderlyingType
inherit UnderlyingType declaration
Definition SharedBitfield.h:183
Invalid SharedBitfield class as it contains no valid bitfield types.
Definition SharedBitfield.h:167
The base class of a SharedBitfield, containing the actual (and convertible) bitfield value.
Definition SharedBitfield.h:133
GLBINDING_CONSTEXPR SharedBitfieldBase(T value)
Constructor.
Definition SharedBitfield.inl:10
A representation of a bitfield value that could be member of multiple bitfield types as allowed in Op...
Definition SharedBitfield.h:23
The Value class represents a printable wrapper around an OpenGL data type.
Definition Value.h:30
Contains all the classes of glbinding.
GLBINDING_CONSTEXPR CallbackMask operator&(CallbackMask a, CallbackMask b)
External operator for bit-wise 'and' of CallbackMasks.
Definition CallbackMask.inl:26
GLBINDING_CONSTEXPR CallbackMask operator|(CallbackMask a, CallbackMask b)
External operator for bit-wise 'or' of CallbackMasks.
Definition CallbackMask.inl:19
CallbackMask & operator&=(CallbackMask &a, CallbackMask b)
External operator for bit-wise 'and' assignment of CallbackMasks.
Definition CallbackMask.inl:46
CallbackMask & operator^=(CallbackMask &a, CallbackMask b)
External operator for bit-wise 'xor' assignment of CallbackMasks.
Definition CallbackMask.inl:52
CallbackMask & operator|=(CallbackMask &a, CallbackMask b)
External operator for bit-wise 'or' assignment of CallbackMasks.
Definition CallbackMask.inl:40
GLBINDING_CONSTEXPR CallbackMask operator^(CallbackMask a, CallbackMask b)
External operator for bit-wise 'xor' of CallbackMasks.
Definition CallbackMask.inl:33
Break condition for the SharedBitfield intersection.
Definition SharedBitfield.h:98
Break condition for the is_member_of_SharedBitfield metaprogramming.
Definition SharedBitfield.h:43