00001 #
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef ZYPP_SOLVER_DETAIL_RESOLVER_INFO_H
00023 #define ZYPP_SOLVER_DETAIL_RESOLVER_INFO_H
00024
00025 #include "zypp/solver/detail/Types.h"
00026
00028 namespace zypp
00029 {
00030
00031 namespace solver
00032 {
00033
00034 namespace detail
00035 {
00036
00037 typedef enum {
00038 RESOLVER_INFO_TYPE_INVALID = 0,
00039 RESOLVER_INFO_TYPE_NEEDED_BY,
00040 RESOLVER_INFO_TYPE_CONFLICTS_WITH,
00041 RESOLVER_INFO_TYPE_OBSOLETES,
00042 RESOLVER_INFO_TYPE_DEPENDS_ON,
00043 RESOLVER_INFO_TYPE_CHILD_OF,
00044 RESOLVER_INFO_TYPE_MISSING_REQ,
00045
00046 RESOLVER_INFO_TYPE_INVALID_SOLUTION,
00047 RESOLVER_INFO_TYPE_UNINSTALLABLE,
00048 RESOLVER_INFO_TYPE_REJECT_INSTALL,
00049 RESOLVER_INFO_TYPE_INSTALL_TO_BE_UNINSTALLED,
00050 RESOLVER_INFO_TYPE_INSTALL_UNNEEDED,
00051 RESOLVER_INFO_TYPE_INSTALL_PARALLEL,
00052 RESOLVER_INFO_TYPE_INCOMPLETES,
00053
00054 RESOLVER_INFO_TYPE_ESTABLISHING,
00055
00056 RESOLVER_INFO_TYPE_INSTALLING,
00057 RESOLVER_INFO_TYPE_UPDATING,
00058 RESOLVER_INFO_TYPE_SKIPPING,
00059
00060 RESOLVER_INFO_TYPE_NO_OTHER_PROVIDER,
00061 RESOLVER_INFO_TYPE_NO_PROVIDER,
00062 RESOLVER_INFO_TYPE_NO_UPGRADE,
00063 RESOLVER_INFO_TYPE_UNINSTALL_PROVIDER,
00064 RESOLVER_INFO_TYPE_KEEP_PROVIDER,
00065 RESOLVER_INFO_TYPE_PARALLEL_PROVIDER,
00066 RESOLVER_INFO_TYPE_NOT_INSTALLABLE_PROVIDER,
00067 RESOLVER_INFO_TYPE_LOCKED_PROVIDER,
00068 RESOLVER_INFO_TYPE_OTHER_ARCH_PROVIDER,
00069 RESOLVER_INFO_TYPE_CANT_SATISFY,
00070
00071 RESOLVER_INFO_TYPE_UNINSTALL_TO_BE_INSTALLED,
00072 RESOLVER_INFO_TYPE_UNINSTALL_INSTALLED,
00073 RESOLVER_INFO_TYPE_UNINSTALL_LOCKED,
00074
00075 RESOLVER_INFO_TYPE_CONFLICT_CANT_INSTALL,
00076 RESOLVER_INFO_TYPE_CONFLICT_UNINSTALLABLE
00077 } ResolverInfoType;
00078
00079 #define RESOLVER_INFO_PRIORITY_USER 500
00080 #define RESOLVER_INFO_PRIORITY_VERBOSE 100
00081 #define RESOLVER_INFO_PRIORITY_DEBUGGING 0
00082
00083 typedef void (*ResolverInfoFn) (ResolverInfo_Ptr info, void *data);
00084
00085 typedef std::list <ResolverInfo_Ptr> ResolverInfoList;
00086
00088
00089
00090
00091 class ResolverInfo : public base::ReferenceCounted, private base::NonCopyable {
00092
00093 private:
00094
00095 ResolverInfoType _type;
00096
00097 PoolItem_Ref _affected;
00098
00099 int _priority;
00100
00101 bool _error;
00102 bool _important;
00103
00104 protected:
00105
00106 ResolverInfo (ResolverInfoType type, PoolItem_Ref affected, int priority);
00107
00108 public:
00109
00110 virtual ~ResolverInfo();
00111
00112 void copy (ResolverInfo_constPtr from);
00113
00114
00115
00116 static std::string toString (PoolItem_Ref item);
00117 static std::string toString (const Capability & capability);
00118
00119 virtual std::ostream & dumpOn( std::ostream & str ) const;
00120 friend std::ostream& operator<<(std::ostream & str, const ResolverInfo & obj)
00121 { return obj.dumpOn (str); }
00122
00123
00124
00125 ResolverInfoType type (void) const { return _type; }
00126 PoolItem_Ref affected (void) const { return _affected; }
00127 int priority (void) const { return _priority; }
00128
00129 int error (void) const { return _error; }
00130 void flagAsError (void) { _error = true; }
00131 int important (void) const { return _important || _error; }
00132 void flagAsImportant (void) { _important = true; }
00133
00134
00135
00136 virtual std::string message (void) const;
00137 bool merge (ResolverInfo_Ptr to_be_merged);
00138 virtual ResolverInfo_Ptr copy (void) const;
00139
00140 bool isAbout (PoolItem_Ref item) const;
00141 };
00142
00144 };
00147 };
00150 };
00152 #endif // ZYPP_SOLVER_DETAIL_RESOLVER_INFO_H
00153