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_QUEUEITEM_H
00023 #define ZYPP_SOLVER_DETAIL_QUEUEITEM_H
00024
00025 #include <iosfwd>
00026 #include <list>
00027 #include <string>
00028
00029 #include "zypp/base/ReferenceCounted.h"
00030 #include "zypp/base/NonCopyable.h"
00031 #include "zypp/base/PtrTypes.h"
00032
00033 #include "zypp/ResPool.h"
00034
00035 #include "zypp/solver/detail/Types.h"
00036 #include "zypp/solver/detail/ResolverInfo.h"
00037
00039 namespace zypp
00040 {
00041
00042 namespace solver
00043 {
00044
00045 namespace detail
00046 {
00047
00048 typedef enum {
00049 QUEUE_ITEM_TYPE_UNKNOWN = 0,
00050 QUEUE_ITEM_TYPE_INSTALL,
00051 QUEUE_ITEM_TYPE_REQUIRE,
00052 QUEUE_ITEM_TYPE_BRANCH,
00053 QUEUE_ITEM_TYPE_GROUP,
00054 QUEUE_ITEM_TYPE_CONFLICT,
00055 QUEUE_ITEM_TYPE_UNINSTALL,
00056 QUEUE_ITEM_TYPE_ESTABLISH,
00057 QUEUE_ITEM_TYPE_LAST
00058 } QueueItemType;
00059
00060
00061 typedef std::list<QueueItem_Ptr> QueueItemList;
00062
00063 #define CMP(a,b) (((a) < (b)) - ((b) < (a)))
00064 #define DEFAULTPRIO 10
00065
00067
00068
00069
00070 class QueueItem : public base::ReferenceCounted, private base::NonCopyable {
00071
00072 private:
00073
00074 QueueItemType _type;
00075 ResPool _pool;
00076
00077 int _priority;
00078 size_t _size;
00079 ResolverInfoList _pending_info;
00080
00081 protected:
00082
00083 QueueItem (QueueItemType type, const ResPool & pool);
00084
00085 public:
00086
00087 virtual ~QueueItem();
00088
00089
00090
00091 virtual std::ostream & dumpOn( std::ostream & str ) const;
00092
00093 friend std::ostream& operator<<(std::ostream & str, const QueueItem & obj)
00094 { return obj.dumpOn (str); }
00095 friend std::ostream& operator<<(std::ostream & str, const QueueItemList & itemlist);
00096
00097
00098
00099 ResPool pool (void) const { return _pool; }
00100 int priority (void) const { return _priority; }
00101 void setPriority (int priority) { _priority = priority; }
00102 int size (void) const { return _size; }
00103
00104
00105
00106 void copy (const QueueItem *from);
00107
00108 bool isBranch (void) const { return _type == QUEUE_ITEM_TYPE_BRANCH; }
00109 bool isConflict (void) const { return _type == QUEUE_ITEM_TYPE_CONFLICT; }
00110 bool isGroup (void) const { return _type == QUEUE_ITEM_TYPE_GROUP; }
00111 bool isInstall (void) const { return _type == QUEUE_ITEM_TYPE_INSTALL; }
00112 bool isRequire (void) const { return _type == QUEUE_ITEM_TYPE_REQUIRE; }
00113 bool isUninstall (void) const { return _type == QUEUE_ITEM_TYPE_UNINSTALL; }
00114 bool isEstablish (void) const { return _type == QUEUE_ITEM_TYPE_ESTABLISH; }
00115
00116 virtual bool process (const QueueItemList & mainQueue, ResolverContext_Ptr context, QueueItemList & qil) = 0;
00117 virtual QueueItem_Ptr copy (void) const = 0;
00118 virtual int cmp (QueueItem_constPtr item) const = 0;
00119 int compare (QueueItem_constPtr item) const { return CMP(_type, item->_type); }
00120
00121
00122 virtual bool isRedundant (ResolverContext_Ptr context) const = 0;
00123
00124
00125
00126 virtual bool isSatisfied (ResolverContext_Ptr context) const = 0;
00127
00128 void addInfo (ResolverInfo_Ptr);
00129 void logInfo (ResolverContext_Ptr);
00130 };
00131
00133 };
00136 };
00139 };
00141
00142 #endif // ZYPP_SOLVER_DETAIL_QUEUEITEM_H