4 #include <appli/bash/Utility.h>
6 // -------------------------------------------------------------------------
8 std::stringstream& out,
9 const std::vector< std::string >& defs
12 if( defs.size( ) > 0 )
14 for( unsigned int k = 0; k < defs.size( ); ++k )
16 std::string cast_str = "dynamic_cast< ";
17 cast_str += defs[ k ];
18 cast_str += "* >( _obj )";
21 << " if( " << cast_str << " != NULL ) \\" << std::endl
22 << " this->_fun( " << cast_str << " )";
25 << " else if( " << cast_str << " != NULL ) \\" << std::endl
26 << " this->_fun( " << cast_str << " )";
27 if( k < defs.size( ) - 1 )
36 // -------------------------------------------------------------------------
38 std::stringstream& out,
39 const std::string& macro,
40 const std::vector< std::string >& dims
43 for( unsigned int k = 0; k < dims.size( ); ++k )
47 << " " << macro << dims[ k ] << " )";
50 << " else " << macro << dims[ k ] << " )";
51 if( k < dims.size( ) - 1 )
58 // -------------------------------------------------------------------------
59 int main( int argc, char* argv[] )
61 // Get parameters from input
65 << "Usage: " << argv[ 0 ]
66 << " output_filename" << std::endl;
70 std::string output_filename = argv[ 1 ];
71 std::stringstream out;
73 out << "#ifndef __cpPlugins__DEMANGLEBASE_MACROS__h__" << std::endl;
74 out << "#define __cpPlugins__DEMANGLEBASE_MACROS__h__" << std::endl << std::endl;
77 std::vector< std::string > int_types, real_types, process_dims, visual_dims;
78 cpPlugins_bash::Tokenize( int_types, "@cpPlugins_INTEGER_TYPES@", ";" );
79 cpPlugins_bash::Tokenize( real_types, "@cpPlugins_REAL_TYPES@", ";" );
80 cpPlugins_bash::Tokenize( process_dims, "@cpPlugins_PROCESS_DIMENSIONS@", ";" );
81 cpPlugins_bash::Tokenize( visual_dims, "@cpPlugins_VISUAL_DIMENSIONS@", ";" );
84 std::string op = "itk::ImageBase< ";
85 std::string cl = " >";
86 std::vector< std::string > process_dims_tokens;
87 for( auto i = process_dims.begin( ); i != process_dims.end( ); ++i )
88 process_dims_tokens.push_back( op + *i + cl );
91 << "#define cpPlugins_Demangle_ImageProcessDims( _obj, _fun ) \\"
93 Output( out, process_dims_tokens );
97 std::vector< std::string > visual_dims_tokens;
98 for( auto i = visual_dims.begin( ); i != visual_dims.end( ); ++i )
99 visual_dims_tokens.push_back( op + *i + cl );
101 << "#define cpPlugins_Demangle_ImageVisualDims( _obj, _fun ) \\"
103 Output( out, visual_dims_tokens );
109 std::vector< std::string > int_tokens;
110 for( auto i = int_types.begin( ); i != int_types.end( ); ++i )
112 int_tokens.push_back( op + *i + cl );
113 int_tokens.push_back( op + std::string( "unsigned " ) + *i + cl );
117 << "#define cpPlugins_Demangle_ImageIntegers( _obj, _fun, _dim ) \\"
119 Output( out, int_tokens );
122 << "#define cpPlugins_Demangle_ImageIntegers_Dims( _obj, _fun ) \\"
124 Dims( out, "cpPlugins_Demangle_ImageIntegers( _obj, _fun, ", process_dims );
128 std::vector< std::string > real_tokens;
129 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
130 real_tokens.push_back( op + *i + cl );
132 << "#define cpPlugins_Demangle_ImageReals( _obj, _fun, _dim ) \\"
134 Output( out, real_tokens );
137 << "#define cpPlugins_Demangle_ImageReals_Dims( _obj, _fun ) \\"
139 Dims( out, "cpPlugins_Demangle_ImageReals( _obj, _fun, ", process_dims );
143 op = "itk::Image< std::complex< ";
145 std::vector< std::string > complex_tokens;
146 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
147 complex_tokens.push_back( op + *i + cl );
149 << "#define cpPlugins_Demangle_ImageComplexes( _obj, _fun, _dim ) \\"
151 Output( out, complex_tokens );
154 << "#define cpPlugins_Demangle_ImageComplexes_Dims( _obj, _fun ) \\"
156 Dims( out, "cpPlugins_Demangle_ImageComplexes( _obj, _fun, ", process_dims );
160 op = "itk::Image< itk::RGBPixel< ";
162 std::vector< std::string > color_tokens;
163 for( auto i = int_types.begin( ); i != int_types.end( ); ++i )
164 color_tokens.push_back( op + *i + cl );
165 for( auto i = int_types.begin( ); i != int_types.end( ); ++i )
166 color_tokens.push_back( op + std::string( "unsigned " ) + *i + cl );
167 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
168 color_tokens.push_back( op + *i + cl );
169 op = "itk::Image< itk::RGBAPixel< ";
170 for( auto i = int_types.begin( ); i != int_types.end( ); ++i )
171 color_tokens.push_back( op + *i + cl );
172 for( auto i = int_types.begin( ); i != int_types.end( ); ++i )
173 color_tokens.push_back( op + std::string( "unsigned " ) + *i + cl );
174 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
175 color_tokens.push_back( op + *i + cl );
177 << "#define cpPlugins_Demangle_ImageColors( _obj, _fun, _dim ) \\"
179 Output( out, color_tokens );
182 << "#define cpPlugins_Demangle_ImageColors_Dims( _obj, _fun ) \\"
184 Dims( out, "cpPlugins_Demangle_ImageColors( _obj, _fun, ", process_dims );
188 op = "itk::Image< itk::FixedArray< ";
189 cl = ", _dim >, _dim >";
190 std::vector< std::string > fixedarray_tokens;
191 for( auto i = int_types.begin( ); i != int_types.end( ); ++i )
192 fixedarray_tokens.push_back( op + *i + cl );
193 for( auto i = int_types.begin( ); i != int_types.end( ); ++i )
194 fixedarray_tokens.push_back( op + "unsigned " + *i + cl );
195 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
196 fixedarray_tokens.push_back( op + *i + cl );
198 << "#define cpPlugins_Demangle_ImageFixedArrays( _obj, _fun, _dim ) \\"
200 Output( out, fixedarray_tokens );
203 << "#define cpPlugins_Demangle_ImageFixedArrays_Dims( _obj, _fun ) \\"
205 Dims( out, "cpPlugins_Demangle_ImageFixedArrays( _obj, _fun, ", process_dims );
209 op = "itk::Image< itk::CovariantVector< ";
210 cl = ", _dim >, _dim >";
211 std::vector< std::string > cov_tokens;
212 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
213 cov_tokens.push_back( op + *i + cl );
215 << "#define cpPlugins_Demangle_ImageCovariantVectors( _obj, _fun, _dim ) \\"
217 Output( out, cov_tokens );
220 << "#define cpPlugins_Demangle_ImageCovariantVectors_Dims( _obj, _fun ) \\"
223 out, "cpPlugins_Demangle_ImageCovariantVectors( _obj, _fun, ", process_dims
228 op = "itk::Image< itk::Vector< ";
229 cl = ", _dim >, _dim >";
230 std::vector< std::string > vec_tokens;
231 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
232 vec_tokens.push_back( op + *i + cl );
234 << "#define cpPlugins_Demangle_ImageVectors( _obj, _fun, _dim ) \\"
236 Output( out, vec_tokens );
239 << "#define cpPlugins_Demangle_ImageVectors_Dims( _obj, _fun ) \\"
241 Dims( out, "cpPlugins_Demangle_ImageVectors( _obj, _fun, ", process_dims );
245 op = "itk::Image< itk::Point< ";
246 cl = ", _dim >, _dim >";
247 std::vector< std::string > pnt_tokens;
248 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
249 pnt_tokens.push_back( op + *i + cl );
251 << "#define cpPlugins_Demangle_ImagePoints( _obj, _fun, _dim ) \\"
253 Output( out, pnt_tokens );
256 << "#define cpPlugins_Demangle_ImagePoints_Dims( _obj, _fun ) \\"
258 Dims( out, "cpPlugins_Demangle_ImagePoints( _obj, _fun, ", process_dims );
262 op = "itk::Image< itk::SymmetricSecondRankTensor< ";
263 cl = ", _dim >, _dim >";
264 std::vector< std::string > sym_tokens;
265 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
266 sym_tokens.push_back( op + *i + cl );
268 << "#define cpPlugins_Demangle_ImageSymmetricSecondRankTensors( _obj, _fun, _dim ) \\"
270 Output( out, sym_tokens );
273 << "#define cpPlugins_Demangle_ImageSymmetricSecondRankTensors_Dims( _obj, _fun ) \\"
275 Dims( out, "cpPlugins_Demangle_ImageSymmetricSecondRankTensors( _obj, _fun, ", process_dims );
279 op = "itk::Image< itk::DiffusionTensor3D< ";
281 std::vector< std::string > diff_tokens;
282 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
283 diff_tokens.push_back( op + *i + cl );
285 << "#define cpPlugins_Demangle_ImageDiffusionTensors3D( _obj, _fun ) \\"
287 Output( out, diff_tokens );
291 op = "itk::Image< itk::Matrix< ";
292 cl = ", _dim, _dim >, _dim >";
293 std::vector< std::string > mat_tokens;
294 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
295 mat_tokens.push_back( op + *i + cl );
297 << "#define cpPlugins_Demangle_ImageMatrices( _obj, _fun, _dim ) \\"
299 Output( out, mat_tokens );
302 << "#define cpPlugins_Demangle_ImageMatrices_Dims( _obj, _fun ) \\"
304 Dims( out, "cpPlugins_Demangle_ImageMatrices( _obj, _fun, ", process_dims );
308 op = "itk::Image< itk::Offset< ";
310 std::vector< std::string > off_tokens;
311 for( auto i = process_dims.begin( ); i != process_dims.end( ); ++i )
312 off_tokens.push_back( op + *i + cl );
314 << "#define cpPlugins_Demangle_ImageOffsets( _obj, _fun ) \\"
316 Output( out, off_tokens );
322 std::vector< std::string > mesh_tokens;
323 for( auto i = real_types.begin( ); i != real_types.end( ); ++i )
324 mesh_tokens.push_back( op + *i + cl );
326 << "#define cpPlugins_Demangle_Meshes( _obj, _fun, _dim ) \\"
328 Output( out, mesh_tokens );
331 << "#define cpPlugins_Demangle_Meshes_Dims( _obj, _fun ) \\"
333 Dims( out, "cpPlugins_Demangle_Meshes( _obj, _fun, ", visual_dims );
337 out << "#endif // __cpPlugins__DEMANGLEBASE_MACROS__h__" << std::endl << std::endl;
339 if( !( cpPlugins_bash::Write( out.str( ), output_filename ) ) )
341 std::cerr << "Error writing header" << std::endl;