OpenMesh
GenProg.hh
1
/* ========================================================================= *
2
* *
3
* OpenMesh *
4
* Copyright (c) 2001-2015, RWTH-Aachen University *
5
* Department of Computer Graphics and Multimedia *
6
* All rights reserved. *
7
* www.openmesh.org *
8
* *
9
*---------------------------------------------------------------------------*
10
* This file is part of OpenMesh. *
11
*---------------------------------------------------------------------------*
12
* *
13
* Redistribution and use in source and binary forms, with or without *
14
* modification, are permitted provided that the following conditions *
15
* are met: *
16
* *
17
* 1. Redistributions of source code must retain the above copyright notice, *
18
* this list of conditions and the following disclaimer. *
19
* *
20
* 2. Redistributions in binary form must reproduce the above copyright *
21
* notice, this list of conditions and the following disclaimer in the *
22
* documentation and/or other materials provided with the distribution. *
23
* *
24
* 3. Neither the name of the copyright holder nor the names of its *
25
* contributors may be used to endorse or promote products derived from *
26
* this software without specific prior written permission. *
27
* *
28
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30
* TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31
* PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32
* OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39
* *
40
* ========================================================================= */
41
42
/*===========================================================================*\
43
* *
44
* $Revision$ *
45
* $Date$ *
46
* *
47
\*===========================================================================*/
48
49
50
//=============================================================================
51
//
52
// Utils for generic/generative programming
53
//
54
//=============================================================================
55
56
#ifndef OPENMESH_GENPROG_HH
57
#define OPENMESH_GENPROG_HH
58
59
60
//== INCLUDES =================================================================
61
62
#include <OpenMesh/Core/System/config.h>
63
64
65
//== NAMESPACES ===============================================================
66
67
namespace
OpenMesh
{
68
69
namespace
GenProg {
70
#ifndef DOXY_IGNORE_THIS
71
72
//== IMPLEMENTATION ===========================================================
73
74
76
template
<
bool
b>
struct
Bool2Type {
enum
{ my_bool = b }; };
77
79
template
<
int
i>
struct
Int2Type {
enum
{ my_int = i }; };
80
82
typedef
Bool2Type<true> TrueType;
83
85
typedef
Bool2Type<false> FalseType;
86
87
//-----------------------------------------------------------------------------
89
template
<
bool
Expr>
struct
AssertCompile;
90
template
<>
struct
AssertCompile<true> {};
91
92
93
94
//--- Template "if" w/ partial specialization ---------------------------------
95
#if OM_PARTIAL_SPECIALIZATION
96
97
98
template
<
bool
condition,
class
Then,
class
Else>
99
struct
IF {
typedef
Then Result; };
100
106
template
<
class
Then,
class
Else>
107
struct
IF<false, Then, Else> {
typedef
Else Result; };
108
109
110
111
112
113
//--- Template "if" w/o partial specialization --------------------------------
114
#else
115
116
117
struct
SelectThen
118
{
119
template
<
class
Then,
class
Else>
struct
Select {
120
typedef
Then Result;
121
};
122
};
123
124
struct
SelectElse
125
{
126
template
<
class
Then,
class
Else>
struct
Select {
127
typedef
Else Result;
128
};
129
};
130
131
template
<
bool
condition>
struct
ChooseSelector {
132
typedef
SelectThen Result;
133
};
134
135
template
<>
struct
ChooseSelector<false> {
136
typedef
SelectElse Result;
137
};
138
139
146
template
<
bool
condition,
class
Then,
class
Else>
147
class
IF
148
{
149
typedef
typename
ChooseSelector<condition>::Result Selector;
150
public
:
151
typedef
typename
Selector::template Select<Then, Else>::Result Result;
152
};
153
154
#endif
155
156
//=============================================================================
157
#endif
158
}
// namespace GenProg
159
}
// namespace OpenMesh
160
161
#define assert_compile(EXPR) GenProg::AssertCompile<(EXPR)>();
162
163
//=============================================================================
164
#endif // OPENMESH_GENPROG_HH defined
165
//=============================================================================
OpenMesh
Martin, 26.12.2004: 1) replaced resize(size()-1) with pop_back(), since the later is more efficient 2...
Definition:
MeshItems.hh:64
Project
OpenMesh
, © Computer Graphics Group, RWTH Aachen. Documentation generated using
doxygen
.