- std::string buf;
- file_stream.seekg( 0, std::ios::end );
- buf.reserve( file_stream.tellg( ) );
- file_stream.seekg( 0, std::ios::beg );
- buf.assign(
- ( std::istreambuf_iterator< char >( file_stream ) ),
- std::istreambuf_iterator< char >( )
- );
- file_stream.close( );
- std::istringstream input_str( buf );
-
- // Process file
- std::string line;
- TVector incl, first_incl;
- TInstances instances;
- TVector classes;
- while( std::getline( input_str, line ) )
- {
- if( line[ 0 ] == 'f' )
- {
- first_incl.push_back( line.substr( line.find_first_not_of( ' ', 1 ) ) );
- }
- else if( line[ 0 ] == 'i' )
- {
- incl.push_back( line.substr( line.find_first_not_of( ' ', 1 ) ) );
- }
- else if( line[ 0 ] == 'c' )
- {
- classes.push_back( line.substr( line.find_first_not_of( ' ', 1 ) ) );
- }
- else if( line[ 0 ] == 'a' )
- {
- TVector tokens = Tokenize( line, "=" );
-
- // Get argument name
- TVector arg_tokens = Tokenize( tokens[ 0 ], " " );
- std::string arg = arg_tokens[ 0 ];
- unsigned int i = 0;
- while( arg[ 0 ] != '#' && i < arg_tokens.size( ) )
- arg = arg_tokens[ ++i ];
-
- // Get values
- TVector values_tokens = Tokenize( tokens[ 1 ], ";" );
- for( auto t = values_tokens.begin( ); t != values_tokens.end( ); ++t )
- {
- std::string value = t->substr( t->find_first_not_of( ' ' ) );
- unsigned int value_len = value.size( );
- while( value[ value_len - 1 ] == ' ' && value_len > 0 )
- value_len--;
- value = value.substr( 0, value_len );
-
- if( value == "#integers" )
- {
- instances[ arg ].insert( "char" );
- instances[ arg ].insert( "short" );
- instances[ arg ].insert( "int" );
- instances[ arg ].insert( "long" );
- instances[ arg ].insert( "unsigned char" );
- instances[ arg ].insert( "unsigned short" );
- instances[ arg ].insert( "unsigned int" );
- instances[ arg ].insert( "unsigned long" );
- }
- else if( value == "#integers_ptr" )
- {
- instances[ arg ].insert( "char*" );
- instances[ arg ].insert( "short*" );
- instances[ arg ].insert( "int*" );
- instances[ arg ].insert( "long*" );
- instances[ arg ].insert( "unsigned char*" );
- instances[ arg ].insert( "unsigned short*" );
- instances[ arg ].insert( "unsigned int*" );
- instances[ arg ].insert( "unsigned long*" );
- }
- else if( value == "#floats" )
- {
- instances[ arg ].insert( "double" );
- instances[ arg ].insert( "float" );
- }
- else if( value == "#floats_ptr" )
- {
- instances[ arg ].insert( "double*" );
- instances[ arg ].insert( "float*" );
- }
- else if( value == "#all_dims" )
- {
- instances[ arg ].insert( "1" );
- instances[ arg ].insert( "2" );
- instances[ arg ].insert( "3" );
- instances[ arg ].insert( "4" );
- }
- else if( value == "#all_visual_dims" )
- {
- instances[ arg ].insert( "2" );
- instances[ arg ].insert( "3" );
- }
- else
- instances[ arg ].insert( value );
-
- } // rof