- Expose kind of Capability in public interface. Allow implementaion
authorMichael Andres <ma@suse.de>
Tue, 14 Feb 2006 10:22:59 +0000 (10:22 +0000)
committerMichael Andres <ma@suse.de>
Tue, 14 Feb 2006 10:22:59 +0000 (10:22 +0000)
  to retrieve SplitCap related data (#150233)

zypp/capability/CapTraits.cc
zypp/capability/CapTraits.h
zypp/capability/CapabilityImpl.h
zypp/capability/SplitCap.cc
zypp/capability/SplitCap.h

index 1b83b3a..f8fe9c9 100644 (file)
@@ -20,21 +20,21 @@ namespace zypp
   { /////////////////////////////////////////////////////////////////
 
     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
index 40a75dc..9a2464b 100644 (file)
 ///////////////////////////////////////////////////////////////////
 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;
@@ -41,7 +42,7 @@ namespace zypp
 
     /** CapTraits. Defines common types and the Kind value. */
     template<typename _Cap>
-      struct CapTraits : public CapTraitsBase
+      struct CapTraits : public CapabilityTraits
       {
         static const KindType kind;
       };
index b22385a..c234dd2 100644 (file)
@@ -15,9 +15,8 @@
 #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"
 
 ///////////////////////////////////////////////////////////////////
@@ -41,16 +40,16 @@ namespace zypp
       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; }
@@ -74,7 +73,7 @@ namespace zypp
       { 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.
       */
@@ -87,6 +86,16 @@ namespace zypp
       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 );
index 7de67ac..9cf2b23 100644 (file)
@@ -31,6 +31,21 @@ namespace zypp
     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
   ///////////////////////////////////////////////////////////////////
index eb8d7aa..372b728 100644 (file)
@@ -64,8 +64,11 @@ namespace zypp
       /**  <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:
       /**  */