Loading src/TNL/Matrices/MatrixReader_impl.h +9 −13 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ #pragma once #include <iomanip> #include <TNL/Containers/List.h> #include <TNL/String.h> #include <TNL/Containers/Vector.h> #include <TNL/Timer.h> Loading Loading @@ -166,9 +165,8 @@ template< typename Matrix > bool MatrixReader< Matrix >::checkMtxHeader( const String& header, bool& symmetric ) { Containers::List< String > parsedLine; header.split( parsedLine ); if( parsedLine.getSize() < 5 ) std::vector< String > parsedLine = header.split(); if( (int) parsedLine.size() < 5 ) return false; if( parsedLine[ 0 ] != "%%MatrixMarket" ) return false; Loading Loading @@ -212,7 +210,7 @@ bool MatrixReader< Matrix >::readMtxHeader( std::istream& file, file.seekg( 0, std::ios::beg ); String line; bool headerParsed( false ); Containers::List< String > parsedLine; std::vector< String > parsedLine; while( true ) { line.getLine( file ); Loading @@ -233,9 +231,8 @@ bool MatrixReader< Matrix >::readMtxHeader( std::istream& file, return false; } parsedLine.reset(); line.split( parsedLine ); if( parsedLine. getSize() != 3 ) parsedLine = line.split(); if( (int) parsedLine.size() != 3 ) { std::cerr << "Wrong number of parameters in the matrix header." << std::endl; return false; Loading Loading @@ -389,9 +386,8 @@ bool MatrixReader< Matrix >::parseMtxLineWithElement( const String& line, IndexType& column, RealType& value ) { Containers::List< String > parsedLine; line.split( parsedLine ); if( parsedLine.getSize() != 3 ) std::vector< String > parsedLine = line.split(); if( (int) parsedLine.size() != 3 ) { std::cerr << "Wrong number of parameters in the matrix row at line:" << line << std::endl; return false; Loading src/TNL/String.cpp +7 −12 Original line number Diff line number Diff line Loading @@ -12,7 +12,6 @@ #include <string.h> #include <TNL/String.h> #include <TNL/Assert.h> #include <TNL/Containers/List.h> #include <TNL/File.h> #include <TNL/Math.h> #ifdef USE_MPI Loading Loading @@ -335,25 +334,21 @@ String::strip( char strip ) const return ""; } int String::split( Containers::List< String >& list, const char separator, bool skipEmpty ) const std::vector< String > String::split( const char separator, bool skipEmpty ) const { list.reset(); std::vector< String > parts; String s; for( int i = 0; i < this->getLength(); i ++ ) { if( ( *this )[ i ] == separator ) { for( int i = 0; i < this->getLength(); i++ ) { if( ( *this )[ i ] == separator ) { if( ! skipEmpty || s != "" ) list.Append( s ); parts.push_back( s ); s = ""; } else s += ( *this )[ i ]; } if( ! skipEmpty || s != "" ) list.Append( s ); return list.getSize(); parts.push_back( s ); return parts; } Loading src/TNL/String.h +2 −6 Original line number Diff line number Diff line Loading @@ -12,14 +12,11 @@ #include <iostream> #include <sstream> #include <vector> namespace TNL { class File; namespace Containers { template< class T > class List; } class String; template< typename T > Loading Loading @@ -237,10 +234,9 @@ class String /// and returs list of those strings. When \e separator does not appear /// anywhere in the given string, this function returns a single-element list /// containing given sting. /// @param list Name of list. /// @param separator Character, which separates substrings in given string. /// Empty character can not be used. int split( Containers::List< String >& list, const char separator = ' ', bool skipEmpty = false ) const; std::vector< String > split( const char separator = ' ', bool skipEmpty = false ) const; ///// /// \brief Function for saving file. Loading src/UnitTests/StringTest.cpp +40 −41 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ #include <TNL/String.h> #include <TNL/File.h> #include <TNL/Containers/List.h> using namespace TNL; Loading Loading @@ -286,46 +285,46 @@ TEST( StringTest, strip ) TEST( StringTest, split ) { Containers::List< String > list; String( "A B C" ).split( list, ' ' ); ASSERT_EQ( list.getSize(), 3 ); EXPECT_EQ( list[ 0 ], "A" ); EXPECT_EQ( list[ 1 ], "B" ); EXPECT_EQ( list[ 2 ], "C" ); String( "abracadabra" ).split( list, 'a' ); ASSERT_EQ( list.getSize(), 6 ); EXPECT_EQ( list[ 0 ], "" ); EXPECT_EQ( list[ 1 ], "br" ); EXPECT_EQ( list[ 2 ], "c" ); EXPECT_EQ( list[ 3 ], "d" ); EXPECT_EQ( list[ 4 ], "br" ); EXPECT_EQ( list[ 5 ], "" ); String( "abracadabra" ).split( list, 'a', true ); ASSERT_EQ( list.getSize(), 4 ); EXPECT_EQ( list[ 0 ], "br" ); EXPECT_EQ( list[ 1 ], "c" ); EXPECT_EQ( list[ 2 ], "d" ); EXPECT_EQ( list[ 3 ], "br" ); String( "abracadabra" ).split( list, 'b' ); ASSERT_EQ( list.getSize(), 3 ); EXPECT_EQ( list[ 0 ], "a" ); EXPECT_EQ( list[ 1 ], "racada" ); EXPECT_EQ( list[ 2 ], "ra" ); String( "abracadabra" ).split( list, 'A' ); ASSERT_EQ( list.getSize(), 1 ); EXPECT_EQ( list[ 0 ], "abracadabra" ); String( "a,,b,c" ).split( list, ',' ); ASSERT_EQ( list.getSize(), 4 ); EXPECT_EQ( list[ 0 ], "a" ); EXPECT_EQ( list[ 1 ], "" ); EXPECT_EQ( list[ 2 ], "b" ); EXPECT_EQ( list[ 3 ], "c" ); std::vector< String > parts; parts = String( "A B C" ).split( ' ' ); ASSERT_EQ( (int) parts.size(), 3 ); EXPECT_EQ( parts[ 0 ], "A" ); EXPECT_EQ( parts[ 1 ], "B" ); EXPECT_EQ( parts[ 2 ], "C" ); parts = String( "abracadabra" ).split( 'a' ); ASSERT_EQ( (int) parts.size(), 6 ); EXPECT_EQ( parts[ 0 ], "" ); EXPECT_EQ( parts[ 1 ], "br" ); EXPECT_EQ( parts[ 2 ], "c" ); EXPECT_EQ( parts[ 3 ], "d" ); EXPECT_EQ( parts[ 4 ], "br" ); EXPECT_EQ( parts[ 5 ], "" ); parts = String( "abracadabra" ).split( 'a', true ); ASSERT_EQ( (int) parts.size(), 4 ); EXPECT_EQ( parts[ 0 ], "br" ); EXPECT_EQ( parts[ 1 ], "c" ); EXPECT_EQ( parts[ 2 ], "d" ); EXPECT_EQ( parts[ 3 ], "br" ); parts = String( "abracadabra" ).split( 'b' ); ASSERT_EQ( (int) parts.size(), 3 ); EXPECT_EQ( parts[ 0 ], "a" ); EXPECT_EQ( parts[ 1 ], "racada" ); EXPECT_EQ( parts[ 2 ], "ra" ); parts = String( "abracadabra" ).split( 'A' ); ASSERT_EQ( (int) parts.size(), 1 ); EXPECT_EQ( parts[ 0 ], "abracadabra" ); parts = String( "a,,b,c" ).split( ',' ); ASSERT_EQ( (int) parts.size(), 4 ); EXPECT_EQ( parts[ 0 ], "a" ); EXPECT_EQ( parts[ 1 ], "" ); EXPECT_EQ( parts[ 2 ], "b" ); EXPECT_EQ( parts[ 3 ], "c" ); } TEST( StringTest, SaveLoad ) Loading Loading
src/TNL/Matrices/MatrixReader_impl.h +9 −13 Original line number Diff line number Diff line Loading @@ -11,7 +11,6 @@ #pragma once #include <iomanip> #include <TNL/Containers/List.h> #include <TNL/String.h> #include <TNL/Containers/Vector.h> #include <TNL/Timer.h> Loading Loading @@ -166,9 +165,8 @@ template< typename Matrix > bool MatrixReader< Matrix >::checkMtxHeader( const String& header, bool& symmetric ) { Containers::List< String > parsedLine; header.split( parsedLine ); if( parsedLine.getSize() < 5 ) std::vector< String > parsedLine = header.split(); if( (int) parsedLine.size() < 5 ) return false; if( parsedLine[ 0 ] != "%%MatrixMarket" ) return false; Loading Loading @@ -212,7 +210,7 @@ bool MatrixReader< Matrix >::readMtxHeader( std::istream& file, file.seekg( 0, std::ios::beg ); String line; bool headerParsed( false ); Containers::List< String > parsedLine; std::vector< String > parsedLine; while( true ) { line.getLine( file ); Loading @@ -233,9 +231,8 @@ bool MatrixReader< Matrix >::readMtxHeader( std::istream& file, return false; } parsedLine.reset(); line.split( parsedLine ); if( parsedLine. getSize() != 3 ) parsedLine = line.split(); if( (int) parsedLine.size() != 3 ) { std::cerr << "Wrong number of parameters in the matrix header." << std::endl; return false; Loading Loading @@ -389,9 +386,8 @@ bool MatrixReader< Matrix >::parseMtxLineWithElement( const String& line, IndexType& column, RealType& value ) { Containers::List< String > parsedLine; line.split( parsedLine ); if( parsedLine.getSize() != 3 ) std::vector< String > parsedLine = line.split(); if( (int) parsedLine.size() != 3 ) { std::cerr << "Wrong number of parameters in the matrix row at line:" << line << std::endl; return false; Loading
src/TNL/String.cpp +7 −12 Original line number Diff line number Diff line Loading @@ -12,7 +12,6 @@ #include <string.h> #include <TNL/String.h> #include <TNL/Assert.h> #include <TNL/Containers/List.h> #include <TNL/File.h> #include <TNL/Math.h> #ifdef USE_MPI Loading Loading @@ -335,25 +334,21 @@ String::strip( char strip ) const return ""; } int String::split( Containers::List< String >& list, const char separator, bool skipEmpty ) const std::vector< String > String::split( const char separator, bool skipEmpty ) const { list.reset(); std::vector< String > parts; String s; for( int i = 0; i < this->getLength(); i ++ ) { if( ( *this )[ i ] == separator ) { for( int i = 0; i < this->getLength(); i++ ) { if( ( *this )[ i ] == separator ) { if( ! skipEmpty || s != "" ) list.Append( s ); parts.push_back( s ); s = ""; } else s += ( *this )[ i ]; } if( ! skipEmpty || s != "" ) list.Append( s ); return list.getSize(); parts.push_back( s ); return parts; } Loading
src/TNL/String.h +2 −6 Original line number Diff line number Diff line Loading @@ -12,14 +12,11 @@ #include <iostream> #include <sstream> #include <vector> namespace TNL { class File; namespace Containers { template< class T > class List; } class String; template< typename T > Loading Loading @@ -237,10 +234,9 @@ class String /// and returs list of those strings. When \e separator does not appear /// anywhere in the given string, this function returns a single-element list /// containing given sting. /// @param list Name of list. /// @param separator Character, which separates substrings in given string. /// Empty character can not be used. int split( Containers::List< String >& list, const char separator = ' ', bool skipEmpty = false ) const; std::vector< String > split( const char separator = ' ', bool skipEmpty = false ) const; ///// /// \brief Function for saving file. Loading
src/UnitTests/StringTest.cpp +40 −41 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ #include <TNL/String.h> #include <TNL/File.h> #include <TNL/Containers/List.h> using namespace TNL; Loading Loading @@ -286,46 +285,46 @@ TEST( StringTest, strip ) TEST( StringTest, split ) { Containers::List< String > list; String( "A B C" ).split( list, ' ' ); ASSERT_EQ( list.getSize(), 3 ); EXPECT_EQ( list[ 0 ], "A" ); EXPECT_EQ( list[ 1 ], "B" ); EXPECT_EQ( list[ 2 ], "C" ); String( "abracadabra" ).split( list, 'a' ); ASSERT_EQ( list.getSize(), 6 ); EXPECT_EQ( list[ 0 ], "" ); EXPECT_EQ( list[ 1 ], "br" ); EXPECT_EQ( list[ 2 ], "c" ); EXPECT_EQ( list[ 3 ], "d" ); EXPECT_EQ( list[ 4 ], "br" ); EXPECT_EQ( list[ 5 ], "" ); String( "abracadabra" ).split( list, 'a', true ); ASSERT_EQ( list.getSize(), 4 ); EXPECT_EQ( list[ 0 ], "br" ); EXPECT_EQ( list[ 1 ], "c" ); EXPECT_EQ( list[ 2 ], "d" ); EXPECT_EQ( list[ 3 ], "br" ); String( "abracadabra" ).split( list, 'b' ); ASSERT_EQ( list.getSize(), 3 ); EXPECT_EQ( list[ 0 ], "a" ); EXPECT_EQ( list[ 1 ], "racada" ); EXPECT_EQ( list[ 2 ], "ra" ); String( "abracadabra" ).split( list, 'A' ); ASSERT_EQ( list.getSize(), 1 ); EXPECT_EQ( list[ 0 ], "abracadabra" ); String( "a,,b,c" ).split( list, ',' ); ASSERT_EQ( list.getSize(), 4 ); EXPECT_EQ( list[ 0 ], "a" ); EXPECT_EQ( list[ 1 ], "" ); EXPECT_EQ( list[ 2 ], "b" ); EXPECT_EQ( list[ 3 ], "c" ); std::vector< String > parts; parts = String( "A B C" ).split( ' ' ); ASSERT_EQ( (int) parts.size(), 3 ); EXPECT_EQ( parts[ 0 ], "A" ); EXPECT_EQ( parts[ 1 ], "B" ); EXPECT_EQ( parts[ 2 ], "C" ); parts = String( "abracadabra" ).split( 'a' ); ASSERT_EQ( (int) parts.size(), 6 ); EXPECT_EQ( parts[ 0 ], "" ); EXPECT_EQ( parts[ 1 ], "br" ); EXPECT_EQ( parts[ 2 ], "c" ); EXPECT_EQ( parts[ 3 ], "d" ); EXPECT_EQ( parts[ 4 ], "br" ); EXPECT_EQ( parts[ 5 ], "" ); parts = String( "abracadabra" ).split( 'a', true ); ASSERT_EQ( (int) parts.size(), 4 ); EXPECT_EQ( parts[ 0 ], "br" ); EXPECT_EQ( parts[ 1 ], "c" ); EXPECT_EQ( parts[ 2 ], "d" ); EXPECT_EQ( parts[ 3 ], "br" ); parts = String( "abracadabra" ).split( 'b' ); ASSERT_EQ( (int) parts.size(), 3 ); EXPECT_EQ( parts[ 0 ], "a" ); EXPECT_EQ( parts[ 1 ], "racada" ); EXPECT_EQ( parts[ 2 ], "ra" ); parts = String( "abracadabra" ).split( 'A' ); ASSERT_EQ( (int) parts.size(), 1 ); EXPECT_EQ( parts[ 0 ], "abracadabra" ); parts = String( "a,,b,c" ).split( ',' ); ASSERT_EQ( (int) parts.size(), 4 ); EXPECT_EQ( parts[ 0 ], "a" ); EXPECT_EQ( parts[ 1 ], "" ); EXPECT_EQ( parts[ 2 ], "b" ); EXPECT_EQ( parts[ 3 ], "c" ); } TEST( StringTest, SaveLoad ) Loading