[zypp-commit] r10366 - in /trunk/libzypp: package/libzypp.changes tests/zypp/base/String_test.cc zypp/PoolQuery.cc zypp/PublicKey.cc zypp/base/String.cc zypp/base/String.h
Author: jreidinger Date: Tue Jun 10 09:54:12 2008 New Revision: 10366 URL: http://svn.opensuse.org/viewcvs/zypp?rev=10366&view=rev Log: - improve performance of gsub - change replace_all to replaceAll (same name convency) - add tests for gsub and replaceAll Modified: trunk/libzypp/package/libzypp.changes trunk/libzypp/tests/zypp/base/String_test.cc trunk/libzypp/zypp/PoolQuery.cc trunk/libzypp/zypp/PublicKey.cc trunk/libzypp/zypp/base/String.cc trunk/libzypp/zypp/base/String.h Modified: trunk/libzypp/package/libzypp.changes URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/package/libzypp.changes?rev=10366&r1=10365&r2=10366&view=diff ============================================================================== --- trunk/libzypp/package/libzypp.changes (original) +++ trunk/libzypp/package/libzypp.changes Tue Jun 10 09:54:12 2008 @@ -1,4 +1,12 @@ ------------------------------------------------------------------- +Tue Jun 10 09:52:03 CEST 2008 - jreidinger@suse.cz + +- improve performance of gsub +- change replace_all to replaceAll (same name convency) +- add tests for gsub and replaceAll +- revision 10366 + +------------------------------------------------------------------- Fri Jun 6 13:29:59 CEST 2008 - ma@suse.de - Handle application/x-redhat-package-manager in package-manager.desktop Modified: trunk/libzypp/tests/zypp/base/String_test.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/tests/zypp/base/String_test.cc?rev=10366&r1=10365&r2=10366&view=diff ============================================================================== --- trunk/libzypp/tests/zypp/base/String_test.cc (original) +++ trunk/libzypp/tests/zypp/base/String_test.cc Tue Jun 10 09:54:12 2008 @@ -14,6 +14,35 @@ using namespace zypp; using namespace zypp::str; +BOOST_AUTO_TEST_CASE(gsubTest) +{ + string olds = "olds"; + string news = "new string"; + + BOOST_CHECK_EQUAL(gsub("test olds string",olds,news), "test new string string"); + BOOST_CHECK_EQUAL(gsub("no string",olds,news),"no string"); + BOOST_CHECK_EQUAL(gsub("oldsolds",olds,news),"new stringnew string"); +} + +BOOST_AUTO_TEST_CASE(replaceAllTest) +{ + string olds = "olds"; + string news = "new string"; + string tests; + + tests = "test olds string"; + replaceAll(tests,olds,news); + BOOST_CHECK_EQUAL(tests, "test new string string"); + + tests = "no string"; + replaceAll(tests,olds,news); + BOOST_CHECK_EQUAL(tests, "no string"); + + tests = "oldsolds"; + replaceAll(tests,olds,news); + BOOST_CHECK_EQUAL(tests, "new stringnew string"); +} + BOOST_AUTO_TEST_CASE(testsplitEscaped) { string s( "simple non-escaped string" ); Modified: trunk/libzypp/zypp/PoolQuery.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/PoolQuery.cc?rev=10366&r1=10365&r2=10366&view=diff ============================================================================== --- trunk/libzypp/zypp/PoolQuery.cc (original) +++ trunk/libzypp/zypp/PoolQuery.cc Tue Jun 10 09:54:12 2008 @@ -1160,7 +1160,7 @@ else { string s = attrName; - str::replace_all( s,"_",":" ); + str::replaceAll( s,"_",":" ); SolvAttr a(s); addAttribute(a,attrValue); } @@ -1263,7 +1263,7 @@ for_( it, attributes().begin(), attributes().end() ) { string s = it->first.asString(); - str::replace_all(s,":","_"); + str::replaceAll(s,":","_"); for_( it2,it->second.begin(),it->second.end() ) { str << s <<": "<< *it2 << delim; Modified: trunk/libzypp/zypp/PublicKey.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/PublicKey.cc?rev=10366&r1=10365&r2=10366&view=diff ============================================================================== --- trunk/libzypp/zypp/PublicKey.cc (original) +++ trunk/libzypp/zypp/PublicKey.cc Tue Jun 10 09:54:12 2008 @@ -164,10 +164,8 @@ if ( what[1] == "pub" ) { _id = what[5]; - _name = what[10]; //replace all escaped semicolon with real - str::replace_all(_name,"\\x3a",":"); - + _name = str::gsub(what[10],"\\x3a",":"); _created = createDate(what[6]); _expires = createDate(what[7]); //return key; Modified: trunk/libzypp/zypp/base/String.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/base/String.cc?rev=10366&r1=10365&r2=10366&view=diff ============================================================================== --- trunk/libzypp/zypp/base/String.cc (original) +++ trunk/libzypp/zypp/base/String.cc Tue Jun 10 09:54:12 2008 @@ -221,29 +221,32 @@ string gsub(const string& sData, const string& sFrom, const string& sTo) { - string sNew = sData; + string sNew; + sNew.reserve(sData.size()); - if (! sNew.empty()) + if (! sData.empty()) { - string::size_type toLen = sTo.length(); string::size_type frLen = sFrom.length(); string::size_type loc = 0; + string::size_type oldLoc = 0; - while (string::npos != (loc = sNew.find(sFrom, loc))) + while (string::npos != (loc = sData.find(sFrom, loc))) { - sNew.replace(loc, frLen, sTo); - loc += toLen; - - if (loc >= sNew.length()) - break; + sNew.append(sData,oldLoc,loc-oldLoc); + sNew.append(sTo); + loc += frLen; + oldLoc = loc; + if (loc >= sData.length()) + break; } + if (oldLoc!=sData.size()) + sNew.append(sData,oldLoc,sData.size()-oldLoc); } - return sNew; } - string & replace_all(string & str, const string & from, const string & to) + string & replaceAll(string & str, const string & from, const string & to) { string::size_type pos = 0; while((pos = str.find(from, pos)) != string::npos) Modified: trunk/libzypp/zypp/base/String.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/base/String.h?rev=10366&r1=10365&r2=10366&view=diff ============================================================================== --- trunk/libzypp/zypp/base/String.h (original) +++ trunk/libzypp/zypp/base/String.h Tue Jun 10 09:54:12 2008 @@ -299,7 +299,7 @@ * \note It only perform substtution in one pass * \note use only if you replace same lenght strings, otherwise use gsub */ - std::string& replace_all( std::string & str, const std::string & from, const std::string & to); + std::string& replaceAll( std::string & str, const std::string & from, const std::string & to); /////////////////////////////////////////////////////////////////// /** \name Split. */ @@ -395,11 +395,11 @@ std::string s( beg+1, cur-beg-2 ); //without quotes //transform escaped escape - replace_all( s, "\\\\", "\\" ); + replaceAll( s, "\\\\", "\\" ); //transform escaped quotes (only same as open char tmpn[2] = { closeChar, 0 }; char tmpo[3] = { '\\', closeChar, 0 }; - replace_all( s, tmpo, tmpn ); + replaceAll( s, tmpo, tmpn ); *result_r = s; } @@ -418,7 +418,7 @@ // build string std::string s( beg, cur-beg ); //transform escaped escape - replace_all( s, "\\\\", "\\" ); + replaceAll( s, "\\\\", "\\" ); const char *delimeter = sepchars_r; while ( *delimeter ) @@ -427,7 +427,7 @@ const char tmp[2] = { *delimeter, '\0' }; std::string del(tmp); ds+= del; - replace_all( s, ds, del ); + replaceAll( s, ds, del ); ++delimeter; } -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org
participants (1)
-
jreidinger@svn.opensuse.org