From 50fc314d5346dd14cd294e4c3b98849e87d273e4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jakub=20Klinkovsk=C3=BD?= <klinkjak@fjfi.cvut.cz> Date: Sat, 17 Nov 2018 10:26:45 +0100 Subject: [PATCH] Removed Containers::List from the parseObjectType function --- src/Benchmarks/BLAS/spmv.h | 4 +- src/TNL/Config/ConfigEntryList.h | 2 +- src/TNL/Config/ParameterContainer.cpp | 84 ++++++++------------------- src/TNL/Meshes/Readers/TNLReader.h | 18 +++--- src/TNL/Object.cpp | 31 +++++----- src/TNL/Object.h | 7 ++- src/TNL/param-types.h | 26 ++++++++- src/Tools/tnl-diff.cpp | 9 ++- src/Tools/tnl-diff.h | 41 +++++++------ src/Tools/tnl-image-converter.cpp | 9 ++- src/Tools/tnl-init.cpp | 4 +- src/Tools/tnl-init.h | 8 +-- src/Tools/tnl-lattice-init.h | 20 +++---- src/Tools/tnl-view.h | 40 ++++++------- src/UnitTests/ObjectTest.cpp | 64 ++++++-------------- 15 files changed, 161 insertions(+), 206 deletions(-) diff --git a/src/Benchmarks/BLAS/spmv.h b/src/Benchmarks/BLAS/spmv.h index 9df40f4ec6..5c3813b0a9 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 95879fa663..50284e37c1 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 5329a87451..f318acabb4 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 ba602b0f97..68f4d13a21 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 e83b2d0d78..c0cc9a446c 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 405bcd76d0..e4fd274f89 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 58445912f2..e7552d8489 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 611cd53f4a..360423de72 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 b070d0dfeb..47d058de16 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 29c633058d..f06ba841df 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 7dd7032810..0695d62e10 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 3f2a8f15fd..5530ee5ad5 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 b22e71f96a..0b42a72ead 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 c231d606dd..b5fa04ba97 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 7b9badd8f9..488f7a4975 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 -- GitLab