diff --git a/src/Benchmarks/BLAS/spmv.h b/src/Benchmarks/BLAS/spmv.h index 9df40f4ec6b0db6d8d268dd5d38cef92b9fc61c8..5c3813b0a9f1798582ce2ee8a04f52ae4ee78408 100644 --- a/src/Benchmarks/BLAS/spmv.h +++ b/src/Benchmarks/BLAS/spmv.h @@ -14,7 +14,6 @@ #include "../Benchmarks.h" -#include <TNL/Containers/List.h> #include <TNL/Pointers/DevicePointer.h> #include <TNL/Matrices/CSR.h> #include <TNL/Matrices/Ellpack.h> @@ -111,8 +110,7 @@ benchmarkSpMV( Benchmark & benchmark, CudaVector deviceVector, deviceVector2; // create benchmark group - Containers::List< String > parsedType; - parseObjectType( HostMatrix::getType(), parsedType ); + const std::vector< String > parsedType = parseObjectType( HostMatrix::getType() ); #ifdef HAVE_CUDA benchmark.createHorizontalGroup( parsedType[ 0 ], 2 ); #else diff --git a/src/TNL/Config/ConfigEntryList.h b/src/TNL/Config/ConfigEntryList.h index 95879fa663e1124f2ea960258eaf236313a56ffe..50284e37c1195916ab5c2ccfd3f72dd4d6ed7ed8 100644 --- a/src/TNL/Config/ConfigEntryList.h +++ b/src/TNL/Config/ConfigEntryList.h @@ -50,7 +50,7 @@ struct ConfigEntryList : public ConfigEntryBase String getEntryType() const { - return String("List< ") + TNL::getType< EntryType >() + " >"; + return String("ConfigEntryList< ") + TNL::getType< EntryType >() + " >"; } String getUIEntryType() const diff --git a/src/TNL/Config/ParameterContainer.cpp b/src/TNL/Config/ParameterContainer.cpp index 5329a8745117fecd0b5b1eeb05e30549080827a4..f318acabb45c046dc2b07023f4fbe2d66d691218 100644 --- a/src/TNL/Config/ParameterContainer.cpp +++ b/src/TNL/Config/ParameterContainer.cpp @@ -155,41 +155,27 @@ parseCommandLine( int argc, char* argv[], std::cerr << "Missing value for the parameter " << option << "." << std::endl; return false; } - Containers::List< String > parsedEntryType; - if( ! parseObjectType( entryType, parsedEntryType ) ) + std::vector< String > parsedEntryType = parseObjectType( entryType ); + if( parsedEntryType.size() == 0 ) { std::cerr << "Internal error: Unknown config entry type " << entryType << "." << std::endl; return false; } - if( parsedEntryType[ 0 ] == "Containers::List" ) + if( parsedEntryType[ 0 ] == "ConfigEntryList" ) { - Containers::List< String >* string_list( 0 ); - Containers::List< bool >* bool_list( 0 ); - Containers::List< int >* integer_list( 0 ); - Containers::List< double >* real_list( 0 ); + std::vector< String > string_list; + std::vector< bool > bool_list; + std::vector< int > integer_list; + std::vector< double > real_list; - if( parsedEntryType[ 1 ] == "String" ) - string_list = new Containers::List< String >; - if( parsedEntryType[ 1 ] == "bool" ) - bool_list = new Containers::List< bool >; - if( parsedEntryType[ 1 ] == "int" ) - integer_list = new Containers::List< int >; - if( parsedEntryType[ 1 ] == "double" ) - real_list = new Containers::List< double >; - - while( i < argc && ( ( argv[ i ] )[ 0 ] != '-' || ( atof( argv[ i ] ) < 0.0 && ( integer_list || real_list ) ) ) ) + while( i < argc && ( ( argv[ i ] )[ 0 ] != '-' || ( atof( argv[ i ] ) < 0.0 && ( parsedEntryType[ 1 ] == "int" || parsedEntryType[ 1 ] == "double" ) ) ) ) { const char* value = argv[ i ++ ]; - if( string_list ) + if( parsedEntryType[ 1 ] == "String" ) { - /*if( ! ( ( ConfigEntry< Containers::List< String > >* ) entry )->checkValue( String( value ) ) ) - { - delete string_list; - return false; - }*/ - string_list -> Append( String( value ) ); + string_list.push_back( String( value ) ); } - if( bool_list ) + if( parsedEntryType[ 1 ] == "bool" ) { bool bool_val; if( ! matob( value, bool_val ) ) @@ -197,47 +183,25 @@ parseCommandLine( int argc, char* argv[], std::cerr << "Yes/true or no/false is required for the parameter " << option << "." << std::endl; parse_error = true; } - else bool_list -> Append( bool_val ); + else bool_list.push_back( bool_val ); } - if( integer_list ) + if( parsedEntryType[ 1 ] == "int" ) { - /*if( ! ( ConfigEntry< Containers::List< int > >* ) entry->checkValue( atoi( value ) ) ) - { - delete integer_list; - return false; - }*/ - integer_list -> Append( atoi( value ) ); + integer_list.push_back( atoi( value ) ); } - if( real_list ) + if( parsedEntryType[ 1 ] == "double" ) { - /*if( ! ( ConfigEntry< Containers::List< double > >* ) entry->checkValue( atof( value ) ) ) - { - delete real_list; - return false; - }*/ - real_list -> Append( atof( value ) ); + real_list.push_back( atof( value ) ); } } - if( string_list ) - { - parameters.addParameter< Containers::List< String > >( option, *string_list ); - delete string_list; - } - if( bool_list ) - { - parameters.addParameter< Containers::List< bool > >( option, *bool_list ); - delete bool_list; - } - if( integer_list ) - { - parameters.addParameter< Containers::List< int > >( option, *integer_list ); - delete integer_list; - } - if( real_list ) - { - parameters.addParameter< Containers::List< double > >( option, *real_list ); - delete real_list; - } + if( string_list.size() ) + parameters.addParameter< std::vector< String > >( option, string_list ); + if( bool_list.size() ) + parameters.addParameter< std::vector< bool > >( option, bool_list ); + if( integer_list.size() ) + parameters.addParameter< std::vector< int > >( option, integer_list ); + if( real_list.size() ) + parameters.addParameter< std::vector< double > >( option, real_list ); if( i < argc ) i --; continue; } diff --git a/src/TNL/Meshes/Readers/TNLReader.h b/src/TNL/Meshes/Readers/TNLReader.h index ba602b0f97fda13115b171a46d9a3dd4d884c835..68f4d13a21c99bb2ce93bd6e0bdf2f0e32f1bcf4 100644 --- a/src/TNL/Meshes/Readers/TNLReader.h +++ b/src/TNL/Meshes/Readers/TNLReader.h @@ -12,7 +12,6 @@ #include <TNL/String.h> #include <TNL/Object.h> -#include <TNL/Containers/List.h> #include <TNL/Meshes/Readers/EntityShape.h> namespace TNL { @@ -34,8 +33,8 @@ public: return EXIT_FAILURE; } - Containers::List< String > parsedMeshType; - if( ! parseObjectType( objectType, parsedMeshType ) ) { + const std::vector< String > parsedMeshType = parseObjectType( objectType ); + if( ! parsedMeshType.size() ) { std::cerr << "Unable to parse the mesh type " << meshType << "." << std::endl; return false; } @@ -55,14 +54,17 @@ public: cellShape = EntityShape::Hexahedron; } else if( meshType == "Meshes::Mesh" ) { - Containers::List< String > parsedMeshConfig; - if( ! parseObjectType( parsedMeshType[ 1 ], parsedMeshConfig ) ) { + const std::vector< String > parsedMeshConfig = parseObjectType( parsedMeshType[ 1 ] ); + if( ! parsedMeshConfig.size() ) { std::cerr << "Unable to parse the mesh config type " << parsedMeshType[ 1 ] << "." << std::endl; return false; } - if( parsedMeshConfig.getSize() != 7 ) { - std::cerr << "The parsed mesh config type has wrong size (expected 7 elements):" << std::endl - << parsedMeshConfig << std::endl; + if( parsedMeshConfig.size() != 7 ) { + std::cerr << "The parsed mesh config type has wrong size (expected 7 elements):" << std::endl; + std::cerr << "[ "; + for( std::size_t i = 0; i < parsedMeshConfig.size() - 1; i++ ) + std::cerr << parsedMeshConfig[ i ] << ", "; + std::cerr << parsedMeshConfig.back() << " ]" << std::endl; return false; } diff --git a/src/TNL/Object.cpp b/src/TNL/Object.cpp index e83b2d0d78a99dc9e8378752c970a97a87cd558b..c0cc9a446c4a5b89be4e3ae24fac075279f8a2cd 100644 --- a/src/TNL/Object.cpp +++ b/src/TNL/Object.cpp @@ -130,11 +130,11 @@ bool getObjectType( const String& fileName, String& type ) return getObjectType( binaryFile, type ); } -bool parseObjectType( const String& objectType, - Containers::List< String >& parsedObjectType ) +std::vector< String > +parseObjectType( const String& objectType ) { - parsedObjectType.reset(); - int objectTypeLength = objectType. getLength(); + std::vector< String > parsedObjectType; + const int objectTypeLength = objectType.getLength(); int i = 0; /**** * The object type consists of the following: @@ -143,11 +143,10 @@ bool parseObjectType( const String& objectType, * character '<'. */ while( i < objectTypeLength && objectType[ i ] != '<' ) - i ++; - String objectName( objectType. getString(), 0, objectTypeLength - i ); - if( ! parsedObjectType. Append( objectName ) ) - return false; - i ++; + i++; + String objectName( objectType.getString(), 0, objectTypeLength - i ); + parsedObjectType.push_back( objectName ); + i++; /**** * Now, we will extract the parameters. @@ -160,7 +159,7 @@ bool parseObjectType( const String& objectType, while( i < objectTypeLength ) { if( objectType[ i ] == '<' ) - templateBrackets ++; + templateBrackets++; if( ! templateBrackets ) { if( objectType[ i ] == ',' || @@ -168,19 +167,19 @@ bool parseObjectType( const String& objectType, { if( buffer != "" ) { - if( ! parsedObjectType. Append( buffer.strip( ' ' ) ) ) - return false; - buffer. setString( "" ); + parsedObjectType.push_back( buffer.strip( ' ' ) ); + buffer.setString( "" ); } } else buffer += objectType[ i ]; } else buffer += objectType[ i ]; if( objectType[ i ] == '>' ) - templateBrackets --; - i ++; + templateBrackets--; + i++; } - return true; + + return parsedObjectType; } } // namespace TNL diff --git a/src/TNL/Object.h b/src/TNL/Object.h index 405bcd76d05ec1bafcfad6ed71bc04280f3d1659..e4fd274f89b28e9e9f7ad86ea50f83d72260fa85 100644 --- a/src/TNL/Object.h +++ b/src/TNL/Object.h @@ -10,10 +10,11 @@ #pragma once +#include <vector> + #include <TNL/Devices/CudaCallable.h> #include <TNL/String.h> #include <TNL/File.h> -#include <TNL/Containers/List.h> namespace TNL { @@ -108,7 +109,7 @@ bool getObjectType( File& file, String& type ); bool getObjectType( const String& file_name, String& type ); -bool parseObjectType( const String& objectType, - Containers::List< String >& parsedObjectType ); +std::vector< String > +parseObjectType( const String& objectType ); } // namespace TNL diff --git a/src/TNL/param-types.h b/src/TNL/param-types.h index 58445912f24b1bd9c5e6efc4aeb670d3ccf44c2f..e7552d84891126b08251a99b5618341c9019f20b 100644 --- a/src/TNL/param-types.h +++ b/src/TNL/param-types.h @@ -8,7 +8,9 @@ /* See Copyright Notice in tnl/Copyright */ -#pragma once +#pragma once + +#include <vector> #include <TNL/Experimental/Arithmetics/Real.h> #include <TNL/String.h> @@ -16,7 +18,27 @@ namespace TNL { template< typename T > -String getType() { return T::getType(); } +String getType(); + +namespace __getType_impl { + +template< typename T > +struct getTypeHelper +{ + static String get() { return T::getType(); } +}; + +// wrappers for STL containers +template< typename T > +struct getTypeHelper< std::vector< T > > +{ + static String get() { return String( "std::vector< " ) + TNL::getType< T >() + " >"; } +}; + +} // namespace __getType_impl + +template< typename T > +String getType() { return __getType_impl::getTypeHelper< T >::get(); } // non-const specializations template<> inline String getType< void >() { return String( "void" ); } diff --git a/src/Tools/tnl-diff.cpp b/src/Tools/tnl-diff.cpp index 611cd53f4a03e58bc076fea1f54896c9b80ff6ed..360423de72b98ff0d49c54fd04bd4f068773c915 100644 --- a/src/Tools/tnl-diff.cpp +++ b/src/Tools/tnl-diff.cpp @@ -15,7 +15,7 @@ void setupConfig( Config::ConfigDescription& config ) { config.addEntry< String >( "mesh", "Input mesh file.", "mesh.tnl" ); - config.addRequiredEntry< Containers::List< String > >( "input-files", "The first set of the input files." ); + config.addRequiredList< String >( "input-files", "The first set of the input files." ); config.addEntry< String >( "output-file", "File for the output data.", "tnl-diff.log" ); config.addEntry< String >( "mode", "Mode 'couples' compares two subsequent files. Mode 'sequence' compares the input files against the first one. 'halves' compares the files from the and the second half of the intput files.", "couples" ); config.addEntryEnum< String >( "couples" ); @@ -42,7 +42,6 @@ int main( int argc, char* argv[] ) return 1; } - int verbose = parameters.getParameter< int >( "verbose" ); String meshFile = parameters.getParameter< String >( "mesh" ); /*if( meshFile == "" ) { @@ -57,8 +56,8 @@ int main( int argc, char* argv[] ) return EXIT_FAILURE; } std::cout << meshType << " detected in " << meshFile << " file." << std::endl; - Containers::List< String > parsedMeshType; - if( ! parseObjectType( meshType, parsedMeshType ) ) + const std::vector< String > parsedMeshType = parseObjectType( meshType ); + if( ! parsedMeshType.size() ) { std::cerr << "Unable to parse the mesh type " << meshType << "." << std::endl; return EXIT_FAILURE; @@ -66,7 +65,7 @@ int main( int argc, char* argv[] ) if( parsedMeshType[ 0 ] == "Meshes::Grid" || parsedMeshType[ 0 ] == "tnlGrid" ) // TODO: remove deprecated type name { - int dimensions = atoi( parsedMeshType[ 1 ].getString() ); + const int dimensions = atoi( parsedMeshType[ 1 ].getString() ); if( dimensions == 1 ) if( ! resolveGridRealType< 1 >( parsedMeshType, parameters ) ) return EXIT_FAILURE; diff --git a/src/Tools/tnl-diff.h b/src/Tools/tnl-diff.h index b070d0dfeb92980ce9c98b837dbde9782062b7f6..47d058de1695bc85ef05f47ee288a3140de3b564 100644 --- a/src/Tools/tnl-diff.h +++ b/src/Tools/tnl-diff.h @@ -24,7 +24,7 @@ template< typename MeshPointer, typename Value, typename Real, typename Index > bool computeDifferenceOfMeshFunctions( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters ) { bool verbose = parameters. getParameter< bool >( "verbose" ); - Containers::List< String > inputFiles = parameters. getParameter< Containers::List< String > >( "input-files" ); + std::vector< String > inputFiles = parameters. getParameter< std::vector< String > >( "input-files" ); String mode = parameters. getParameter< String >( "mode" ); String outputFileName = parameters. getParameter< String >( "output-file" ); double snapshotPeriod = parameters. getParameter< double >( "snapshot-period" ); @@ -53,12 +53,12 @@ bool computeDifferenceOfMeshFunctions( const MeshPointer& meshPointer, const Con typedef typename MeshPointer::ObjectType Mesh; Functions::MeshFunction< Mesh, Mesh::getMeshDimension(), Real > v1( meshPointer ), v2( meshPointer ), diff( meshPointer ); Real totalL1Diff( 0.0 ), totalL2Diff( 0.0 ), totalMaxDiff( 0.0 ); - for( int i = 0; i < inputFiles. getSize(); i ++ ) + for( int i = 0; i < (int) inputFiles.size(); i ++ ) { String file1, file2; if( mode == "couples" ) { - if( i + 1 == inputFiles.getSize() ) + if( i + 1 == (int) inputFiles.size() ) { std::cerr << std::endl << "Skipping the file " << inputFiles[ i ] << " since there is no file to couple it with." << std::endl; outputFile.close(); @@ -105,7 +105,7 @@ bool computeDifferenceOfMeshFunctions( const MeshPointer& meshPointer, const Con } if( mode == "halves" ) { - const int half = inputFiles. getSize() / 2; + const int half = inputFiles.size() / 2; if( i == 0 ) i = half; if( verbose ) @@ -178,7 +178,7 @@ template< typename MeshPointer, typename Value, typename Real, typename Index > bool computeDifferenceOfVectors( const MeshPointer& meshPointer, const Config::ParameterContainer& parameters ) { bool verbose = parameters. getParameter< bool >( "verbose" ); - Containers::List< String > inputFiles = parameters. getParameter< Containers::List< String > >( "input-files" ); + std::vector< String > inputFiles = parameters. getParameter< std::vector< String > >( "input-files" ); String mode = parameters. getParameter< String >( "mode" ); String outputFileName = parameters. getParameter< String >( "output-file" ); double snapshotPeriod = parameters. getParameter< double >( "snapshot-period" ); @@ -205,11 +205,11 @@ bool computeDifferenceOfVectors( const MeshPointer& meshPointer, const Config::P Containers::Vector< Real, Devices::Host, Index > v1, v2; Real totalL1Diff( 0.0 ), totalL2Diff( 0.0 ), totalMaxDiff( 0.0 ); - for( int i = 0; i < inputFiles. getSize(); i ++ ) + for( int i = 0; i < (int) inputFiles.size(); i++ ) { if( mode == "couples" ) { - if( i + 1 == inputFiles.getSize() ) + if( i + 1 == (int) inputFiles.size() ) { std::cerr << std::endl << "Skipping the file " << inputFiles[ i ] << " since there is no file to couple it with." << std::endl; outputFile.close(); @@ -252,7 +252,7 @@ bool computeDifferenceOfVectors( const MeshPointer& meshPointer, const Config::P } if( mode == "halves" ) { - const int half = inputFiles. getSize() / 2; + const int half = inputFiles.size() / 2; if( i == 0 ) i = half; if( verbose ) @@ -325,7 +325,7 @@ bool computeDifference( const MeshPointer& meshPointer, const String& objectType template< typename MeshPointer, typename Value, typename Real > bool setIndexType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { String indexType; @@ -353,8 +353,8 @@ bool setIndexType( const MeshPointer& meshPointer, template< typename MeshPointer > bool setTupleType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, - const Containers::List< String >& parsedValueType, + const std::vector< String >& parsedObjectType, + const std::vector< String >& parsedValueType, const Config::ParameterContainer& parameters ) { int dimensions = atoi( parsedValueType[ 1 ].getString() ); @@ -404,7 +404,7 @@ bool setTupleType( const MeshPointer& meshPointer, template< typename MeshPointer > bool setValueType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { String elementType; @@ -428,8 +428,8 @@ bool setValueType( const MeshPointer& meshPointer, return setIndexType< MeshPointer, double, double >( meshPointer, inputFileName, parsedObjectType, parameters ); if( elementType == "long double" ) return setIndexType< MeshPointer, long double, long double >( meshPointer, inputFileName, parsedObjectType, parameters ); - Containers::List< String > parsedValueType; - if( ! parseObjectType( elementType, parsedValueType ) ) + const std::vector< String > parsedValueType = parseObjectType( elementType ); + if( ! parsedValueType.size() ) { std::cerr << "Unable to parse object type " << elementType << "." << std::endl; return false; @@ -445,8 +445,7 @@ template< typename Mesh > bool processFiles( const Config::ParameterContainer& parameters ) { int verbose = parameters. getParameter< int >( "verbose"); - Containers::List< String > inputFiles = parameters. getParameter< Containers::List< String > >( "input-files" ); - String& inputFile = inputFiles[ 0 ]; + std::vector< String > inputFiles = parameters. getParameter< std::vector< String > >( "input-files" ); /**** * Reading the mesh @@ -472,8 +471,8 @@ bool processFiles( const Config::ParameterContainer& parameters ) if( verbose ) std::cout << objectType << " detected ... "; - Containers::List< String > parsedObjectType; - if( ! parseObjectType( objectType, parsedObjectType ) ) + const std::vector< String > parsedObjectType = parseObjectType( objectType ); + if( ! parsedObjectType.size() ) { std::cerr << "Unable to parse object type " << objectType << "." << std::endl; return false; @@ -483,7 +482,7 @@ bool processFiles( const Config::ParameterContainer& parameters ) } template< int Dim, typename Real > -bool resolveGridIndexType( const Containers::List< String >& parsedMeshType, +bool resolveGridIndexType( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { if( parsedMeshType[ 4 ] == "int" ) @@ -495,7 +494,7 @@ bool resolveGridIndexType( const Containers::List< String >& parsedMeshType, } template< int Dim > -bool resolveGridRealType( const Containers::List< String >& parsedMeshType, +bool resolveGridRealType( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { if( parsedMeshType[ 2 ] == "float" ) @@ -508,4 +507,4 @@ bool resolveGridRealType( const Containers::List< String >& parsedMeshType, return false; } -#endif /* TNL_DIFF_H_ */ \ No newline at end of file +#endif /* TNL_DIFF_H_ */ diff --git a/src/Tools/tnl-image-converter.cpp b/src/Tools/tnl-image-converter.cpp index 29c633058d69250965293681a2d010b9349eb5e4..f06ba841df524c4bd7522b81dc947f8080c0debe 100644 --- a/src/Tools/tnl-image-converter.cpp +++ b/src/Tools/tnl-image-converter.cpp @@ -43,7 +43,7 @@ void configSetup( Config::ConfigDescription& config ) template< typename Real > bool processImages( const Config::ParameterContainer& parameters ) { - const Containers::List< String >& inputImages = parameters.getParameter< Containers::List< String > >( "input-images" ); + const std::vector< String >& inputImages = parameters.getParameter< std::vector< String > >( "input-images" ); String meshFile = parameters.getParameter< String >( "mesh-file" ); bool verbose = parameters.getParameter< bool >( "verbose" ); @@ -54,7 +54,7 @@ bool processImages( const Config::ParameterContainer& parameters ) MeshFunctionType meshFunction; Images::RegionOfInterest< int > roi; - for( int i = 0; i < inputImages.getSize(); i++ ) + for( int i = 0; i < (int) inputImages.size(); i++ ) { const String& fileName = inputImages[ i ]; std::cout << "Processing image file " << fileName << "... "; @@ -145,10 +145,9 @@ bool processImages( const Config::ParameterContainer& parameters ) bool processFiles( const Config::ParameterContainer& parameters ) { - const Containers::List< String >& inputFiles = parameters.getParameter< Containers::List< String > >( "input-files" ); + const std::vector< String >& inputFiles = parameters.getParameter< std::vector< String > >( "input-files" ); const String& imageFormat = parameters.getParameter< String >( "image-format" ); String meshFile = parameters.getParameter< String >( "mesh-file" ); - bool verbose = parameters.getParameter< bool >( "verbose" ); Meshes::Grid< 2, double, Devices::Host, int > grid; if( ! grid.load( meshFile ) ) @@ -157,7 +156,7 @@ bool processFiles( const Config::ParameterContainer& parameters ) return false; } Containers::Vector< double, Devices::Host, int > vector; - for( int i = 0; i < inputFiles.getSize(); i++ ) + for( int i = 0; i < (int) inputFiles.size(); i++ ) { const String& fileName = inputFiles[ i ]; std::cout << "Processing file " << fileName << "... "; diff --git a/src/Tools/tnl-init.cpp b/src/Tools/tnl-init.cpp index 7dd7032810794f5f2ee43023472be6773fcb2de6..0695d62e106b6959c852f96c27f7a398025e4202 100644 --- a/src/Tools/tnl-init.cpp +++ b/src/Tools/tnl-init.cpp @@ -70,8 +70,8 @@ int main( int argc, char* argv[] ) return EXIT_FAILURE; } std::cout << meshType << " detected in " << meshFile << " file." << std::endl; - Containers::List< String > parsedMeshType; - if( ! parseObjectType( meshType, parsedMeshType ) ) + std::vector< String > parsedMeshType = parseObjectType( meshType ); + if( ! parsedMeshType.size() ) { std::cerr << "Unable to parse the mesh type " << meshType << "." << std::endl; return EXIT_FAILURE; diff --git a/src/Tools/tnl-init.h b/src/Tools/tnl-init.h index 3f2a8f15fd01df8c61785ffae155ccf84ac86ddd..5530ee5ad5a68107242c01092409d77bee2ac196 100644 --- a/src/Tools/tnl-init.h +++ b/src/Tools/tnl-init.h @@ -264,7 +264,7 @@ bool resolveRealType( const Config::ParameterContainer& parameters ) template< int Dimension, typename RealType, typename IndexType > -bool resolveMesh( const Containers::List< String >& parsedMeshType, +bool resolveMesh( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { std::cout << "+ -> Setting mesh type to " << parsedMeshType[ 0 ] << " ... " << std::endl; @@ -279,7 +279,7 @@ bool resolveMesh( const Containers::List< String >& parsedMeshType, } template< int Dimension, typename RealType > -bool resolveIndexType( const Containers::List< String >& parsedMeshType, +bool resolveIndexType( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { std::cout << "+ -> Setting index type to " << parsedMeshType[ 4 ] << " ... " << std::endl; @@ -293,7 +293,7 @@ bool resolveIndexType( const Containers::List< String >& parsedMeshType, } template< int Dimension > -bool resolveRealType( const Containers::List< String >& parsedMeshType, +bool resolveRealType( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { std::cout << "+ -> Setting real type to " << parsedMeshType[ 2 ] << " ... " << std::endl; @@ -309,7 +309,7 @@ bool resolveRealType( const Containers::List< String >& parsedMeshType, return false; } -bool resolveMeshType( const Containers::List< String >& parsedMeshType, +bool resolveMeshType( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { std::cout << "+ -> Setting dimensions to " << parsedMeshType[ 1 ] << " ... " << std::endl; diff --git a/src/Tools/tnl-lattice-init.h b/src/Tools/tnl-lattice-init.h index b22e71f96ad7c8e31e18cc22a35105cab31723e8..0b42a72ead2ea71758697dbf70190fb15639094c 100644 --- a/src/Tools/tnl-lattice-init.h +++ b/src/Tools/tnl-lattice-init.h @@ -227,8 +227,8 @@ bool resolveProfileReal( const Config::ParameterContainer& parameters ) return EXIT_FAILURE; } //std::cout << meshFunctionType << " detected in " << profileFile << " file." << std::endl; - Containers::List< String > parsedMeshFunctionType; - if( ! parseObjectType( meshFunctionType, parsedMeshFunctionType ) ) + const std::vector< String > parsedMeshFunctionType = parseObjectType( meshFunctionType ); + if( ! parsedMeshFunctionType.size() ) { std::cerr << "Unable to parse the mesh function type " << meshFunctionType << "." << std::endl; return EXIT_FAILURE; @@ -259,7 +259,7 @@ bool resolveProfileReal( const Config::ParameterContainer& parameters ) } template< typename ProfileMesh, typename Real, typename MeshReal > -bool resolveMeshIndexType( const Containers::List< String >& parsedMeshType, +bool resolveMeshIndexType( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { if( parsedMeshType[ 4 ] == "int" ) @@ -283,8 +283,8 @@ bool resolveMesh( const Config::ParameterContainer& parameters ) return EXIT_FAILURE; } std::cout << meshType << " detected in " << meshFile << " file." << std::endl; - Containers::List< String > parsedMeshType; - if( ! parseObjectType( meshType, parsedMeshType ) ) + const std::vector< String > parsedMeshType = parseObjectType( meshType ); + if( ! parsedMeshType.size() ) { std::cerr << "Unable to parse the mesh type " << meshType << "." << std::endl; return EXIT_FAILURE; @@ -325,7 +325,7 @@ bool resolveRealType( const Config::ParameterContainer& parameters ) } template< typename RealType, typename IndexType > -bool resolveProfileMesh( const Containers::List< String >& parsedMeshType, +bool resolveProfileMesh( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { std::cout << "+ -> Setting mesh type to " << parsedMeshType[ 0 ] << " ... " << std::endl; @@ -339,7 +339,7 @@ bool resolveProfileMesh( const Containers::List< String >& parsedMeshType, } template< typename RealType > -bool resolveProfileMeshIndexType( const Containers::List< String >& parsedMeshType, +bool resolveProfileMeshIndexType( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { std::cout << "+ -> Setting index type to " << parsedMeshType[ 4 ] << " ... " << std::endl; @@ -352,7 +352,7 @@ bool resolveProfileMeshIndexType( const Containers::List< String >& parsedMeshTy return false; } -bool resolveProfileMeshRealType( const Containers::List< String >& parsedMeshType, +bool resolveProfileMeshRealType( const std::vector< String >& parsedMeshType, const Config::ParameterContainer& parameters ) { std::cout << "+ -> Setting real type to " << parsedMeshType[ 2 ] << " ... " << std::endl; @@ -378,8 +378,8 @@ bool resolveProfileMeshType( const Config::ParameterContainer& parameters ) return EXIT_FAILURE; } std::cout << meshType << " detected in " << meshFile << " file." << std::endl; - Containers::List< String > parsedMeshType; - if( ! parseObjectType( meshType, parsedMeshType ) ) + const std::vector< String > parsedMeshType = parseObjectType( meshType ); + if( ! parsedMeshType.size() ) { std::cerr << "Unable to parse the mesh type " << meshType << "." << std::endl; return EXIT_FAILURE; diff --git a/src/Tools/tnl-view.h b/src/Tools/tnl-view.h index c231d606dd064a6e96730d7698d0043871bda693..b5fa04ba97abe3afc877d74b24de93e964e62e26 100644 --- a/src/Tools/tnl-view.h +++ b/src/Tools/tnl-view.h @@ -110,7 +110,7 @@ template< typename MeshPointer, int VectorFieldSize > bool setMeshFunctionRealType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { if( VectorFieldSize == 0 ) @@ -124,7 +124,7 @@ template< typename MeshPointer, typename = typename std::enable_if< EntityDimension <= MeshPointer::ObjectType::getMeshDimension() >::type > bool setMeshEntityType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { if( parsedObjectType[ 3 ] == "float" ) @@ -144,7 +144,7 @@ template< typename MeshPointer, typename = void > bool setMeshEntityType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { std::cerr << "Unsupported mesh functions entity dimension: " << EntityDimension << "." << std::endl; @@ -155,7 +155,7 @@ template< int VectorFieldSize, typename MeshPointer > bool setMeshEntityDimension( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { int meshEntityDimension = atoi( parsedObjectType[ 2 ].getString() ); @@ -182,7 +182,7 @@ bool setMeshEntityDimension( const MeshPointer& meshPointer, template< typename MeshPointer, int VectorFieldSize = 0 > bool setMeshFunction( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { std::cerr << parsedObjectType[ 1 ] << std::endl; @@ -197,12 +197,12 @@ bool setMeshFunction( const MeshPointer& meshPointer, template< typename MeshPointer > bool setVectorFieldSize( const MeshPointer& meshPointer, const String& inputFileName, - Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { int vectorFieldSize = atoi( parsedObjectType[ 1 ].getString() ); - Containers::List< String > parsedMeshFunctionType; - if( ! parseObjectType( parsedObjectType[ 2 ], parsedMeshFunctionType ) ) + const std::vector< String > parsedMeshFunctionType = parseObjectType( parsedObjectType[ 2 ] ); + if( ! parsedMeshFunctionType.size() ) { std::cerr << "Unable to parse mesh function type " << parsedObjectType[ 2 ] << " in a vector field." << std::endl; return false; @@ -223,7 +223,7 @@ bool setVectorFieldSize( const MeshPointer& meshPointer, template< typename MeshPointer, typename Value, typename Real, typename Index, int Dimension > bool convertObject( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { int verbose = parameters. getParameter< int >( "verbose"); @@ -275,7 +275,7 @@ bool convertObject( const MeshPointer& meshPointer, template< typename MeshPointer, typename Value, typename Real, typename Index > bool setDimension( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { int dimensions( 0 ); @@ -303,7 +303,7 @@ bool setDimension( const MeshPointer& meshPointer, template< typename MeshPointer, typename Value, typename Real > bool setIndexType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { String indexType; @@ -327,8 +327,8 @@ bool setIndexType( const MeshPointer& meshPointer, template< typename MeshPointer > bool setTupleType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, - const Containers::List< String >& parsedValueType, + const std::vector< String >& parsedObjectType, + const std::vector< String >& parsedValueType, const Config::ParameterContainer& parameters ) { int dimensions = atoi( parsedValueType[ 1 ].getString() ); @@ -378,7 +378,7 @@ bool setTupleType( const MeshPointer& meshPointer, template< typename MeshPointer > bool setValueType( const MeshPointer& meshPointer, const String& inputFileName, - const Containers::List< String >& parsedObjectType, + const std::vector< String >& parsedObjectType, const Config::ParameterContainer& parameters ) { String elementType; @@ -400,8 +400,8 @@ bool setValueType( const MeshPointer& meshPointer, return setIndexType< MeshPointer, double, double >( meshPointer, inputFileName, parsedObjectType, parameters ); if( elementType == "long double" ) return setIndexType< MeshPointer, long double, long double >( meshPointer, inputFileName, parsedObjectType, parameters ); - Containers::List< String > parsedValueType; - if( ! parseObjectType( elementType, parsedValueType ) ) + const std::vector< String > parsedValueType = parseObjectType( elementType ); + if( ! parsedValueType.size() ) { std::cerr << "Unable to parse object type " << elementType << "." << std::endl; return false; @@ -433,12 +433,12 @@ struct FilesProcessor } bool checkOutputFile = parameters. getParameter< bool >( "check-output-file" ); - Containers::List< String > inputFiles = parameters. getParameter< Containers::List< String > >( "input-files" ); + std::vector< String > inputFiles = parameters. getParameter< std::vector< String > >( "input-files" ); bool error( false ); //#ifdef HAVE_OPENMP //#pragma omp parallel for //#endif - for( int i = 0; i < inputFiles. getSize(); i ++ ) + for( int i = 0; i < (int) inputFiles.size(); i++ ) { if( verbose ) std::cout << "Processing file " << inputFiles[ i ] << " ... " << std::flush; @@ -467,8 +467,8 @@ struct FilesProcessor if( verbose ) std::cout << objectType << " detected ... "; - Containers::List< String > parsedObjectType; - if( ! parseObjectType( objectType, parsedObjectType ) ) + const std::vector< String > parsedObjectType = parseObjectType( objectType ); + if( ! parsedObjectType.size() ) { std::cerr << "Unable to parse object type " << objectType << "." << std::endl; error = true; diff --git a/src/UnitTests/ObjectTest.cpp b/src/UnitTests/ObjectTest.cpp index 7b9badd8f9d14ce3a9af45249efe9360b07b2e69..488f7a49756727fd9314a50413d3f40f85a70172 100644 --- a/src/UnitTests/ObjectTest.cpp +++ b/src/UnitTests/ObjectTest.cpp @@ -35,72 +35,44 @@ TEST( ObjectTest, SaveAndLoadTest ) TEST( ObjectTest, parseObjectTypeTest ) { - Containers::List< String > parsed; - Containers::List< String > expected; + std::vector< String > parsed; + std::vector< String > expected; // plain type - parsed.reset(); - expected.reset(); - ASSERT_TRUE( parseObjectType( "int", parsed ) ); - expected.Append( "int" ); + parsed = parseObjectType( "int" ); + expected = {"int"}; EXPECT_EQ( parsed, expected ); // type with space - parsed.reset(); - expected.reset(); - ASSERT_TRUE( parseObjectType( "short int", parsed ) ); - expected.Append( "short int" ); + parsed = parseObjectType( "short int" ); + expected = {"short int"}; EXPECT_EQ( parsed, expected ); - parsed.reset(); - expected.reset(); - ASSERT_TRUE( parseObjectType( "unsigned short int", parsed ) ); - expected.Append( "unsigned short int" ); + parsed = parseObjectType( "unsigned short int" ); + expected = {"unsigned short int"}; EXPECT_EQ( parsed, expected ); // composed type - parsed.reset(); - expected.reset(); - ASSERT_TRUE( parseObjectType( "Containers::Vector< double, Devices::Host, int >", parsed ) ); - expected.Append( "Containers::Vector" ); - expected.Append( "double" ); - expected.Append( "Devices::Host" ); - expected.Append( "int" ); + parsed = parseObjectType( "Containers::Vector< double, Devices::Host, int >" ); + expected = { "Containers::Vector", "double", "Devices::Host", "int" }; EXPECT_EQ( parsed, expected ); - parsed.reset(); - expected.reset(); - ASSERT_TRUE( parseObjectType( "Containers::Vector< Containers::List< String >, Devices::Host, int >", parsed ) ); - expected.Append( "Containers::Vector" ); - expected.Append( "Containers::List< String >" ); - expected.Append( "Devices::Host" ); - expected.Append( "int" ); + parsed = parseObjectType( "Containers::Vector< Containers::List< String >, Devices::Host, int >" ); + expected = { "Containers::Vector", "Containers::List< String >", "Devices::Host", "int" }; EXPECT_EQ( parsed, expected ); // spaces in the template parameter - parsed.reset(); - expected.reset(); - ASSERT_TRUE( parseObjectType( "A< short int >", parsed ) ); - expected.Append( "A" ); - expected.Append( "short int" ); + parsed = parseObjectType( "A< short int >" ); + expected = { "A", "short int" }; EXPECT_EQ( parsed, expected ); - parsed.reset(); - expected.reset(); - ASSERT_TRUE( parseObjectType( "A< B< short int >, C >", parsed ) ); - expected.Append( "A" ); - expected.Append( "B< short int >" ); - expected.Append( "C" ); + parsed = parseObjectType( "A< B< short int >, C >" ); + expected = { "A", "B< short int >", "C" }; EXPECT_EQ( parsed, expected ); // spaces at different places in the template parameter - parsed.reset(); - expected.reset(); - ASSERT_TRUE( parseObjectType( "A< b , c <E> ,d>", parsed ) ); - expected.Append( "A" ); - expected.Append( "b" ); - expected.Append( "c <E>" ); - expected.Append( "d" ); + parsed = parseObjectType( "A< b , c <E> ,d>" ); + expected = { "A", "b", "c <E>", "d" }; EXPECT_EQ( parsed, expected ); } #endif