VTK
vtkTemplateAliasMacro.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Visualization Toolkit
4  Module: vtkTemplateAliasMacro.h
5 
6  Copyright (c) Ken Martin, Will Schroeder, Bill Lorensen
7  All rights reserved.
8  See Copyright.txt or http://www.kitware.com/Copyright.htm for details.
9 
10  This software is distributed WITHOUT ANY WARRANTY; without even
11  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
12  PURPOSE. See the above copyright notice for more information.
13 
14 =========================================================================*/
39 #ifndef vtkTemplateAliasMacro_h
40 #define vtkTemplateAliasMacro_h
41 
42 #include "vtkTypeTraits.h"
43 
44 // Allow individual switching of support for each scalar size/signedness.
45 // These could be made advanced user options to be configured by CMake.
46 #define VTK_USE_INT8 1
47 #define VTK_USE_UINT8 1
48 #define VTK_USE_INT16 1
49 #define VTK_USE_UINT16 1
50 #define VTK_USE_INT32 1
51 #define VTK_USE_UINT32 1
52 #define VTK_USE_INT64 1
53 #define VTK_USE_UINT64 1
54 #define VTK_USE_FLOAT32 1
55 #define VTK_USE_FLOAT64 1
56 
57 //--------------------------------------------------------------------------
58 
59 // Define helper macros to switch types on and off.
60 #define vtkTemplateAliasMacroCase(typeN, call) \
61  vtkTemplateAliasMacroCase0(typeN, call, VTK_TYPE_SIZED_##typeN)
62 #define vtkTemplateAliasMacroCase0(typeN, call, sized) \
63  vtkTemplateAliasMacroCase1(typeN, call, sized)
64 #define vtkTemplateAliasMacroCase1(typeN, call, sized) \
65  vtkTemplateAliasMacroCase2(typeN, call, VTK_USE_##sized)
66 #define vtkTemplateAliasMacroCase2(typeN, call, value) \
67  vtkTemplateAliasMacroCase3(typeN, call, value)
68 #define vtkTemplateAliasMacroCase3(typeN, call, value) \
69  vtkTemplateAliasMacroCase_##value(typeN, call)
70 #define vtkTemplateAliasMacroCase_0(typeN, call) \
71  case VTK_##typeN: \
72  { \
73  vtkGenericWarningMacro("Support for VTK_" #typeN " not compiled."); \
74  }; break
75 #define vtkTemplateAliasMacroCase_1(typeN, call) \
76  case VTK_##typeN: \
77  { \
78  typedef vtkTypeTraits<VTK_TYPE_NAME_##typeN>::SizedType VTK_TT; call; \
79  }; break
80 
81 // Define a macro to dispatch calls to a template instantiated over
82 // the aliased scalar types.
83 #define vtkTemplateAliasMacro(call) \
84  vtkTemplateAliasMacroCase(DOUBLE, call); \
85  vtkTemplateAliasMacroCase(FLOAT, call); \
86  vtkTemplateAliasMacroCase(LONG_LONG, call); \
87  vtkTemplateAliasMacroCase(UNSIGNED_LONG_LONG, call); \
88  vtkTemplateAliasMacroCase(ID_TYPE, call); \
89  vtkTemplateAliasMacroCase(LONG, call); \
90  vtkTemplateAliasMacroCase(UNSIGNED_LONG, call); \
91  vtkTemplateAliasMacroCase(INT, call); \
92  vtkTemplateAliasMacroCase(UNSIGNED_INT, call); \
93  vtkTemplateAliasMacroCase(SHORT, call); \
94  vtkTemplateAliasMacroCase(UNSIGNED_SHORT, call); \
95  vtkTemplateAliasMacroCase(CHAR, call); \
96  vtkTemplateAliasMacroCase(SIGNED_CHAR, call); \
97  vtkTemplateAliasMacroCase(UNSIGNED_CHAR, call)
98 
99 #endif
100 // VTK-HeaderTest-Exclude: vtkTemplateAliasMacro.h