Author: mlandres
Date: Mon Jan 28 17:41:42 2008
New Revision: 8380
URL: http://svn.opensuse.org/viewcvs/zypp?rev=8380&view=rev
Log:
fix CapMatch
Modified:
branches/tmp/ma/jump_sat/libzypp/zypp/CapMatch.h
branches/tmp/ma/jump_sat/libzypp/zypp/Capability.cc
branches/tmp/ma/jump_sat/libzypp/zypp/Capability.h
Modified: branches/tmp/ma/jump_sat/libzypp/zypp/CapMatch.h
URL: http://svn.opensuse.org/viewcvs/zypp/branches/tmp/ma/jump_sat/libzypp/zypp/CapMatch.h?rev=8380&r1=8379&r2=8380&view=diff
==============================================================================
--- branches/tmp/ma/jump_sat/libzypp/zypp/CapMatch.h (original)
+++ branches/tmp/ma/jump_sat/libzypp/zypp/CapMatch.h Mon Jan 28 17:41:42 2008
@@ -13,7 +13,7 @@
#define ZYPP_CAPMATCH_H
#include <iosfwd>
-#include "zypp/base/Deprecated.h"
+
///////////////////////////////////////////////////////////////////
namespace zypp
{ /////////////////////////////////////////////////////////////////
@@ -23,8 +23,10 @@
// CLASS NAME : CapMatch
//
/** Tri state Capability match result.
+ *
* CapMatch::irrelevant denotes a result value that should be ignored.
* Therfore it behaves neutral when used in <tt>! && ||</tt> expressions.
+ *
* \code
* CapMatch any
* (CapMatch::irrelevant && any) == any // true
@@ -32,9 +34,9 @@
* ( !CapMatch::irrelevant ) == CapMatch::irrelevant // true
* \endcode
*/
- class ZYPP_DEPRECATED CapMatch
+ class CapMatch
{
- enum ZYPP_DEPRECATED Result { NOMATCH, MATCH, IRRELEVANT };
+ enum Result { NOMATCH, MATCH, IRRELEVANT };
public:
@@ -42,9 +44,9 @@
: _result( val_r ? MATCH : NOMATCH )
{}
- static ZYPP_DEPRECATED const CapMatch yes;
- static ZYPP_DEPRECATED const CapMatch no;
- static ZYPP_DEPRECATED const CapMatch irrelevant;
+ static const CapMatch yes;
+ static const CapMatch no;
+ static const CapMatch irrelevant;
friend bool operator==( const CapMatch & lhs, const CapMatch & rhs )
{ return lhs._result == rhs._result; }
Modified: branches/tmp/ma/jump_sat/libzypp/zypp/Capability.cc
URL: http://svn.opensuse.org/viewcvs/zypp/branches/tmp/ma/jump_sat/libzypp/zypp/Capability.cc?rev=8380&r1=8379&r2=8380&view=diff
==============================================================================
--- branches/tmp/ma/jump_sat/libzypp/zypp/Capability.cc (original)
+++ branches/tmp/ma/jump_sat/libzypp/zypp/Capability.cc Mon Jan 28 17:41:42 2008
@@ -131,31 +131,50 @@
{}
const char * Capability::c_str() const
- { return ::dep2str( myPool().getPool(), _id ); }
+ { return( _id ? ::dep2str( myPool().getPool(), _id ) : "" ); }
- std::string Capability::string() const
- { return ::dep2str( myPool().getPool(), _id ); }
-
- bool Capability::_doMatch( sat::detail::IdType lhs, sat::detail::IdType rhs )
+ CapMatch Capability::_doMatch( sat::detail::IdType lhs, sat::detail::IdType rhs )
{
#warning MIGRATE TO SAT
#warning TESTCASE
if ( lhs == rhs )
- return true;
+ return CapMatch::yes;
CapDetail l( lhs );
- if ( ! l.isSimple() )
- return false;
-
CapDetail r( rhs );
- if ( r.isSimple() )
- return false;
+ switch ( l.kind() )
+ {
+ case CapDetail::NOCAP:
+ return( r.kind() == CapDetail::NOCAP ); // NOCAP matches NOCAP only
+ break;
+ case CapDetail::EXPRESSION:
+ return CapMatch::irrelevant;
+ break;
+ case CapDetail::NAMED:
+ case CapDetail::VERSIONED:
+ break;
+ }
+
+ switch ( r.kind() )
+ {
+ case CapDetail::NOCAP:
+ return CapMatch::no; // match case handled above
+ break;
+ case CapDetail::EXPRESSION:
+ return CapMatch::irrelevant;
+ break;
+ case CapDetail::NAMED:
+ case CapDetail::VERSIONED:
+ break;
+ }
+ // comparing two simple caps:
if ( l.name() != r.name() )
- return false;
+ return CapMatch::no;
+ // isNamed matches ANY edition:
if ( l.isNamed() || r.isNamed() )
- return true;
+ return CapMatch::yes;
// both are versioned:
return overlaps( Edition::MatchRange( l.op(), l.ed() ),
@@ -197,7 +216,7 @@
{
// : _kind( NOCAP ), _lhs( id_r ), _rhs( 0 ), _flag( 0 )
- if ( !_lhs )
+ if ( _lhs == sat::detail::emptyId || _lhs == sat::detail::noId )
return; // NOCAP
if ( ! ISRELDEP(_lhs) )
Modified: branches/tmp/ma/jump_sat/libzypp/zypp/Capability.h
URL: http://svn.opensuse.org/viewcvs/zypp/branches/tmp/ma/jump_sat/libzypp/zypp/Capability.h?rev=8380&r1=8379&r2=8380&view=diff
==============================================================================
--- branches/tmp/ma/jump_sat/libzypp/zypp/Capability.h (original)
+++ branches/tmp/ma/jump_sat/libzypp/zypp/Capability.h Mon Jan 28 17:41:42 2008
@@ -16,6 +16,7 @@
#include <set>
#include "zypp/base/SafeBool.h"
+#include "zypp/base/Deprecated.h"
#include "zypp/sat/detail/PoolMember.h"
@@ -57,7 +58,7 @@
{
public:
// legacy
- ZYPP_DEPRECATED std::string index() const { return std::string(); }
+ std::string index() const ZYPP_DEPRECATED;
public:
enum CtorFlag { PARSED, UNPARSED };
@@ -109,53 +110,58 @@
/** Conversion to <tt>const char *</tt> */
const char * c_str() const;
- /** Conversion to <tt>std::string</tt> */
- std::string string() const;
-
/** \overload */
std::string asString() const
- { return string(); }
+ { return c_str(); }
public:
/** Helper providing more detailed information about a \ref Capability. */
CapDetail detail() const;
public:
- /** \name Match two simple Capabilities
+ /** \name Match two simple capabilities.
+ *
+ * Two simple capabilities match if they have the same \c name
+ * and their \c edition ranges overlap. Where no edition matches
+ * ANY edition. \see \ref Edition::match.
+ *
+ * If a capability expression is involved, \ref matches returns
+ * \ref CapMatch::irrelevant.
+ *
* \todo check whether we must promote string to Capability in order to match.
*/
//@{
- static bool matches( const Capability & lhs, const Capability & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
- static bool matches( const Capability & lhs, const IdString & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
- static bool matches( const Capability & lhs, const std::string & rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
- static bool matches( const Capability & lhs, const char * rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() );}
-
- static bool matches( const IdString & lhs, const Capability & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
- static bool matches( const IdString & lhs, const IdString & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
- static bool matches( const IdString & lhs, const std::string & rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
- static bool matches( const IdString & lhs, const char * rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
-
- static bool matches( const std::string & lhs, const Capability & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() );}
- static bool matches( const std::string & lhs, const IdString & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() ); }
- static bool matches( const std::string & lhs, const std::string & rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
- static bool matches( const std::string & lhs, const char * rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
-
- static bool matches( const char * lhs, const Capability & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() );}
- static bool matches( const char * lhs, const IdString & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() ); }
- static bool matches( const char * lhs, const std::string & rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
- static bool matches( const char * lhs, const char * rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
-
- bool matches( const Capability & rhs ) const { return _doMatch( id(), rhs.id() ); }
- bool matches( const IdString & rhs ) const { return _doMatch( id(), rhs.id() ); }
- bool matches( const std::string & rhs ) const { return _doMatch( id(), Capability(rhs).id() ); }
- bool matches( const char * rhs ) const { return _doMatch( id(), Capability(rhs).id() ); }
+ static CapMatch matches( const Capability & lhs, const Capability & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
+ static CapMatch matches( const Capability & lhs, const IdString & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
+ static CapMatch matches( const Capability & lhs, const std::string & rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
+ static CapMatch matches( const Capability & lhs, const char * rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() );}
+
+ static CapMatch matches( const IdString & lhs, const Capability & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
+ static CapMatch matches( const IdString & lhs, const IdString & rhs ) { return _doMatch( lhs.id(), rhs.id() ); }
+ static CapMatch matches( const IdString & lhs, const std::string & rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
+ static CapMatch matches( const IdString & lhs, const char * rhs ) { return _doMatch( lhs.id(), Capability(rhs).id() ); }
+
+ static CapMatch matches( const std::string & lhs, const Capability & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() );}
+ static CapMatch matches( const std::string & lhs, const IdString & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() ); }
+ static CapMatch matches( const std::string & lhs, const std::string & rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
+ static CapMatch matches( const std::string & lhs, const char * rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
+
+ static CapMatch matches( const char * lhs, const Capability & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() );}
+ static CapMatch matches( const char * lhs, const IdString & rhs ) { return _doMatch( Capability(lhs).id(), rhs.id() ); }
+ static CapMatch matches( const char * lhs, const std::string & rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
+ static CapMatch matches( const char * lhs, const char * rhs ) { return _doMatch( Capability(lhs).id(), Capability(rhs).id() ); }
+
+ CapMatch matches( const Capability & rhs ) const { return _doMatch( id(), rhs.id() ); }
+ CapMatch matches( const IdString & rhs ) const { return _doMatch( id(), rhs.id() ); }
+ CapMatch matches( const std::string & rhs ) const { return _doMatch( id(), Capability(rhs).id() ); }
+ CapMatch matches( const char * rhs ) const { return _doMatch( id(), Capability(rhs).id() ); }
//@}
/** \ref matches functor.
*/
- struct Matches: public std::binary_function