backup
authorMichael Andres <ma@suse.de>
Tue, 25 Oct 2005 21:48:23 +0000 (21:48 +0000)
committerMichael Andres <ma@suse.de>
Tue, 25 Oct 2005 21:48:23 +0000 (21:48 +0000)
17 files changed:
test/devel.ma/Main.cc
test/devel.ma/Makefile.am
test/devel.ma/main.cc [new file with mode: 0644]
test/devel.ma/main.h [new file with mode: 0644]
zypp/CapFactory.cc
zypp/CapFactory.h
zypp/Capability.cc
zypp/Capability.h
zypp/Resolvable.h
zypp/ResolvableFwd.h
zypp/base/PtrTypes.h
zypp/capability/Capabilities.h [new file with mode: 0644]
zypp/capability/CapabilityImpl.cc
zypp/capability/CapabilityImpl.h
zypp/capability/Makefile.am
zypp/capability/NamedCap.cc [new file with mode: 0644]
zypp/capability/NamedCap.h

index cb625156fb6eb55de72f7a7be8ffa730ab3d8432..24242aed6830db8035f048c2343c8c407fe89a7b 100644 (file)
@@ -7,6 +7,7 @@
 #include <zypp/Capability.h>
 #include <zypp/CapFactory.h>
 #include <zypp/CapSet.h>
+#include "main.h"
 
 #define TAG INT << __PRETTY_FUNCTION__ << std::endl
 
@@ -16,7 +17,7 @@ namespace zypp
 
 using namespace std;
 using namespace zypp;
-
+#include <zypp/ResKind.h>
 /******************************************************************
 **
 **
@@ -30,7 +31,7 @@ struct CapSetInsert : public std::unary_function<const char *, void> {
     CapFactory _f;
     CapSetInsert( CapSet & x ) : _x(x) {}
     void operator()( const char * v )
-    { _x.insert( _f.parse( v ) ); }
+    { _x.insert( _f.parse( ResKind(), v ) ); }
 };
 
 int main( int argc, char * argv[] )
index 45abf23bce7a02502e48c46410ef6548a578bf8f..bcfa3359b4526eb14fc49f2f9a1f9cadabb04689 100644 (file)
@@ -15,7 +15,7 @@ LDADD =               $(top_srcdir)/zypp/lib@PACKAGE@.la
 
 ## ##################################################
 
-Main_SOURCES =                 Main.cc
+Main_SOURCES =                 Main.cc main.cc
 
 Main_debug_SOURCES =   $(Main_SOURCES)
 Main_debug_LDFLAGS =   -static
diff --git a/test/devel.ma/main.cc b/test/devel.ma/main.cc
new file mode 100644 (file)
index 0000000..da9fc74
--- /dev/null
@@ -0,0 +1,10 @@
+#include "main.h"
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+
+
+  /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
diff --git a/test/devel.ma/main.h b/test/devel.ma/main.h
new file mode 100644 (file)
index 0000000..bdf60c7
--- /dev/null
@@ -0,0 +1,12 @@
+#ifndef main_h
+#define main_h
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+
+
+  /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
+#endif // main_h
index 26c05e08e4489b4d4971802e78b6ceb3b828c48b..95613ae4bb1d581ecefaba73db1dd02919dbb6f4 100644 (file)
  *
 */
 #include <iostream>
+#include <functional>
+#include <set>
 
 #include "zypp/base/ReferenceCounted.h"
 #include "zypp/base/NonCopyable.h"
 #include "zypp/CapFactory.h"
 
-#include "zypp/capability/FileCap.h"
+#include "zypp/capability/Capabilities.h"
 
 using namespace std;
 
+///////////////////////////////////////////////////////////////////
+namespace
+{ /////////////////////////////////////////////////////////////////
+
+  typedef zypp::capability::CapabilityImplPtr CapabilityImplPtr;
+
+  /** \todo check set ordering to assert no dups */
+  struct USetOrder : public std::binary_function<CapabilityImplPtr, CapabilityImplPtr, bool>
+  {
+    bool operator()( const CapabilityImplPtr & lhs,
+                     const CapabilityImplPtr & rhs ) const
+    { return lhs->asString() < rhs->asString(); }
+  };
+
+  typedef std::set<CapabilityImplPtr,USetOrder> USet;
+
+  USet _uset;
+
+  /////////////////////////////////////////////////////////////////
+} // namespace
+///////////////////////////////////////////////////////////////////
+
 ///////////////////////////////////////////////////////////////////
 namespace zypp
 { /////////////////////////////////////////////////////////////////
@@ -97,10 +121,13 @@ namespace zypp
   //   METHOD NAME : CapFactory::parse
   //   METHOD TYPE : Capability
   //
-  Capability CapFactory::parse( const std::string & strval_r ) const
+  /** \todo fix it */
+  Capability CapFactory::parse( const ResKind & refers_r, const std::string & strval_r ) const
   {
     // fix
-    return Capability( new capability::FileCap );
+    CapabilityImplPtr newcap( new capability::NamedCap( refers_r, strval_r ) );
+    USet::iterator in( _uset.insert( newcap ).first );
+    return Capability( *in );
   }
 
   /******************************************************************
index 5ae3d240b75ecb64dc28007cc51f575b81009d4f..849d83332bee8bb0097725f4d685afe5785ae2c3 100644 (file)
@@ -46,9 +46,13 @@ namespace zypp
     ~CapFactory();
 
   public:
-    /**  */
-    Capability parse( const std::string & strval_r ) const;
-
+    /** */
+    Capability parse( const ResKind & refers_r, const std::string & strval_r ) const;
+    /*
+    template<typename _Res>
+      Capability parse( const std::string & strval_r ) const
+      { return parse( _Res::kind(), strval_r ); }
+    */
   private:
     /** Pointer to implementation */
     detail::CapFactoryImplPtr _pimpl;
index 7b440724c3c2d73f5fb97cd8d03f3fe64bded4de..ccf554fbed1b7fbd484dafb783852cfa584d9d60 100644 (file)
@@ -47,11 +47,17 @@ namespace zypp
   Capability::constImplPtr Capability::sayFriend() const
   { return _pimpl; }
 
+  const ResKind & Capability::refers() const
+  { return _pimpl->refers(); }
+
+  std::string Capability::asString() const
+  { return _pimpl->asString(); }
+
   bool Capability::matches( constResolvablePtr resolvable_r,
-                            const SolverContext & solverContext_r )
+                            const SolverContext & solverContext_r ) const
   { return _pimpl->matches( resolvable_r, solverContext_r ); }
 
-  bool Capability::matches( constResolvablePtr resolvable_r )
+  bool Capability::matches( constResolvablePtr resolvable_r ) const
   { return _pimpl->matches( resolvable_r, SolverContext() ); }
 
   /******************************************************************
index 3a12a428469f02b0599a59ad69a98a2bf18812e1..b206a0b4d07dffec1c80c9769a0b6d33a7db4dcb 100644 (file)
@@ -36,7 +36,9 @@ namespace zypp
   //
   //   CLASS NAME : Capability
   //
-  /** */
+  /** Resolvable capabilitiy.
+   * \invariant Nonzero \c _pimpl
+  */
   class Capability
   {
   private:
@@ -53,11 +55,15 @@ namespace zypp
     virtual ~Capability();
 
   public:
+    /**  */
+    const ResKind & refers() const;
+    /**  */
+    std::string asString() const;
     /**  */
     bool matches( constResolvablePtr resolvable_r,
-                  const SolverContext & colverContext_r );
+                  const SolverContext & colverContext_r ) const;
     /**  */
-    bool matches( constResolvablePtr resolvable_r );
+    bool matches( constResolvablePtr resolvable_r ) const;
 
   private:
     /** Pointer to implementation */
index cbece41f6c16c2c98f02da66232696a7323a4a44..80f7c51f9e7b98ad59419c05041b705ab8176f35 100644 (file)
@@ -18,6 +18,8 @@
 #include "zypp/base/ReferenceCounted.h"
 #include "zypp/base/NonCopyable.h"
 
+#include "zypp/ResolvableFwd.h"
+
 ///////////////////////////////////////////////////////////////////
 namespace zypp
 { /////////////////////////////////////////////////////////////////
@@ -28,11 +30,6 @@ namespace zypp
     /////////////////////////////////////////////////////////////////
   } // namespace detail
   ///////////////////////////////////////////////////////////////////
-  DEFINE_PTR_TYPE(Resolvable)
-
-  class ResKind;
-  class Edition;
-  class Arch;
 
   ///////////////////////////////////////////////////////////////////
   //
index c1ad9f9efd72de5dedc9c47bf57f5f70d956500b..6518a384430a7e66c76d94a265c18f5ccd90adb5 100644 (file)
 namespace zypp
 { /////////////////////////////////////////////////////////////////
 
+  class ResKind;
+  class Edition;
+  class Arch;
+  class Capability;
+
   DEFINE_PTR_TYPE(Resolvable)
 
   /////////////////////////////////////////////////////////////////
index 1e526f28b76519633bc68ff2c808eb9890d61158..6b82543a532ddb254142295f3ac8443e41759e0a 100644 (file)
@@ -36,6 +36,10 @@ namespace zypp
      * \li \c shared_ptr Object ownership shared among multiple pointers
      *
      * \li \c weak_ptr Non-owning observers of an object owned by shared_ptr.
+     *
+     * \todo Intrusive Ptr class which supports constness. Used as PIMPL.
+     * Offers 'const Impl *' in const context, otherwise 'Impl *'. to
+     * prevent const classes from calling nonconst Impl methods.
     */
     /*@{*/
 
diff --git a/zypp/capability/Capabilities.h b/zypp/capability/Capabilities.h
new file mode 100644 (file)
index 0000000..0a4dfde
--- /dev/null
@@ -0,0 +1,18 @@
+/*---------------------------------------------------------------------\
+|                          ____ _   __ __ ___                          |
+|                         |__  / \ / / . \ . \                         |
+|                           / / \ V /|  _/  _/                         |
+|                          / /__ | | | | | |                           |
+|                         /_____||_| |_| |_|                           |
+|                                                                      |
+\---------------------------------------------------------------------*/
+/** \file      zypp/capability/Capabilities.h
+ *
+*/
+#ifndef ZYPP_CAPABILITY_CAPABILITIES_H
+#define ZYPP_CAPABILITY_CAPABILITIES_H
+
+#include "zypp/capability/CapabilityImpl.h"
+#include "zypp/capability/NamedCap.h"
+
+#endif // ZYPP_CAPABILITY_CAPABILITIES_H
index 717579dea724e8b1d840915baf3ea1dc7115cf02..cd04c9f63c99cad7cdbc6ed51d2efda4cdd539bf 100644 (file)
@@ -25,10 +25,11 @@ namespace zypp
 
     ///////////////////////////////////////////////////////////////////
     //
-    // METHOD NAME : CapabilityImpl::~CapabilityImpl
-    // METHOD TYPE : Dtor
+    // METHOD NAME : CapabilityImpl::CapabilityImpl
+    // METHOD TYPE : Ctor
     //
-    CapabilityImpl::~CapabilityImpl()
+    CapabilityImpl::CapabilityImpl( const ResKind & refers_r )
+    : _refers( refers_r )
     {}
 
     /******************************************************************
@@ -38,7 +39,7 @@ namespace zypp
     */
     std::ostream & operator<<( std::ostream & str, const CapabilityImpl & obj )
     {
-      return str << "CapabilityImpl";
+      return str << '[' << obj.refers() << "] " << obj.asString();
     }
 
     /////////////////////////////////////////////////////////////////
index 4ce52077bdd121d8fef63c0737c1adfc76609b08..933944b65eeabd18eaf77713ab9a293985f3befd 100644 (file)
@@ -17,6 +17,7 @@
 
 #include "zypp/ResolvableFwd.h"
 #include "zypp/SolverContextFwd.h"
+#include "zypp/ResKind.h"
 
 ///////////////////////////////////////////////////////////////////
 namespace zypp
@@ -26,6 +27,9 @@ namespace zypp
   { /////////////////////////////////////////////////////////////////
     DEFINE_PTR_TYPE(CapabilityImpl)
 
+    /** \todo Check implementation */
+    typedef std::string CapKind;
+
     ///////////////////////////////////////////////////////////////////
     //
     // CLASS NAME : CapabilityImpl
@@ -34,13 +38,24 @@ namespace zypp
     class CapabilityImpl : public base::ReferenceCounted, private base::NonCopyable
     {
     public:
-      /** Dtor */
-      virtual ~CapabilityImpl();
+      /** Ctor */
+      CapabilityImpl( const ResKind & refers_r );
 
     public:
+      /**  */
+      virtual const CapKind & kind() const = 0;
+      /**  */
+      const ResKind & refers() const
+      { return _refers; }
+      /**  */
+      virtual std::string asString() const = 0;
       /**  */
       virtual bool matches( constResolvablePtr resolvable_r,
-                            const SolverContext & colverContext_r ) = 0;
+                            const SolverContext & colverContext_r ) const = 0;
+
+    private:
+      /**  */
+      ResKind _refers;
     };
     ///////////////////////////////////////////////////////////////////
 
index 1c3212497afc6cb86bf1e4d144a131758689ac05..84062d8335b3c776601902a5c2544a440b2adc73 100644 (file)
@@ -5,7 +5,9 @@ SUBDIRS =
 
 ## ##################################################
 
-include_HEADERS = CapabilityImpl.h \
+include_HEADERS = \
+       CapabilityImpl.h\
+       Capabilities.h  \
        \
        ConditionalCap.h\
        FileCap.h       \
@@ -18,6 +20,8 @@ noinst_LTLIBRARIES =  lib@PACKAGE@_capability.la
 ## ##################################################
 
 lib@PACKAGE@_capability_la_SOURCES = \
-       CapabilityImpl.cc
+       CapabilityImpl.cc       \
+       \
+       NamedCap.cc
 
 ## ##################################################
diff --git a/zypp/capability/NamedCap.cc b/zypp/capability/NamedCap.cc
new file mode 100644 (file)
index 0000000..94c4ea3
--- /dev/null
@@ -0,0 +1,30 @@
+/*---------------------------------------------------------------------\
+|                          ____ _   __ __ ___                          |
+|                         |__  / \ / / . \ . \                         |
+|                           / / \ V /|  _/  _/                         |
+|                          / /__ | | | | | |                           |
+|                         /_____||_| |_| |_|                           |
+|                                                                      |
+\---------------------------------------------------------------------*/
+/** \file zypp/capability/NamedCap.cc
+ *
+*/
+#include "zypp/capability/NamedCap.h"
+
+using namespace std;
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+  ///////////////////////////////////////////////////////////////////
+  namespace capability
+  { /////////////////////////////////////////////////////////////////
+
+    const CapKind NamedCap::_kind( "NamedCap" );
+
+    /////////////////////////////////////////////////////////////////
+  } // namespace capability
+  ///////////////////////////////////////////////////////////////////
+  /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
index 69bb109b63a3750258f1aeb2437db377e079fc49..14f92f7900a32b6ba20c253a1fafcb16e8c3d15c 100644 (file)
@@ -29,10 +29,27 @@ namespace zypp
     class NamedCap : public CapabilityImpl
     {
     public:
+      /** Ctor */
+      NamedCap( const ResKind & refers_r, const std::string & name_r )
+      : CapabilityImpl( refers_r )
+      , _name( name_r )
+      {}
+    public:
+      /**  */
+      virtual const CapKind & kind() const
+      { return _kind; }
+      /**  */
+      virtual std::string asString() const
+      { return _name; }
       /**  */
-      bool matches( constResolvablePtr resolvable_r,
-                    const SolverContext & colverContext_r )
+      virtual bool matches( constResolvablePtr resolvable_r,
+                            const SolverContext & colverContext_r ) const
       { return false; }
+    private:
+      /**  */
+      static const CapKind _kind;
+      /**  */
+      std::string _name;
     };
     ///////////////////////////////////////////////////////////////////