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_PARALLEL_PROVIDER,
00065 RESOLVER_INFO_TYPE_NOT_INSTALLABLE_PROVIDER,
00066 RESOLVER_INFO_TYPE_LOCKED_PROVIDER,
00067 RESOLVER_INFO_TYPE_OTHER_ARCH_PROVIDER,
00068 RESOLVER_INFO_TYPE_CANT_SATISFY,
00069
00070 RESOLVER_INFO_TYPE_UNINSTALL_TO_BE_INSTALLED,
00071 RESOLVER_INFO_TYPE_UNINSTALL_INSTALLED,
00072 RESOLVER_INFO_TYPE_UNINSTALL_LOCKED,
00073
00074 RESOLVER_INFO_TYPE_CONFLICT_CANT_INSTALL,
00075 RESOLVER_INFO_TYPE_CONFLICT_UNINSTALLABLE
00076 } ResolverInfoType;
00077
00078 #define RESOLVER_INFO_PRIORITY_USER 500
00079 #define RESOLVER_INFO_PRIORITY_VERBOSE 100
00080 #define RESOLVER_INFO_PRIORITY_DEBUGGING 0
00081
00082 typedef void (*ResolverInfoFn) (ResolverInfo_Ptr info, void *data);
00083
00084 typedef std::list <ResolverInfo_Ptr> ResolverInfoList;
00085
00087
00088
00089
00090 class ResolverInfo : public base::ReferenceCounted, private base::NonCopyable {
00091
00092 private:
00093
00094 ResolverInfoType _type;
00095
00096 PoolItem_Ref _affected;
00097
00098 int _priority;
00099
00100 bool _error;
00101 bool _important;
00102
00103 protected:
00104
00105 ResolverInfo (ResolverInfoType type, PoolItem_Ref affected, int priority);
00106
00107 public:
00108
00109 virtual ~ResolverInfo();
00110
00111 void copy (ResolverInfo_constPtr from);
00112
00113
00114
00115 static std::string toString (PoolItem_Ref item);
00116 static std::string toString (const Capability & capability);
00117
00118 virtual std::ostream & dumpOn( std::ostream & str ) const;
00119 friend std::ostream& operator<<(std::ostream & str, const ResolverInfo & obj)
00120 { return obj.dumpOn (str); }
00121
00122
00123
00124 ResolverInfoType type (void) const { return _type; }
00125 PoolItem_Ref affected (void) const { return _affected; }
00126 int priority (void) const { return _priority; }
00127
00128 int error (void) const { return _error; }
00129 void flagAsError (void) { _error = true; }
00130 int important (void) const { return _important || _error; }
00131 void flagAsImportant (void) { _important = true; }
00132
00133
00134
00135 virtual std::string message (void) const;
00136 bool merge (ResolverInfo_Ptr to_be_merged);
00137 virtual ResolverInfo_Ptr copy (void) const;
00138
00139 bool isAbout (PoolItem_Ref item) const;
00140 };
00141
00143 };
00146 };
00149 };
00151 #endif // ZYPP_SOLVER_DETAIL_RESOLVER_INFO_H
00152