Imported Upstream version 14.45.0
[platform/upstream/libzypp.git] / zypp / ProblemSolution.h
index 56ee1ce..a239817 100644 (file)
 #include <list>
 #include <string>
 
-#include "zypp/ProblemTypes.h"
+#include "zypp/base/ReferenceCounted.h"
+#include "zypp/base/PtrTypes.h"
+#include "zypp/solver/detail/Resolver.h"
 #include "zypp/ResolverProblem.h"
+#include "zypp/solver/detail/SolutionAction.h"
+#include "zypp/solver/detail/Types.h"
 
 /////////////////////////////////////////////////////////////////////////
 namespace zypp
-{
-  /////////////////////////////////////////////////////////////////////////
-  /// \class ProblemSolution
-  /// \brief Class representing one possible solution to a problem found during resolving
-  ///
-  /// All problems should have at least 2-3 (mutually exclusive) solutions:
-  ///
-  ///    -      Undo: Do not perform the offending transaction
-  ///   (do not install the package that had unsatisfied requirements,
-  ///    do not remove  the package that would break other packages' requirements)
-  ///
-  ///    - Remove referrers: Remove all packages that would break because
-  ///  they depend on the package that is requested to be removed
-  ///
-  ///    - Ignore: Inject artificial "provides" for a missing requirement
-  ///  (pretend that requirement is satisfied)
-  /////////////////////////////////////////////////////////////////////////
-  class ProblemSolution : public base::ReferenceCounted
-  {
-  public:
-    typedef solver::detail::SolutionAction_Ptr SolutionAction_Ptr;
-    typedef solver::detail::SolutionActionList SolutionActionList;
-
-    /** Constructor. */
-    ProblemSolution();
-
-    /** Constructor. */
-    ProblemSolution( std::string description );
-
-    /** Constructor. */
-    ProblemSolution( std::string description, std::string details );
-
-   /** Destructor. */
-    virtual ~ProblemSolution();
+{ ///////////////////////////////////////////////////////////////////////
 
 
     /**
-     * Return a one-line text description of this solution.
+     * Class representing one possible solution to one problem found during resolving
+     *
+     * All problems should have at least 2-3 (mutually exclusive) solutions:
+     *
+     *    -     Undo: Do not perform the offending transaction
+     *  (do not install the package that had unsatisfied requirements,
+     *   do not remove  the package that would break other packages' requirements)
+     *
+     *    - Remove referrers: Remove all packages that would break because
+     * they depend on the package that is requested to be removed
+     *
+     *    - Ignore: Inject artificial "provides" for a missing requirement
+     * (pretend that requirement is satisfied)
      **/
-    const std::string & description() const;
-
-    /**
-     * Return a (possibly multi-line) detailed description of this
-     * solution or an empty string if there are no useful details.
-     **/
-    const std::string & details() const;
-
-    /**
-     * Return the list of actions forming this solution.
-     **/
-    const SolutionActionList & actions() const;
-
-    /**
-     * Set description of the solution.
-     **/
-    void setDescription( std::string description );
-
-    /**
-     * Set detail description of the solution.
-     **/
-    void setDetails( std::string details );
-
-    /**
-     * Collect multiple action descriptions in \ref details (NL separated)
-     **/
-    void pushDescriptionDetail( std::string description, bool front = false );
-
-
-    /**
-     * Add an action to the actions list.
-     **/
-    void addAction( SolutionAction_Ptr action );
-
-
-  private:
-    class Impl;
-    RWCOW_pointer<Impl> _pimpl;
-  };
-
-  /** \relates ProblemSolution Stream output */
-  std::ostream& operator<<(std::ostream&, const ProblemSolution & obj );
-
-  /** \relates ProblemSolution Stream output */
-  std::ostream& operator<<(std::ostream&, const ProblemSolutionList & obj );
-
-} // namespace zypp
+    class ProblemSolution : public base::ReferenceCounted
+    {
+    protected:
+
+       /**
+        * Clear all data.
+        * In particular, delete all members of _actions.
+        **/
+       void clear();
+
+       //
+       // Data members
+       //
+       ResolverProblem_Ptr     _problem;
+       solver::detail::CSolutionActionList     _actions;
+       std::string             _description;
+       std::string             _details;
+
+    public:
+
+       /**
+        * Constructor.
+        **/
+       ProblemSolution( ResolverProblem_Ptr parent, const  std::string & description, const std::string & details );
+
+       /**
+        * Destructor.
+        **/
+       ~ProblemSolution();
+
+       // ---------------------------------- I/O
+
+       friend std::ostream& operator<<(std::ostream&, const ProblemSolution & solution);
+       friend std::ostream& operator<<(std::ostream&, const ProblemSolutionList & solutionlist);
+       friend std::ostream& operator<<(std::ostream&, const CProblemSolutionList & solutionlist);
+
+       // ---------------------------------- accessors
+       /**
+        * Return a one-line text description of this solution.
+        **/
+       std::string description() const { return _description; }
+
+       /**
+        * Return a (possibly multi-line) detailed description of this
+        * solution or an empty string if there are no useful details.
+        **/
+       std::string details() const { return _details; }
+
+       /**
+        * Return the parent dependency problem.
+        **/
+       ResolverProblem_Ptr problem() const { return _problem; }
+
+       // ---------------------------------- methods
+
+       /**
+        * Apply this solution, i.e. execute all of its actions.
+        *
+        * Returns 'true' on success, 'false' if actions could not be performed.
+        **/
+       bool apply (solver::detail::Resolver & resolver);
+
+       /**
+        * Add an action to the actions list.
+        **/
+       void addAction( solver::detail::SolutionAction_constPtr action );
+
+       solver::detail::CSolutionActionList actions() {return _actions;}
+
+    };
+
+
+    ///////////////////////////////////////////////////////////////////////
+};// namespace zypp
 /////////////////////////////////////////////////////////////////////////
+
 #endif // ZYPP_PROBLEMSOLUTION_H