TTK
Loading...
Searching...
No Matches
ttkMacros.h
Go to the documentation of this file.
1#pragma once
2
3class vtkIdTypeArray;
4class vtkIntArray;
5
6#define TTK_COMMA ,
7
8#ifdef TTK_ENABLE_64BIT_IDS
9using ttkSimplexIdTypeArray = vtkIdTypeArray;
10#else
11using ttkSimplexIdTypeArray = vtkIntArray;
12#endif
13
14#ifndef vtkSetEnumMacro
15#define vtkSetEnumMacro(name, enumType) \
16 virtual void Set##name(enumType _arg) { \
17 vtkDebugMacro(<< this->GetClassName() << " (" << this \
18 << "): setting " #name " to " \
19 << static_cast<std::underlying_type<enumType>::type>(_arg)); \
20 if(this->name != _arg) { \
21 this->name = _arg; \
22 this->Modified(); \
23 } \
24 }
25#endif
26
27#ifndef vtkGetEnumMacro
28#define vtkGetEnumMacro(name, enumType) \
29 virtual enumType Get##name() const { \
30 vtkDebugMacro(<< this->GetClassName() << " (" << this << "): returning " \
31 << #name " of " \
32 << static_cast<std::underlying_type<enumType>::type>( \
33 this->name)); \
34 return this->name; \
35 }
36#endif
37
38#define ttkSetEnumMacro(name, enumType) \
39 virtual void Set##name(int _arg) { \
40 vtkDebugMacro(<< this->GetClassName() << " (" << this \
41 << "): setting " #name " to " << _arg); \
42 if(this->name != static_cast<enumType>(_arg)) { \
43 this->name = static_cast<enumType>(_arg); \
44 this->Modified(); \
45 } \
46 } \
47 vtkSetEnumMacro(name, enumType);
48
49#ifdef TTK_REDUCE_TEMPLATE_INSTANTIATIONS
50// reduced list of template instantiations by redefining vtkTemplateMacro
51#include <vtkSetGet.h>
52#ifdef vtkTemplateMacro
53#undef vtkTemplateMacro
54#define vtkTemplateMacro(call) \
55 vtkTemplateMacroCase(VTK_DOUBLE, double, call); \
56 vtkTemplateMacroCase(VTK_FLOAT, float, call); \
57 vtkTemplateMacroCase(VTK_INT, int, call); \
58 vtkTemplateMacroCase(VTK_LONG_LONG, long long, call);
59#endif // vtkTemplateMacro
60#endif // TTK_REDUCE_TEMPLATE_INSTANTIATIONS
61
62#define ttkVtkTemplateMacroCase( \
63 dataType, triangulationType, triangulationClass, call) \
64 case triangulationType: { \
65 typedef triangulationClass TTK_TT; \
66 switch(dataType) { vtkTemplateMacro((call)); }; \
67 }; break;
68
69#define ttkVtkTemplateMacro(dataType, triangulationType, call) \
70 switch(triangulationType) { \
71 ttkVtkTemplateMacroCase(dataType, ttk::Triangulation::Type::EXPLICIT, \
72 ttk::ExplicitTriangulation, call); \
73 ttkVtkTemplateMacroCase(dataType, ttk::Triangulation::Type::IMPLICIT, \
74 ttk::ImplicitNoPreconditions, call); \
75 ttkVtkTemplateMacroCase(dataType, \
76 ttk::Triangulation::Type::HYBRID_IMPLICIT, \
77 ttk::ImplicitWithPreconditions, call); \
78 ttkVtkTemplateMacroCase(dataType, ttk::Triangulation::Type::PERIODIC, \
79 ttk::PeriodicNoPreconditions, call); \
80 ttkVtkTemplateMacroCase(dataType, \
81 ttk::Triangulation::Type::HYBRID_PERIODIC, \
82 ttk::PeriodicWithPreconditions, call); \
83 ttkVtkTemplateMacroCase(dataType, ttk::Triangulation::Type::COMPACT, \
84 ttk::CompactTriangulation, call); \
85 }
86
87#define ttkTemplate2IdMacro(call) \
88 vtkTemplate2MacroCase1(VTK_LONG_LONG, long long, call); \
89 vtkTemplate2MacroCase1(VTK_UNSIGNED_LONG_LONG, unsigned long long, call); \
90 vtkTemplate2MacroCase1(VTK_ID_TYPE, vtkIdType, call); \
91 vtkTemplate2MacroCase1(VTK_LONG, long, call); \
92 vtkTemplate2MacroCase1(VTK_UNSIGNED_LONG, unsigned long, call); \
93 vtkTemplate2MacroCase1(VTK_INT, int, call); \
94 vtkTemplate2MacroCase1(VTK_UNSIGNED_INT, unsigned int, call);
95
96#ifndef vtkTemplate2MacroCase1
97#define vtkTemplate2MacroCase1(type1N, type1, call) \
98 vtkTemplate2MacroCase2(type1N, type1, VTK_DOUBLE, double, call); \
99 vtkTemplate2MacroCase2(type1N, type1, VTK_FLOAT, float, call); \
100 vtkTemplate2MacroCase2(type1N, type1, VTK_LONG_LONG, long long, call); \
101 vtkTemplate2MacroCase2( \
102 type1N, type1, VTK_UNSIGNED_LONG_LONG, unsigned long long, call); \
103 vtkTemplate2MacroCase2(type1N, type1, VTK_ID_TYPE, vtkIdType, call); \
104 vtkTemplate2MacroCase2(type1N, type1, VTK_LONG, long, call); \
105 vtkTemplate2MacroCase2( \
106 type1N, type1, VTK_UNSIGNED_LONG, unsigned long, call); \
107 vtkTemplate2MacroCase2(type1N, type1, VTK_INT, int, call); \
108 vtkTemplate2MacroCase2(type1N, type1, VTK_UNSIGNED_INT, unsigned int, call); \
109 vtkTemplate2MacroCase2(type1N, type1, VTK_SHORT, short, call); \
110 vtkTemplate2MacroCase2( \
111 type1N, type1, VTK_UNSIGNED_SHORT, unsigned short, call); \
112 vtkTemplate2MacroCase2(type1N, type1, VTK_CHAR, char, call); \
113 vtkTemplate2MacroCase2(type1N, type1, VTK_SIGNED_CHAR, signed char, call); \
114 vtkTemplate2MacroCase2(type1N, type1, VTK_UNSIGNED_CHAR, unsigned char, call)
115#endif
116
117#ifndef vtkTemplate2MacroCase2
118#define vtkTemplate2MacroCase2(type1N, type1, type2N, type2, call) \
119 case vtkTemplate2PackMacro(type1N, type2N): { \
120 typedef type1 VTK_T1; \
121 typedef type2 VTK_T2; \
122 call; \
123 }; break
124#endif
125
126// -----------------------------------------------------------------------------
127
128#define ttkTypeMacroErrorCase(idx, type) \
129 default: { \
130 this->printErr("Unsupported " #idx "-th Template Data Type: " \
131 + std::to_string(static_cast<int>(type))); \
132 } break;
133
134#define ttkTypeMacroCase(enum, type, number, call) \
135 case enum: { \
136 typedef type T##number; \
137 call; \
138 } break;
139
140#define ttkTypeMacroT(group, call) \
141 switch(group) { \
142 ttkTypeMacroCase(ttk::Triangulation::Type::EXPLICIT, \
143 ttk::ExplicitTriangulation, 0, call); \
144 ttkTypeMacroCase( \
145 ttk::Triangulation::Type::COMPACT, ttk::CompactTriangulation, 0, call); \
146 ttkTypeMacroCase(ttk::Triangulation::Type::IMPLICIT, \
147 ttk::ImplicitNoPreconditions, 0, call); \
148 ttkTypeMacroCase(ttk::Triangulation::Type::HYBRID_IMPLICIT, \
149 ttk::ImplicitWithPreconditions, 0, call); \
150 ttkTypeMacroCase(ttk::Triangulation::Type::PERIODIC, \
151 ttk::PeriodicNoPreconditions, 0, call); \
152 ttkTypeMacroCase(ttk::Triangulation::Type::HYBRID_PERIODIC, \
153 ttk::PeriodicWithPreconditions, 0, call); \
154 ttkTypeMacroErrorCase(0, group); \
155 }
156
157#define ttkTypeMacroR(group, call) \
158 switch(group) { \
159 ttkTypeMacroCase(VTK_FLOAT, float, 0, call); \
160 ttkTypeMacroCase(VTK_DOUBLE, double, 0, call); \
161 ttkTypeMacroErrorCase(0, group); \
162 }
163
164#define ttkTypeMacroI(group, call) \
165 switch(group) { \
166 ttkTypeMacroCase(VTK_INT, int, 0, call); \
167 ttkTypeMacroCase(VTK_UNSIGNED_INT, unsigned int, 0, call); \
168 ttkTypeMacroCase(VTK_CHAR, char, 0, call); \
169 ttkTypeMacroCase(VTK_SIGNED_CHAR, signed char, 0, call); \
170 ttkTypeMacroCase(VTK_UNSIGNED_CHAR, unsigned char, 0, call); \
171 ttkTypeMacroCase(VTK_LONG, long, 0, call); \
172 ttkTypeMacroCase(VTK_LONG_LONG, long long, 0, call); \
173 ttkTypeMacroCase(VTK_UNSIGNED_LONG, unsigned long, 0, call); \
174 ttkTypeMacroCase(VTK_UNSIGNED_LONG_LONG, unsigned long long, 0, call); \
175 ttkTypeMacroCase(VTK_ID_TYPE, vtkIdType, 0, call); \
176 ttkTypeMacroErrorCase(0, group); \
177 }
178
179#define ttkTypeMacroA(group, call) \
180 switch(group) { \
181 ttkTypeMacroCase(VTK_FLOAT, float, 0, call); \
182 ttkTypeMacroCase(VTK_DOUBLE, double, 0, call); \
183 ttkTypeMacroCase(VTK_INT, int, 0, call); \
184 ttkTypeMacroCase(VTK_UNSIGNED_INT, unsigned int, 0, call); \
185 ttkTypeMacroCase(VTK_CHAR, char, 0, call); \
186 ttkTypeMacroCase(VTK_SIGNED_CHAR, signed char, 0, call); \
187 ttkTypeMacroCase(VTK_UNSIGNED_CHAR, unsigned char, 0, call); \
188 ttkTypeMacroCase(VTK_LONG, long, 0, call); \
189 ttkTypeMacroCase(VTK_LONG_LONG, long long, 0, call); \
190 ttkTypeMacroCase(VTK_UNSIGNED_LONG, unsigned long, 0, call); \
191 ttkTypeMacroCase(VTK_UNSIGNED_LONG_LONG, unsigned long long, 0, call); \
192 ttkTypeMacroCase(VTK_ID_TYPE, vtkIdType, 0, call); \
193 ttkTypeMacroErrorCase(0, group); \
194 }
195
196#ifdef TTK_REDUCE_TEMPLATE_INSTANTIATIONS
197// reduced list of template instantiations by redefining ttkTypeMacroI
198// & ttkTypeMacroA
199#undef ttkTypeMacroI
200#define ttkTypeMacroI(group, call) \
201 switch(group) { \
202 ttkTypeMacroCase(VTK_INT, int, 0, call); \
203 ttkTypeMacroCase(VTK_LONG_LONG, long long, 0, call); \
204 ttkTypeMacroErrorCase(0, group); \
205 }
206#undef ttkTypeMacroA
207#define ttkTypeMacroA(group, call) \
208 switch(group) { \
209 ttkTypeMacroCase(VTK_FLOAT, float, 0, call); \
210 ttkTypeMacroCase(VTK_DOUBLE, double, 0, call); \
211 ttkTypeMacroCase(VTK_INT, int, 0, call); \
212 ttkTypeMacroCase(VTK_LONG_LONG, long long, 0, call); \
213 ttkTypeMacroErrorCase(0, group); \
214 }
215#endif // TTK_REDUCE_TEMPLATE_INSTANTIATIONS
216
217#define ttkTypeMacroAT(group0, group1, call) \
218 switch(group1) { \
219 ttkTypeMacroCase(ttk::Triangulation::Type::EXPLICIT, \
220 ttk::ExplicitTriangulation, 1, \
221 ttkTypeMacroA(group0, call)); \
222 ttkTypeMacroCase(ttk::Triangulation::Type::COMPACT, \
223 ttk::CompactTriangulation, 1, \
224 ttkTypeMacroA(group0, call)); \
225 ttkTypeMacroCase(ttk::Triangulation::Type::IMPLICIT, \
226 ttk::ImplicitNoPreconditions, 1, \
227 ttkTypeMacroA(group0, call)); \
228 ttkTypeMacroCase(ttk::Triangulation::Type::HYBRID_IMPLICIT, \
229 ttk::ImplicitWithPreconditions, 1, \
230 ttkTypeMacroA(group0, call)); \
231 ttkTypeMacroCase(ttk::Triangulation::Type::PERIODIC, \
232 ttk::PeriodicNoPreconditions, 1, \
233 ttkTypeMacroA(group0, call)); \
234 ttkTypeMacroCase(ttk::Triangulation::Type::HYBRID_PERIODIC, \
235 ttk::PeriodicWithPreconditions, 1, \
236 ttkTypeMacroA(group0, call)); \
237 ttkTypeMacroErrorCase(1, group1); \
238 }
239
240#define ttkTypeMacroRT(group0, group1, call) \
241 switch(group1) { \
242 ttkTypeMacroCase(ttk::Triangulation::Type::EXPLICIT, \
243 ttk::ExplicitTriangulation, 1, \
244 ttkTypeMacroR(group0, call)); \
245 ttkTypeMacroCase(ttk::Triangulation::Type::COMPACT, \
246 ttk::CompactTriangulation, 1, \
247 ttkTypeMacroR(group0, call)); \
248 ttkTypeMacroCase(ttk::Triangulation::Type::IMPLICIT, \
249 ttk::ImplicitNoPreconditions, 1, \
250 ttkTypeMacroR(group0, call)); \
251 ttkTypeMacroCase(ttk::Triangulation::Type::HYBRID_IMPLICIT, \
252 ttk::ImplicitWithPreconditions, 1, \
253 ttkTypeMacroR(group0, call)); \
254 ttkTypeMacroCase(ttk::Triangulation::Type::PERIODIC, \
255 ttk::PeriodicNoPreconditions, 1, \
256 ttkTypeMacroR(group0, call)); \
257 ttkTypeMacroCase(ttk::Triangulation::Type::HYBRID_PERIODIC, \
258 ttk::PeriodicWithPreconditions, 1, \
259 ttkTypeMacroR(group0, call)); \
260 ttkTypeMacroErrorCase(1, group1); \
261 }
262
263#define ttkTypeMacroIT(group0, group1, call) \
264 switch(group1) { \
265 ttkTypeMacroCase(ttk::Triangulation::Type::EXPLICIT, \
266 ttk::ExplicitTriangulation, 1, \
267 ttkTypeMacroI(group0, call)); \
268 ttkTypeMacroCase(ttk::Triangulation::Type::COMPACT, \
269 ttk::CompactTriangulation, 1, \
270 ttkTypeMacroI(group0, call)); \
271 ttkTypeMacroCase(ttk::Triangulation::Type::IMPLICIT, \
272 ttk::ImplicitNoPreconditions, 1, \
273 ttkTypeMacroI(group0, call)); \
274 ttkTypeMacroCase(ttk::Triangulation::Type::HYBRID_IMPLICIT, \
275 ttk::ImplicitWithPreconditions, 1, \
276 ttkTypeMacroI(group0, call)); \
277 ttkTypeMacroCase(ttk::Triangulation::Type::PERIODIC, \
278 ttk::PeriodicNoPreconditions, 1, \
279 ttkTypeMacroI(group0, call)); \
280 ttkTypeMacroCase(ttk::Triangulation::Type::HYBRID_PERIODIC, \
281 ttk::PeriodicWithPreconditions, 1, \
282 ttkTypeMacroI(group0, call)); \
283 ttkTypeMacroErrorCase(1, group1); \
284 }
285
286#define ttkTypeMacroAI(group0, group1, call) \
287 switch(group1) { \
288 ttkTypeMacroCase(VTK_INT, int, 1, ttkTypeMacroA(group0, call)); \
289 ttkTypeMacroCase( \
290 VTK_LONG_LONG, long long, 1, ttkTypeMacroA(group0, call)); \
291 ttkTypeMacroCase(VTK_ID_TYPE, vtkIdType, 1, ttkTypeMacroA(group0, call)); \
292 ttkTypeMacroErrorCase(1, group1); \
293 }
294
295#define ttkTypeMacroRR(group0, group1, call) \
296 switch(group1) { \
297 ttkTypeMacroCase(VTK_FLOAT, float, 1, ttkTypeMacroR(group0, call)); \
298 ttkTypeMacroCase(VTK_DOUBLE, double, 1, ttkTypeMacroR(group0, call)); \
299 ttkTypeMacroErrorCase(1, group1); \
300 }
301
302#define ttkTypeMacroAA(group0, group1, call) \
303 switch(group1) { \
304 ttkTypeMacroCase(VTK_FLOAT, float, 1, ttkTypeMacroA(group0, call)); \
305 ttkTypeMacroCase(VTK_DOUBLE, double, 1, ttkTypeMacroA(group0, call)); \
306 ttkTypeMacroCase(VTK_INT, int, 1, ttkTypeMacroA(group0, call)); \
307 ttkTypeMacroCase( \
308 VTK_UNSIGNED_INT, unsigned int, 1, ttkTypeMacroA(group0, call)); \
309 ttkTypeMacroCase(VTK_CHAR, char, 1, ttkTypeMacroA(group0, call)); \
310 ttkTypeMacroCase( \
311 VTK_SIGNED_CHAR, signed char, 1, ttkTypeMacroA(group0, call)); \
312 ttkTypeMacroCase( \
313 VTK_UNSIGNED_CHAR, unsigned char, 1, ttkTypeMacroA(group0, call)); \
314 ttkTypeMacroCase(VTK_LONG, long, 1, ttkTypeMacroA(group0, call)); \
315 ttkTypeMacroCase( \
316 VTK_LONG_LONG, long long, 1, ttkTypeMacroA(group0, call)); \
317 ttkTypeMacroCase( \
318 VTK_UNSIGNED_LONG, unsigned long, 1, ttkTypeMacroA(group0, call)); \
319 ttkTypeMacroCase(VTK_UNSIGNED_LONG_LONG, unsigned long long, 1, \
320 ttkTypeMacroA(group0, call)); \
321 ttkTypeMacroCase(VTK_ID_TYPE, vtkIdType, 1, ttkTypeMacroA(group0, call)); \
322 ttkTypeMacroErrorCase(1, group1); \
323 }
324
325#define ttkTypeMacroAAA(group0, group1, group2, call) \
326 switch(group2) { \
327 ttkTypeMacroCase( \
328 VTK_FLOAT, float, 2, ttkTypeMacroAA(group0, group1, call)); \
329 ttkTypeMacroCase( \
330 VTK_DOUBLE, double, 2, ttkTypeMacroAA(group0, group1, call)); \
331 ttkTypeMacroCase(VTK_INT, int, 2, ttkTypeMacroAA(group0, group1, call)); \
332 ttkTypeMacroCase(VTK_UNSIGNED_INT, unsigned int, 2, \
333 ttkTypeMacroAA(group0, group1, call)); \
334 ttkTypeMacroCase(VTK_CHAR, char, 2, ttkTypeMacroAA(group0, group1, call)); \
335 ttkTypeMacroCase( \
336 VTK_SIGNED_CHAR, signed char, 2, ttkTypeMacroAA(group0, group1, call)); \
337 ttkTypeMacroCase(VTK_UNSIGNED_CHAR, unsigned char, 2, \
338 ttkTypeMacroAA(group0, group1, call)); \
339 ttkTypeMacroCase(VTK_LONG, long, 2, ttkTypeMacroAA(group0, group1, call)); \
340 ttkTypeMacroCase( \
341 VTK_LONG_LONG, long long, 2, ttkTypeMacroAA(group0, group1, call)); \
342 ttkTypeMacroCase(VTK_UNSIGNED_LONG, unsigned long, 2, \
343 ttkTypeMacroAA(group0, group1, call)); \
344 ttkTypeMacroCase(VTK_UNSIGNED_LONG_LONG, unsigned long long, 2, \
345 ttkTypeMacroAA(group0, group1, call)); \
346 ttkTypeMacroCase( \
347 VTK_ID_TYPE, vtkIdType, 2, ttkTypeMacroAA(group0, group1, call)); \
348 ttkTypeMacroErrorCase(2, group2); \
349 }
350
351#define ttkTypeMacroAII(group0, group1, group2, call) \
352 switch(group2) { \
353 ttkTypeMacroCase(VTK_INT, int, 2, ttkTypeMacroAI(group0, group1, call)); \
354 ttkTypeMacroCase( \
355 VTK_LONG_LONG, long long, 2, ttkTypeMacroAI(group0, group1, call)); \
356 ttkTypeMacroCase( \
357 VTK_ID_TYPE, vtkIdType, 2, ttkTypeMacroAI(group0, group1, call)); \
358 ttkTypeMacroErrorCase(2, group2); \
359 }
360
361#define ttkTypeMacroRRR(group0, group1, group2, call) \
362 switch(group2) { \
363 ttkTypeMacroCase( \
364 VTK_FLOAT, float, 2, ttkTypeMacroRR(group0, group1, call)); \
365 ttkTypeMacroCase( \
366 VTK_DOUBLE, double, 2, ttkTypeMacroRR(group0, group1, call)); \
367 ttkTypeMacroErrorCase(2, group2); \
368 }
369
370#define ttkTypeMacroRRI(group0, group1, group2, call) \
371 switch(group2) { \
372 ttkTypeMacroCase(VTK_INT, int, 2, ttkTypeMacroRR(group0, group1, call)); \
373 ttkTypeMacroCase( \
374 VTK_LONG_LONG, long long, 2, ttkTypeMacroRR(group0, group1, call)); \
375 ttkTypeMacroCase( \
376 VTK_ID_TYPE, vtkIdType, 2, ttkTypeMacroRR(group0, group1, call)); \
377 ttkTypeMacroErrorCase(2, group2); \
378 }
vtkIntArray ttkSimplexIdTypeArray
Definition: ttkMacros.h:11