X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=bash%2FCreateInstances.cxx;fp=bash%2FCreateInstances.cxx;h=0000000000000000000000000000000000000000;hb=2e142df11d6f312a2a2b5097b8da73571ed523e8;hp=a107c265bda12ce4c270fca5266a2275532bb272;hpb=61b3659afe961ed248f30e26f9ca8f28fcfafddc;p=cpPlugins.git diff --git a/bash/CreateInstances.cxx b/bash/CreateInstances.cxx deleted file mode 100644 index a107c26..0000000 --- a/bash/CreateInstances.cxx +++ /dev/null @@ -1,168 +0,0 @@ -#include - -// ------------------------------------------------------------------------- -int main( int argc, char* argv[] ) -{ - // Get inputs - if( argc < 4 ) - { - std::cerr - << "Usage: " << argv[ 0 ] - << " definitons_file library_name output_prefix" - << std::endl; - return( 1 ); - - } // fi - std::string definitions_filename = argv[ 1 ]; - std::string library_name = argv[ 2 ]; - std::string output_prefix = argv[ 3 ]; - unsigned int number_of_sources = cpPlugins_NUMBER_OF_FILES; - - // Read inputs - std::string definitions_buffer; - if( !( cpPlugins_bash::Read( definitions_buffer, definitions_filename ) ) ) - { - std::cerr - << 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" ) ); - - // Expand data - TStrings tfiles, cfiles, instances, minstances; - cpPlugins_bash::Expand( tfiles, definitions, commands, "tinclude" ); - cpPlugins_bash::Expand( cfiles, definitions, commands, "cinclude" ); - cpPlugins_bash::Expand( instances, definitions, commands, "instances" ); - cpPlugins_bash::Expand( minstances, definitions, commands, "minstances" ); - - // Build all instances - TStrings all_instances; - for( auto iIt = instances.begin( ); iIt != instances.end( ); ++iIt ) - { - std::stringstream str; - str << "template class " << library_name << "_EXPORT " << *iIt; - all_instances.push_back( str.str( ) ); - - } // rof - for( auto iIt = minstances.begin( ); iIt != minstances.end( ); ++iIt ) - { - std::stringstream str; - str << "template " << *iIt; - all_instances.push_back( str.str( ) ); - - } // rof - - // Write source code - unsigned int instances_per_file = - ( unsigned int )( - std::floor( double( all_instances.size( ) ) / double( number_of_sources ) ) - ); - if( instances_per_file == 0 ) - instances_per_file = 1; - std::vector< std::vector< std::string > > all_lines( 1 ); - for( unsigned int c_id = 0; c_id < all_instances.size( ); ++c_id ) - { - all_lines[ all_lines.size( ) - 1 ].push_back( all_instances[ c_id ] ); - if( c_id % instances_per_file == instances_per_file - 1 ) - all_lines.push_back( std::vector< std::string >( ) ); - - } // rof - - // Paranoiac code - while( all_lines.size( ) > number_of_sources ) - { - all_lines[ all_lines.size( ) - 2 ].insert( - all_lines[ all_lines.size( ) - 2 ].end( ), - all_lines[ all_lines.size( ) - 1 ].begin( ), - all_lines[ all_lines.size( ) - 1 ].end( ) - ); - all_lines.pop_back( ); - - } // elihw - while( all_lines.size( ) < number_of_sources ) - all_lines.push_back( std::vector< std::string >( ) ); - - // Real write - for( unsigned int f_id = 0; f_id < all_lines.size( ); ++f_id ) - { - std::stringstream source; - source - << "#include <" << library_name << "_Export.h>" - << std::endl; - auto hIt = commands.find( "header" ); - if( hIt != commands.end( ) ) - { - source << std::endl; - for( auto vIt = hIt->second.begin( ); vIt != hIt->second.end( ); ++vIt ) - source << *vIt << std::endl; - source << std::endl; - - } // fi - - if( tfiles.size( ) > 0 ) - { - for( auto tIt = tfiles.begin( ); tIt != tfiles.end( ); ++tIt ) - { - TStrings toks; - cpPlugins_bash::Tokenize( toks, *tIt, ":|" ); - if( toks.size( ) == 3 ) - { - source << "#include <" << toks[ 0 ] << "." << toks[ 1 ] << ">" << std::endl; - source << "#include <" << toks[ 0 ] << "." << toks[ 2 ] << ">" << std::endl; - - } // fi - - } // rof - source << std::endl; - - } // fi - - if( cfiles.size( ) > 0 ) - { - for( auto cIt = cfiles.begin( ); cIt != cfiles.end( ); ++cIt ) - source << "#include <" << *cIt << ">" << std::endl; - source << std::endl; - - } // fi - - for( - auto c_it = all_lines[ f_id ].begin( ); - c_it != all_lines[ f_id ].end( ); - ++c_it - ) - source << *c_it << ";" << std::endl; - source << std::endl << "// eof" << std::endl; - std::stringstream source_file; - source_file - << output_prefix << "_" << f_id << ".cxx"; - if( !( cpPlugins_bash::Write( source.str( ), source_file.str( ) ) ) ) - { - std::cerr << "Error writing source code." << std::endl; - return( 1 ); - - } // fi - - } // rof - return( 0 ); -} - -// eof - $RCSfile$