Author: jreidinger Date: Tue Apr 8 15:47:27 2008 New Revision: 9466 URL: http://svn.opensuse.org/viewcvs/zypp?rev=9466&view=rev Log: add comparing to PoolQuery Modified: trunk/libzypp/tests/zypp/PoolQuery_test.cc trunk/libzypp/zypp/PoolQuery.cc trunk/libzypp/zypp/PoolQuery.h Modified: trunk/libzypp/tests/zypp/PoolQuery_test.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/tests/zypp/PoolQuery_test.cc?rev=9466&r1=9465&r2=9466&view=diff ============================================================================== --- trunk/libzypp/tests/zypp/PoolQuery_test.cc (original) +++ trunk/libzypp/tests/zypp/PoolQuery_test.cc Tue Apr 8 15:47:27 2008 @@ -266,6 +266,33 @@ } */ +// test matching +BOOST_AUTO_TEST_CASE(pool_query_equal) +{ + cout << "****equal****" << endl; + PoolQuery q; + q.addString("zypp"); + q.addAttribute(sat::SolvAttr::name); + q.setMatchGlob(); + PoolQuery q2; + q2.addString("zypp"); + q2.addAttribute(sat::SolvAttr::name); + q2.setMatchGlob(); + PoolQuery q3; + q3.addString("zypp"); + q3.addAttribute(sat::SolvAttr::name); + q3.setMatchGlob(); + q3.setRequireAll(true); + PoolQuery q4; + q4.addAttribute(sat::SolvAttr::name,"zypp"); + q4.setMatchGlob(); + + BOOST_CHECK(equal(q,q2)); + BOOST_CHECK(!equal(q,q3)); + //only exact equal! \TODO maybe change + BOOST_CHECK(!equal(q,q4)); + BOOST_CHECK(!equal(q4,q3)); +} // save/load query BOOST_AUTO_TEST_CASE(pool_query_save_restore) Modified: trunk/libzypp/zypp/PoolQuery.cc URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/PoolQuery.cc?rev=9466&r1=9465&r2=9466&view=diff ============================================================================== --- trunk/libzypp/zypp/PoolQuery.cc (original) +++ trunk/libzypp/zypp/PoolQuery.cc Tue Apr 8 15:47:27 2008 @@ -944,6 +944,53 @@ ostream & operator<<( ostream & str, const PoolQuery & obj ) { return str << obj.asString(); } + bool operator==(const PoolQuery& a, const PoolQuery& b) + { + return equal(a,b); + } + + //internal matching two containers O(n^2) + template <class Container> + bool equalContainers(const Container& a, const Container& b) + { + for_(it,a.begin(),a.end()) + { + bool finded = false; + for_( it2, b.begin(),b.end() ) + { + if (*it==*it2) + { + finded = true; + break; + } + } + + if (!finded) + return false; + } + return true; + } + + bool equal(const PoolQuery& a, const PoolQuery& b) + { + if( a.matchType()!=b.matchType() ) + return false; + if( a.matchWord()!=b.matchWord()) + return false; + if( a.requireAll()!=b.requireAll() ) + return false; + if(!equalContainers(a.strings(), b.strings())) + return false; + if(!equalContainers(a.kinds(), b.kinds())) + return false; + if(!equalContainers(a.repos(), b.repos())) + return false; + if(!equalContainers(a.attributes(), b.attributes())) + return false; + + return true; + } + ///////////////////////////////////////////////////////////////// } // namespace zypp Modified: trunk/libzypp/zypp/PoolQuery.h URL: http://svn.opensuse.org/viewcvs/zypp/trunk/libzypp/zypp/PoolQuery.h?rev=9466&r1=9465&r2=9466&view=diff ============================================================================== --- trunk/libzypp/zypp/PoolQuery.h (original) +++ trunk/libzypp/zypp/PoolQuery.h Tue Apr 8 15:47:27 2008 @@ -270,6 +270,9 @@ /** \relates PoolQuery Stream output. */ std::ostream & operator<<( std::ostream & str, const PoolQuery & obj ); + bool equal(const PoolQuery& a, const PoolQuery& b); + bool operator==(const PoolQuery& a, const PoolQuery& b); + /////////////////////////////////////////////////////////////////// // // CLASS NAME : PoolQuery::ResultIterator -- To unsubscribe, e-mail: zypp-commit+unsubscribe@opensuse.org For additional commands, e-mail: zypp-commit+help@opensuse.org