MeVisLab Toolbox Reference
mlWrapperMacros.h
Go to the documentation of this file.
1
/*************************************************************************************
2
**
3
** Copyright 2007, MeVis Medical Solutions AG
4
**
5
** The user may use this file in accordance with the license agreement provided with
6
** the Software or, alternatively, in accordance with the terms contained in a
7
** written agreement between the user and MeVis Medical Solutions AG.
8
**
9
** For further information use the contact form at https://www.mevislab.de/contact
10
**
11
**************************************************************************************/
12
13
#ifndef ML_WRAPPER_MACROS_H
14
#define ML_WRAPPER_MACROS_H
15
16
49
51
#ifndef ML_EMPTY_SPACE
52
#define ML_EMPTY_SPACE
53
#endif
54
55
79
#define IMPLEMENT_DIM_DISPATCHER_P0(FUNC_NAME, CLASS_NAME, RET_TYPE, RET_COMMAND) \
80
/* Create function type.*/
\
81
typedef RET_TYPE(*FUNC_NAME##TYPE)(CLASS_NAME *obj); \
82
\
83
/* Implement a member used to call the selected function. */
\
84
FUNC_NAME##TYPE FUNC_NAME; \
85
\
86
/* Implement 6 static functions where one is really selected by calling FUNC_NAME. */
\
87
static inline RET_TYPE FUNC_NAME##1DCB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##1D(); } \
88
static inline RET_TYPE FUNC_NAME##2DCB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##2D(); } \
89
static inline RET_TYPE FUNC_NAME##3DCB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##3D(); } \
90
static inline RET_TYPE FUNC_NAME##4DCB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##4D(); } \
91
static inline RET_TYPE FUNC_NAME##5DCB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##5D(); } \
92
static inline RET_TYPE FUNC_NAME##6DCB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##6D(); } \
93
\
94
/* Implement a switch to set the correct function for the correct dimension extent. */
\
95
void _init##FUNC_NAME##TYPE(MLint dim){ \
96
switch (dim){ \
97
case 1: FUNC_NAME = FUNC_NAME##1DCB; break; \
98
case 2: FUNC_NAME = FUNC_NAME##2DCB; break; \
99
case 3: FUNC_NAME = FUNC_NAME##3DCB; break; \
100
case 4: FUNC_NAME = FUNC_NAME##4DCB; break; \
101
case 5: FUNC_NAME = FUNC_NAME##5DCB; break; \
102
case 6: FUNC_NAME = FUNC_NAME##6DCB; break; \
103
default: ML_PRINT_FATAL_ERROR("IMPLEMENT_DIM_DISPATCHER_P0", ML_PROGRAMMING_ERROR, \
104
"Using 6d implementation."); \
105
} \
106
}
107
112
#define IMPLEMENT_DIM_DISPATCHER_P1(FUNC_NAME, CLASS_NAME, RET_TYPE, RET_COMMAND, P_TYPE) \
113
/* Create function type.*/
\
114
typedef RET_TYPE(*FUNC_NAME##TYPE)(CLASS_NAME *obj, P_TYPE p); \
115
\
116
/* Implement a member used to call the selected function. */
\
117
FUNC_NAME##TYPE FUNC_NAME; \
118
\
119
/* Implement 6 static functions where one is really selected by calling FUNC_NAME. */
\
120
static inline RET_TYPE FUNC_NAME##1DCB(CLASS_NAME *obj, P_TYPE p){RET_COMMAND obj->FUNC_NAME##1D(p);} \
121
static inline RET_TYPE FUNC_NAME##2DCB(CLASS_NAME *obj, P_TYPE p){RET_COMMAND obj->FUNC_NAME##2D(p);} \
122
static inline RET_TYPE FUNC_NAME##3DCB(CLASS_NAME *obj, P_TYPE p){RET_COMMAND obj->FUNC_NAME##3D(p);} \
123
static inline RET_TYPE FUNC_NAME##4DCB(CLASS_NAME *obj, P_TYPE p){RET_COMMAND obj->FUNC_NAME##4D(p);} \
124
static inline RET_TYPE FUNC_NAME##5DCB(CLASS_NAME *obj, P_TYPE p){RET_COMMAND obj->FUNC_NAME##5D(p);} \
125
static inline RET_TYPE FUNC_NAME##6DCB(CLASS_NAME *obj, P_TYPE p){RET_COMMAND obj->FUNC_NAME##6D(p);} \
126
\
127
/* Implement a switch to set the correct function for the correct dimension extent. */
\
128
void _init##FUNC_NAME##TYPE(MLint dim){ \
129
switch (dim){ \
130
case 1: FUNC_NAME = FUNC_NAME##1DCB; break; \
131
case 2: FUNC_NAME = FUNC_NAME##2DCB; break; \
132
case 3: FUNC_NAME = FUNC_NAME##3DCB; break; \
133
case 4: FUNC_NAME = FUNC_NAME##4DCB; break; \
134
case 5: FUNC_NAME = FUNC_NAME##5DCB; break; \
135
case 6: FUNC_NAME = FUNC_NAME##6DCB; break; \
136
default: ML_PRINT_FATAL_ERROR("IMPLEMENT_DIM_DISPATCHER_P1", ML_PROGRAMMING_ERROR, \
137
"Using 6d implementation."); \
138
} \
139
}
140
141
166
#define IMPLEMENT_EXC_DISPATCHER_P0(FUNC_NAME, CLASS_NAME, RET_TYPE, RET_COMMAND) \
167
/* Create function type.*/
\
168
typedef RET_TYPE(*FUNC_NAME##TYPE)(CLASS_NAME *obj); \
169
\
170
/* Implement one function pointer for each dimension. */
\
171
/* They will be set to the normal or the exception version. */
\
172
FUNC_NAME##TYPE FUNC_NAME##1; \
173
FUNC_NAME##TYPE FUNC_NAME##2; \
174
FUNC_NAME##TYPE FUNC_NAME##3; \
175
FUNC_NAME##TYPE FUNC_NAME##4; \
176
FUNC_NAME##TYPE FUNC_NAME##5; \
177
FUNC_NAME##TYPE FUNC_NAME##6; \
178
\
179
/* Implement 6 static functions where one is really selected by calling FUNC_NAME. */
\
180
static inline RET_TYPE FUNC_NAME##1##CB (CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##1N ();} \
181
static inline RET_TYPE FUNC_NAME##2##CB (CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##2N ();} \
182
static inline RET_TYPE FUNC_NAME##3##CB (CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##3N ();} \
183
static inline RET_TYPE FUNC_NAME##4##CB (CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##4N ();} \
184
static inline RET_TYPE FUNC_NAME##5##CB (CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##5N ();} \
185
static inline RET_TYPE FUNC_NAME##6##CB (CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##6N ();} \
186
\
187
static inline RET_TYPE FUNC_NAME##1E##CB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##1E();} \
188
static inline RET_TYPE FUNC_NAME##2E##CB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##2E();} \
189
static inline RET_TYPE FUNC_NAME##3E##CB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##3E();} \
190
static inline RET_TYPE FUNC_NAME##4E##CB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##4E();} \
191
static inline RET_TYPE FUNC_NAME##5E##CB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##5E();} \
192
static inline RET_TYPE FUNC_NAME##6E##CB(CLASS_NAME *obj){ RET_COMMAND obj->FUNC_NAME##6E();} \
193
\
194
/* Implement a switch to set the correct function for the correct dimension extent. */
\
195
void _init##FUNC_NAME##TYPE(bool useExceptions){ \
196
/* Set function pointers to the code of the corresponding static functions. */
\
197
/* If exception handling is enabled then use the exception version otherwise the normal version. */
\
198
FUNC_NAME##1 = useExceptions ? FUNC_NAME##1E##CB : FUNC_NAME##1##CB; \
199
FUNC_NAME##2 = useExceptions ? FUNC_NAME##2E##CB : FUNC_NAME##2##CB; \
200
FUNC_NAME##3 = useExceptions ? FUNC_NAME##3E##CB : FUNC_NAME##3##CB; \
201
FUNC_NAME##4 = useExceptions ? FUNC_NAME##4E##CB : FUNC_NAME##4##CB; \
202
FUNC_NAME##5 = useExceptions ? FUNC_NAME##5E##CB : FUNC_NAME##5##CB; \
203
FUNC_NAME##6 = useExceptions ? FUNC_NAME##6E##CB : FUNC_NAME##6##CB; \
204
}
205
206
207
#endif
// __mlWrapperMacros_H
MeVisLab
Standard
Sources
ML
MLTools
include
mlWrapperMacros.h
Generated by
1.10.0