+++ /dev/null
-#include <bash/Config.h>
-
-// -------------------------------------------------------------------------
-typedef std::deque< std::string > TStrings;
-
-// -------------------------------------------------------------------------
-int main( int argc, char* argv[] )
-{
- // Get inputs
- if( argc < 3 )
- {
- std::cerr
- << "Usage: " << argv[ 0 ]
- << " definitons_file library_name"
- << std::endl;
- return( 1 );
-
- } // fi
- std::string definitions_filename = argv[ 1 ];
- std::string library_name = argv[ 2 ];
-
- // Read inputs
- std::string definitions_buffer;
- if( !( cpPlugins_bash::Read( definitions_buffer, definitions_filename ) ) )
- {
- std::cout
- << argv[ 0 ]
- << ": Error reading definitions file \"" << definitions_filename
- << "\"" << std::endl;
- return( 1 );
-
- } // fi
-
- // Put it in a line-by-line structure
- TStrings definitions_lines;
- cpPlugins_bash::Tokenize( definitions_lines, definitions_buffer, "\n" );
-
- // Parse input file
- TCommands commands;
- cpPlugins_bash::Parse( commands, definitions_lines );
-
- // Load pre-compiled definitions
- cpPlugins_bash::LoadDefinitions( commands );
-
- // Expand definitions
- TCommands definitions;
- cpPlugins_bash::ExpandDefinitions( definitions, commands );
- definitions[ "_export_" ].clear( );
- definitions[ "_export_" ].push_back( library_name + std::string( "_EXPORT" ) );
-
- // Get class data
- std::string class_name = commands[ "class" ][ 0 ];
- std::string namespace_name = commands[ "namespace" ][ 0 ];
- std::string superclass_name = commands[ "superclass" ][ 0 ];
- std::stringstream header;
- header
- << "namespace "
- << namespace_name << std::endl << "{" << std::endl
- << " class "
- << class_name << std::endl
- << " : public " << superclass_name << std::endl
- << " {" << std::endl
- << " public:" << std::endl
- << " typedef " << class_name << " Self;" << std::endl
- << " typedef " << superclass_name << " Superclass;" << std::endl
- << " typedef itk::SmartPointer< Self > Pointer;" << std::endl
- << " typedef itk::SmartPointer< const Self > Pointer;" << std::endl
- << " protected:" << std::endl
- << " " << class_name << "( );" << std::endl
- << " virtual ~" << class_name << "( );" << std::endl
- << " virtual void _GenerateData( ) ITK_OVERRIDE;" << std::endl;
-
- auto inputs = commands.find( "input" );
- std::stringstream template_args, input_args;
- unsigned long id = 0;
- for(
- auto iIt = inputs->second.begin( );
- iIt != inputs->second.end( );
- ++iIt, ++id
- )
- {
- TStrings toks;
- cpPlugins_bash::Tokenize( toks, *iIt, "|" );
- if( iIt == inputs->second.begin( ) )
- {
- template_args << "class _T" << toks[ 2 ];
- input_args << " _T" << toks[ 2 ] << "* input_" << toks[ 2 ];
- }
- else
- {
- template_args << ", class _T" << toks[ 2 ];
- input_args << ", _T" << toks[ 2 ] << "* input_" << toks[ 2 ];
- } // fi
-
- header
- << " template< " << template_args.str( ) << " >" << std::endl
- << " inline void _GD_" << id << "( " << input_args.str( )
- << " );" << std::endl;
-
- } // rof
-
- header
- << " private:" << std::endl
- << " " << class_name << "( const Self& );" << std::endl
- << " Self& operator=( const Self& );" << std::endl;
-
- header
- << " };" << std::endl << std::endl
- << "} // ecapseman" << std::endl;
-
- // Source code
- std::stringstream source;
-
- source
- << namespace_name << "::" << class_name << "::" << std::endl
- << class_name << "( )" << std::endl
- << " : Superclass( )" << std::endl
- << "{" << std::endl
- << "}" << std::endl << std::endl;
-
- source
- << namespace_name << "::" << class_name << "::" << std::endl
- << "~" << class_name << "( )" << std::endl
- << "{" << std::endl
- << "}" << std::endl << std::endl;
-
- source
- << "void " << namespace_name << "::" << class_name << "::" << std::endl
- << "_GenerateData( )" << std::endl
- << "{" << std::endl
- << " auto i = this->Get" << std::endl
- << "}" << std::endl << std::endl;
-
-
- std::cout << source.str( ) << std::endl;
-
- return( 0 );
-}
-
-// eof - $RCSfile$