#include <zypp/Arch.h>
#include <zypp/Edition.h>
#include <zypp/Rel.h>
+#include <zypp/Capability.h>
using namespace std;
{
INT << "===[START]==========================================" << endl;
- DBG << Edition() << endl;
- DBG << Edition("") << endl;
-
- DBG << Edition("-","","") << endl;
-
- chk( "1.2.3-4.5.6" );
- chk( "3:1.2.3-4.5.6" );
-
- chk( "3:1.2.3-4.5.6-3" );
+ MIL << Capability() << Capability() << endl;
+ MIL << Capability() << Capability() << endl;
INT << "===[END]============================================" << endl;
return 0;
#include "zypp/Capability.h"
#include "zypp/capability/CapabilityImpl.h"
+#include "zypp/capability/NullCap.h"
#include "zypp/SolverContext.h"
// METHOD NAME : Capability::Capability
// METHOD TYPE : Ctor
//
+ Capability::Capability()
+ : _pimpl( capability::NullCap::instance() )
+ {}
+
+ ///////////////////////////////////////////////////////////////////
+ //
+ // METHOD NAME : Capability::Capability
+ // METHOD TYPE : Ctor
+ //
Capability::Capability( Impl_Ptr impl_r )
: _pimpl( impl_r )
{}
//
/** Resolvable capabilitiy.
*
+ * Capability is created by a Factory class. Only a default ctor
+ * creating a dummy capability is provided.
+ * \code
+ * Capability cap;
+ * try
+ * {
+ * cap = CapFactory().parse( ResTraits<Patch>::_kind,
+ * parsed.name,
+ * parsed.op,
+ * Edition( parsed.ver,
+ * parsed.rel,
+ * parsed.epoch ) );
+ * }
+ * catch ( const Exception & excpt_r )
+ * {
+ * ERR << excpt_r << endl;
+ * ... Or maybe just WAR, or ?
+ * }
+ * \endcode
* \see CapFactory: Factory creating Capability.
*
* \invariant Nonzero \c _pimpl
* \invariant Unified \c _pimpl asserted by CapFactory
+ *
+ * \todo Need a trival return from matches. E.g. Conditional
+ * cpabilities must be able to indicate that they should be
+ * treated as if they were not present at all, if the precondition
+ * does no apply. Same for the defaut Capability.
*/
class Capability
{
/** Factory */
typedef CapFactory Factory;
+ /** DefaultCtor creating a dummy Capability. */
+ Capability();
+
/** Dtor */
virtual ~Capability();
ConditionalCap.h\
FileCap.h \
NamedCap.h \
+ NullCap.h \
OrCap.h \
VersionedCap.h
\
FileCap.cc \
NamedCap.cc \
+ NullCap.cc \
VersionedCap.cc
## ##################################################
--- /dev/null
+/*---------------------------------------------------------------------\
+| ____ _ __ __ ___ |
+| |__ / \ / / . \ . \ |
+| / / \ V /| _/ _/ |
+| / /__ | | | | | | |
+| /_____||_| |_| |_| |
+| |
+\---------------------------------------------------------------------*/
+/** \file zypp/capability/NullCap.cc
+ *
+*/
+#include "zypp/capability/NullCap.h"
+
+using namespace std;
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////
+ namespace capability
+ { /////////////////////////////////////////////////////////////////
+
+ const CapabilityImpl::Kind NullCap::_kind( "NullCap" );
+
+ CapabilityImpl_Ptr NullCap::_instance;
+
+ ///////////////////////////////////////////////////////////////////
+
+ NullCap::NullCap()
+ : CapabilityImpl( Resolvable::Kind() ) // Resolvable::Kind ANY
+ {}
+
+ CapabilityImpl_Ptr NullCap::instance()
+ {
+ if ( ! _instance )
+ _instance = new NullCap;
+ return _instance;
+ }
+
+ const CapabilityImpl::Kind & NullCap::kind() const
+ { return _kind; }
+
+ std::string NullCap::asString() const
+ { return std::string(); }
+
+ bool NullCap::matches( Resolvable::constPtr resolvable_r,
+ const SolverContext & colverContext_r ) const
+ {
+ return false;
+ }
+
+ /////////////////////////////////////////////////////////////////
+ } // namespace capability
+ ///////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
--- /dev/null
+/*---------------------------------------------------------------------\
+| ____ _ __ __ ___ |
+| |__ / \ / / . \ . \ |
+| / / \ V /| _/ _/ |
+| / /__ | | | | | | |
+| /_____||_| |_| |_| |
+| |
+\---------------------------------------------------------------------*/
+/** \file zypp/capability/NullCap.h
+ *
+*/
+#ifndef ZYPP_CAPABILITY_NAMEDCAP_H
+#define ZYPP_CAPABILITY_NAMEDCAP_H
+
+#include "zypp/capability/CapabilityImpl.h"
+
+///////////////////////////////////////////////////////////////////
+namespace zypp
+{ /////////////////////////////////////////////////////////////////
+ ///////////////////////////////////////////////////////////////////
+ namespace capability
+ { /////////////////////////////////////////////////////////////////
+
+ ///////////////////////////////////////////////////////////////////
+ //
+ // CLASS NAME : NullCap
+ //
+ /** A dummy Capability.
+ *
+ * It's a singleton, so you can't construct one. Call \ref instance to
+ * get a CapabilityImpl_Ptr to the NullCap.
+ *
+ * \todo implement matches().
+ */
+ class NullCap : public CapabilityImpl
+ {
+ public:
+ /** Get a Ptr to the NULLCap. */
+ static CapabilityImpl_Ptr instance();
+
+ private:
+ /** Private Ctor.
+ * Call \ref instance to get a CapabilityImpl_Ptr to the NullCap.
+ *
+ * \todo Resolvable::Kind ANY would be desirable.
+ */
+ NullCap();
+
+ public:
+ /** */
+ virtual const Kind & kind() const;
+
+ /** */
+ virtual std::string asString() const;
+
+ /** */
+ virtual bool matches( Resolvable::constPtr resolvable_r,
+ const SolverContext & colverContext_r ) const;
+
+ private:
+ /** */
+ static const Kind _kind;
+ /** */
+ static CapabilityImpl_Ptr _instance;
+ };
+ ///////////////////////////////////////////////////////////////////
+
+ /////////////////////////////////////////////////////////////////
+ } // namespace capability
+ ///////////////////////////////////////////////////////////////////
+ /////////////////////////////////////////////////////////////////
+} // namespace zypp
+///////////////////////////////////////////////////////////////////
+#endif // ZYPP_CAPABILITY_NAMEDCAP_H
#include "zypp/source/yum/YUMScriptImpl.h"
#include "zypp/Arch.h"
#include "zypp/Edition.h"
-#include <zypp/detail/ResObjectFactory.h>
using namespace std;