Mercurial > code
annotate C++/modules/Flags/Flags.h @ 334:0b576ee64d45
* Create brand new hierarchy
* Rename DynLib to Dynlib
* Remove some warnings
author | David Demelier <markand@malikania.fr> |
---|---|
date | Sun, 08 Mar 2015 14:26:33 +0100 |
parents | C++/Flags.h@a9946b5ca0cb |
children | d5ec1174b707 |
rev | line source |
---|---|
261
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * Flags.h -- safe wrapper for enum flags |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2013, 2014 David Demelier <markand@malikania.fr> |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef _FLAGS_H_ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define _FLAGS_H_ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
22 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
23 * @file Flags.h |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 * @brief Provide template class Flags and operators for enum classes |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
25 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 #include <type_traits> |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 * @class Flags |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 * @brief Wrapper that store enum flags |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 * This class is used to store an enum and make bitwise operations on it. User do not need |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 * to supply these operators because they are implemented in the class. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 * This class is very cheap and store the real underlying type from the enum and all functions |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 * are inlined. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 template <typename Enum, typename Type = std::underlying_type_t<Enum>> |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 class Flags final { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 private: |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 Type m_value { 0 }; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 public: |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 * Construct flags to 0. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 constexpr Flags() noexcept = default; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 * Construct flags with the enum value. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 constexpr Flags(Enum m) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 : m_value(static_cast<Type>(m)) |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 * Construct flags with the enum value. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 constexpr Flags(Type m) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 : m_value(m) |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 * Move constructor. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 * @param other the other |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 inline Flags(Flags &&other) noexcept = default; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
77 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 * Copy constructor. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 * @param other the other |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
81 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 inline Flags(const Flags &other) noexcept = default; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
84 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 * Move operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 * @param other the other |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 inline Flags &operator=(Flags &&other) noexcept = default; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
91 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
92 * Copy operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 * @param other the other |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
96 inline Flags &operator=(const Flags &other) noexcept = default; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
97 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
98 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
99 * &= operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
100 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
101 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
102 * @return *this |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
103 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
104 inline Flags &operator&=(Enum m) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
105 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
106 m_value &= static_cast<Type>(m); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
107 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
108 return *this; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
109 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
110 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
111 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 * &= operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
114 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
115 * @return *this |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
116 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
117 inline Flags &operator&=(Type m) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
118 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
119 m_value &= m; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
120 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
121 return *this; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
122 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
123 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
124 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
125 * |= operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
126 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
127 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
128 * @return *this |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
129 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
130 inline Flags &operator|=(Enum m) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
131 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
132 m_value |= static_cast<Type>(m); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
133 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
134 return *this; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
135 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
136 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
137 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
138 * |= operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
139 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
140 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
141 * @return *this |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
142 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
143 inline Flags &operator|=(Type m) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
144 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
145 m_value |= m; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
146 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
147 return *this; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
148 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
149 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
150 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
151 * ^= operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
152 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
153 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
154 * @return *this |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
155 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
156 inline Flags &operator^=(Enum m) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
157 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
158 m_value ^= static_cast<Type>(m); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
159 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
160 return *this; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
161 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
162 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
163 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
164 * ^= operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
165 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
166 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
167 * @return *this |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
168 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
169 inline Flags &operator^=(Type m) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
170 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
171 m_value ^= m; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
172 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
173 return *this; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
174 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
175 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
176 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
177 * & operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
178 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
179 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
180 * @return & combination |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
181 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
182 constexpr Flags operator&(Enum m) const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
183 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
184 return m_value & static_cast<Type>(m); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
185 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
186 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
187 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
188 * & operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
189 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
190 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
191 * @return & combination |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
192 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
193 constexpr Flags operator&(Type m) const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
194 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
195 return m_value & m; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
196 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
197 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
198 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
199 * | operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
200 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
201 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
202 * @return | combination |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
203 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
204 constexpr Flags operator|(Enum m) const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
205 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
206 return m_value | static_cast<Type>(m); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
207 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
208 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
209 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
210 * | operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
211 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
212 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
213 * @return | combination |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
214 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
215 constexpr Flags operator|(Type m) const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
216 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
217 return m_value | m; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
218 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
219 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
220 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
221 * ^ operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
222 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
223 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
224 * @return ^ combination |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
225 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
226 constexpr Flags operator^(Enum m) const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
227 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
228 return m_value & static_cast<Type>(m); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
229 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
230 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
231 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
232 * ^ operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
233 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
234 * @param m the mask |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
235 * @return ^ combination |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
236 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
237 constexpr Flags operator^(Type m) const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
238 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
239 return m_value & m; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
240 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
241 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
242 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
243 * ~ unary operator. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
244 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
245 * @return ~ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
246 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
247 constexpr Flags operator~() const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
248 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
249 return ~m_value; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
250 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
251 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
252 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
253 * Convert to bool. Simply check if value is not 0. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
254 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
255 * @return true if value != 0 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
256 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
257 constexpr operator bool() const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
258 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
259 return m_value != 0; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
260 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
261 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
262 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
263 * Operator !. Simply check if value is 0. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
264 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
265 * @return true if value == 0 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
266 */ |
262 | 267 constexpr bool operator!() const noexcept |
261
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
268 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
269 return m_value == 0; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
270 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
271 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
272 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
273 * Test comparison with other mask. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
274 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
275 * @return true if this value == m |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
276 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
277 constexpr bool operator==(Enum m) const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
278 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
279 return m_value == static_cast<Type>(m); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
280 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
281 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
282 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
283 * Test comparison with other mask. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
284 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
285 * @return true if this value == m |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
286 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
287 constexpr bool operator==(Type m) const noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
288 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
289 return m_value == m; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
290 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
291 }; |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
292 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
293 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
294 * Apply & operator on the enum. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
295 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
296 * @param x1 the first value |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
297 * @param x2 the second value |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
298 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
299 template <typename Value, typename Type = std::enable_if_t<std::is_enum<Value>::value, std::underlying_type_t<Value>>> |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
300 constexpr Value operator&(Value x1, Value x2) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
301 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
302 return static_cast<Value>(static_cast<Type>(x1) & static_cast<Type>(x2)); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
303 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
304 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
305 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
306 * Apply | operator on the enum. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
307 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
308 * @param x1 the first value |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
309 * @param x2 the second value |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
310 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
311 template <typename Value, typename Type = std::enable_if_t<std::is_enum<Value>::value, std::underlying_type_t<Value>>> |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
312 constexpr Value operator|(Value x1, Value x2) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
313 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
314 return static_cast<Value>(static_cast<Type>(x1) | static_cast<Type>(x2)); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
315 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
316 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
317 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
318 * Apply ^ operator on the enum. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
319 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
320 * @param x1 the first value |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
321 * @param x2 the second value |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
322 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
323 template <typename Value, typename Type = std::enable_if_t<std::is_enum<Value>::value, std::underlying_type_t<Value>>> |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
324 constexpr Value operator^(Value x1, Value x2) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
325 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
326 return static_cast<Value>(static_cast<Type>(x1) ^ static_cast<Type>(x2)); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
327 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
328 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
329 /** |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
330 * Apply ~ operator on the enum. |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
331 * |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
332 * @param x1 the first value |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
333 * @param x2 the second value |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
334 */ |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
335 template <typename Value, typename Type = std::enable_if_t<std::is_enum<Value>::value, std::underlying_type_t<Value>>> |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
336 constexpr Value operator~(Value x) noexcept |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
337 { |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
338 return static_cast<Value>(~static_cast<Type>(x)); |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
339 } |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
340 |
0c7bc55e0d36
Add Flags, a small wrapper for creating enum flags
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
341 #endif // !_FLAGS_H_ |