Library of Assembled Shared Sources
Loading...
Searching...
No Matches
bool.h
Go to the documentation of this file.
1
/** @file
2
* @author Bram de Greve (bram@cocamware.com)
3
* @author Tom De Muer (tom@cocamware.com)
4
*
5
* *** BEGIN LICENSE INFORMATION ***
6
*
7
* The contents of this file are subject to the Common Public Attribution License
8
* Version 1.0 (the "License"); you may not use this file except in compliance with
9
* the License. You may obtain a copy of the License at
10
* http://lass.sourceforge.net/cpal-license. The License is based on the
11
* Mozilla Public License Version 1.1 but Sections 14 and 15 have been added to cover
12
* use of software over a computer network and provide for limited attribution for
13
* the Original Developer. In addition, Exhibit A has been modified to be consistent
14
* with Exhibit B.
15
*
16
* Software distributed under the License is distributed on an "AS IS" basis, WITHOUT
17
* WARRANTY OF ANY KIND, either express or implied. See the License for the specific
18
* language governing rights and limitations under the License.
19
*
20
* The Original Code is LASS - Library of Assembled Shared Sources.
21
*
22
* The Initial Developer of the Original Code is Bram de Greve and Tom De Muer.
23
* The Original Developer is the Initial Developer.
24
*
25
* All portions of the code written by the Initial Developer are:
26
* Copyright (C) 2004-2025 the Initial Developer.
27
* All Rights Reserved.
28
*
29
* Contributor(s):
30
*
31
* Alternatively, the contents of this file may be used under the terms of the
32
* GNU General Public License Version 2 or later (the GPL), in which case the
33
* provisions of GPL are applicable instead of those above. If you wish to allow use
34
* of your version of this file only under the terms of the GPL and not to allow
35
* others to use your version of this file under the CPAL, indicate your decision by
36
* deleting the provisions above and replace them with the notice and other
37
* provisions required by the GPL License. If you do not delete the provisions above,
38
* a recipient may use your version of this file under either the CPAL or the GPL.
39
*
40
* *** END LICENSE INFORMATION ***
41
*/
42
43
44
45
/** @class lass::meta::Bool
46
* @brief meta boolean type
47
* @author Bram de Greve [BdG]
48
*
49
* The meta boolean type consists of two types True and False.
50
* Bool<flag> converts an C @c bool @a flag to a @e meta bools True or False
51
*
52
* @code
53
* Bool<true>::Type; // resolves to True
54
* @endcode
55
*/
56
57
#ifndef LASS_GUARDIAN_OF_INCLUSION_META_BOOL_H
58
#define LASS_GUARDIAN_OF_INCLUSION_META_BOOL_H
59
60
#include "
meta_common.h
"
61
62
// Clang's -Wunused-private-field will warn that dummy_ and biggerThanTrue_ are not used.
63
// But GCC <= 11 will then warn that [[maybe_unused]] attribute is ignored.
64
#if LASS_COMPILER_TYPE == LASS_COMPILER_TYPE_GCC && __GNUC__ <= 11
65
# define LASS_META_BOOL_MAYBE_UNUSED
66
#else
67
# define LASS_META_BOOL_MAYBE_UNUSED [[maybe_unused]]
68
#endif
69
70
namespace
lass
71
{
72
namespace
meta
73
{
74
75
/** meta true
76
* @relates Bool
77
*/
78
class
True
79
{
80
public
:
81
typedef
True
Type;
82
enum
{ value =
true
};
83
private
:
84
LASS_META_BOOL_MAYBE_UNUSED
char
dummy_;
85
};
86
87
/** meta false
88
* @relates Bool
89
*/
90
struct
False
91
{
92
public
:
93
typedef
False
Type;
94
enum
{ value =
false
};
95
private
:
96
LASS_META_BOOL_MAYBE_UNUSED
True
biggerThanTrue_[2];
97
};
98
99
100
101
template
<
bool
flag>
102
struct
Bool
:
103
public
True
104
{
105
};
106
107
template
<>
108
struct
Bool
<false>:
109
public
False
110
{
111
};
112
113
// --- logic operators -----------------------------------------------------------------------------
114
115
/** meta NOT
116
* @relates Bool
117
*/
118
template
<
typename
Operand>
struct
Not
:
119
public
Not
<typename Operand::Type>
120
{
121
};
122
template
<>
struct
Not
<
False
>:
public
True
{};
123
template
<>
struct
Not<True>:
public
False {};
124
125
126
127
/** meta AND
128
* @relates Bool
129
*/
130
template
<
typename
Operand1,
typename
Operand2>
struct
And
:
131
public
And
<typename Operand1::Type, typename Operand2::Type>
132
{
133
};
134
template
<>
struct
And
<
False
,
False
>:
public
False
{};
135
template
<>
struct
And<False, True>:
public
False {};
136
template
<>
struct
And<True, False>:
public
False {};
137
template
<>
struct
And
<
True
,
True
>:
public
True
{};
138
139
140
141
/** meta OR
142
* @relates Bool
143
*/
144
template
<
typename
Operand1,
typename
Operand2>
struct
Or
:
145
public
Or
<typename Operand1::Type, typename Operand2::Type>
146
{
147
};
148
template
<>
struct
Or
<
False
,
False
>:
public
False
{};
149
template
<>
struct
Or<False, True>:
public
True {};
150
template
<>
struct
Or<True, False>:
public
True {};
151
template
<>
struct
Or
<
True
,
True
>:
public
True
{};
152
153
154
155
/** meta XOR
156
* @relates Bool
157
*/
158
template
<
typename
Operand1,
typename
Operand2>
struct
Xor
:
159
public
Xor
<typename Operand1::Type, typename Operand2::Type>
160
{
161
};
162
template
<>
struct
Xor
<
False
,
False
>:
public
False
{};
163
template
<>
struct
Xor<False, True>:
public
True {};
164
template
<>
struct
Xor<True, False>:
public
True {};
165
template
<>
struct
Xor
<
True
,
True
>:
public
False
{};
166
167
168
}
169
170
}
171
172
#endif
173
174
// EOF
lass::meta::True
meta true
Definition
bool.h:79
meta_common.h
lass::meta
library for template meta programming
Definition
bool.h:73
lass
Library for Assembled Shared Sources.
Definition
config.h:53
lass::meta::And
meta AND
Definition
bool.h:132
lass::meta::Bool
meta boolean type
Definition
bool.h:104
lass::meta::False
meta false
Definition
bool.h:91
lass::meta::Not
meta NOT
Definition
bool.h:120
lass::meta::Or
meta OR
Definition
bool.h:146
lass::meta::Xor
meta XOR
Definition
bool.h:160
lass
meta
bool.h
Generated by
1.13.2