{ /////////////////////////////////////////////////////////////////
template<>
- const CapTraitsBase::KindType CapTraits<NullCap> ::kind( "NullCap" );
+ const CapabilityTraits::KindType CapTraits<NullCap> ::kind( "NullCap" );
template<>
- const CapTraitsBase::KindType CapTraits<FileCap> ::kind( "FileCap" );
+ const CapabilityTraits::KindType CapTraits<FileCap> ::kind( "FileCap" );
template<>
- const CapTraitsBase::KindType CapTraits<NamedCap> ::kind( "NamedCap" );
+ const CapabilityTraits::KindType CapTraits<NamedCap> ::kind( "NamedCap" );
template<> // VersionedCap IsA NamedCap
- const CapTraitsBase::KindType CapTraits<VersionedCap> ::kind( "NamedCap" );
+ const CapabilityTraits::KindType CapTraits<VersionedCap> ::kind( "NamedCap" );
template<>
- const CapTraitsBase::KindType CapTraits<SplitCap> ::kind( "SplitCap" );
+ const CapabilityTraits::KindType CapTraits<SplitCap> ::kind( "SplitCap" );
template<>
- const CapTraitsBase::KindType CapTraits<HalCap> ::kind( "HalCap" );
+ const CapabilityTraits::KindType CapTraits<HalCap> ::kind( "HalCap" );
template<>
- const CapTraitsBase::KindType CapTraits<OrCap> ::kind( "OrCap" );
+ const CapabilityTraits::KindType CapTraits<OrCap> ::kind( "OrCap" );
template<>
- const CapTraitsBase::KindType CapTraits<ConditionalCap>::kind( "ConditionalCap" );
+ const CapabilityTraits::KindType CapTraits<ConditionalCap>::kind( "ConditionalCap" );
/////////////////////////////////////////////////////////////////
} // namespace capability
///////////////////////////////////////////////////////////////////
namespace zypp
{ /////////////////////////////////////////////////////////////////
+
+ class Capability;
+
///////////////////////////////////////////////////////////////////
namespace capability
{ /////////////////////////////////////////////////////////////////
- class CapabilityImpl;
-
- /** Base of CapTraits. Defines the Resolvable::Kind type. */
- struct CapTraitsBase
+ /** Base of CapTraits. Defines the Capability::Kind type. */
+ struct CapabilityTraits
{
- typedef KindOf<CapabilityImpl> KindType;
+ typedef KindOf<Capability> KindType;
};
class NullCap;
/** CapTraits. Defines common types and the Kind value. */
template<typename _Cap>
- struct CapTraits : public CapTraitsBase
+ struct CapTraits : public CapabilityTraits
{
static const KindType kind;
};
#include "zypp/base/ReferenceCounted.h"
#include "zypp/base/NonCopyable.h"
-#include "zypp/capability/CapTraits.h"
-
-#include "zypp/Resolvable.h" // maybe ResTraits are sufficient?
+#include "zypp/Capability.h"
+#include "zypp/Resolvable.h"
#include "zypp/CapMatch.h"
///////////////////////////////////////////////////////////////////
typedef CapabilityImpl_Ptr Ptr;
typedef CapabilityImpl_constPtr constPtr;
- typedef CapTraitsBase::KindType Kind;
+ typedef CapabilityTraits::KindType Kind;
public:
+ /** Kind of capabiliy. */
+ virtual const Kind & kind() const = 0;
+
/** Kind of Resolvable \c this refers to. */
const Resolvable::Kind & refers() const
{ return _refers; }
- /** Kind of capabiliy. */
- virtual const Kind & kind() const = 0;
-
/** Relevant per default. */
virtual bool relevant() const
{ return true; }
{ return encode(); }
/** \deprecated A string representation usg. without
- * edition range. All Capabilities that match each other
+ * edition range. All Capabilities that may match each other
* must have the same index. That's ugly, but the way the
* solver currently uses it.
*/
virtual Edition edition() const
{ return Edition::noedition; }
+ public:
+ /** Solver hack. */
+ struct SplitInfo
+ {
+ std::string name;
+ std::string path;
+ };
+ /** Solver hack. */
+ static SplitInfo getSplitInfo( const Capability & cap );
+
protected:
/** Ctor taking the kind of Resolvable \c this refers to.*/
CapabilityImpl( const Resolvable::Kind & refers_r );
std::string SplitCap::encode() const
{ return _name + ":" + _path; }
+ ///////////////////////////////////////////////////////////////////
+ // CLASS NAME : CapabilityImpl
+ ///////////////////////////////////////////////////////////////////
+ /** Solver hack. */
+ CapabilityImpl::SplitInfo CapabilityImpl::getSplitInfo( const Capability & cap )
+ {
+ SplitInfo ret;
+ intrusive_ptr<const SplitCap> splitPtr( asKind<SplitCap>( cap._pimpl.getPtr() ) );
+ if ( splitPtr )
+ {
+ ret.name = splitPtr->name();
+ ret.path = splitPtr->path();
+ }
+ return ret;
+ }
/////////////////////////////////////////////////////////////////
} // namespace capability
///////////////////////////////////////////////////////////////////
/** <tt>name:/path</tt> */
virtual std::string encode() const;
- virtual std::string name_str(void) const { return _name; }
- virtual std::string path_str(void) const { return _path; }
+ const std::string & name() const
+ { return _name; }
+
+ const std::string & path() const
+ { return _path; }
private:
/** */