00001
00002
00003
00004
00005
00006
00007
00008
00012 #ifndef ZYPP_POOLITEM_H
00013 #define ZYPP_POOLITEM_H
00014
00015 #include <iosfwd>
00016 #include <functional>
00017
00018 #include "zypp/base/PtrTypes.h"
00019 #include "zypp/ResObject.h"
00020 #include "zypp/ResStatus.h"
00021
00023 namespace zypp
00024 {
00025
00027
00028
00029
00043 class PoolItem_Ref
00044 {
00045 friend std::ostream & operator<<( std::ostream & str, const PoolItem_Ref & obj );
00046
00047 public:
00049 class Impl;
00050
00051 public:
00053 PoolItem_Ref();
00054
00056 explicit
00057 PoolItem_Ref( ResObject::constPtr res_r );
00058
00060 PoolItem_Ref( ResObject::constPtr res_r, const ResStatus & status_r );
00061
00063 ~PoolItem_Ref();
00064
00065 public:
00067 ResStatus & status() const;
00068
00072 ResObject::constPtr resolvable() const;
00073
00074 public:
00078 operator ResObject::constPtr() const
00079 { return resolvable(); }
00080
00082 ResObject::constPtr operator->() const
00083 { return resolvable(); }
00084
00087 operator ResObject::constPtr::unspecified_bool_type() const
00088 { return resolvable(); }
00089
00090 private:
00092 RW_pointer<Impl> _pimpl;
00093
00094 private:
00098 friend class PoolItemSaver;
00099 void saveState() const;
00100 void restoreState() const;
00101 bool sameState() const;
00103 };
00105
00106 typedef PoolItem_Ref PoolItem;
00107
00109 std::ostream & operator<<( std::ostream & str, const PoolItem_Ref & obj );
00110
00112 inline bool operator==( const PoolItem_Ref & lhs, const PoolItem_Ref & rhs )
00113 { return lhs.resolvable() == rhs.resolvable(); }
00114
00116 inline bool operator==( const PoolItem_Ref & lhs, const ResObject::constPtr & rhs )
00117 { return lhs.resolvable() == rhs; }
00118
00120 inline bool operator==( const ResObject::constPtr & lhs, const PoolItem_Ref & rhs )
00121 { return lhs == rhs.resolvable(); }
00122
00123
00125 inline bool operator!=( const PoolItem_Ref & lhs, const PoolItem_Ref & rhs )
00126 { return ! (lhs==rhs); }
00127
00129 inline bool operator!=( const PoolItem_Ref & lhs, const ResObject::constPtr & rhs )
00130 { return ! (lhs==rhs); }
00131
00133 inline bool operator!=( const ResObject::constPtr & lhs, const PoolItem_Ref & rhs )
00134 { return ! (lhs==rhs); }
00135
00137 }
00140 namespace std
00141 {
00142
00144 template<>
00145 inline bool less<zypp::PoolItem_Ref>::operator()( const zypp::PoolItem_Ref & lhs, const zypp::PoolItem_Ref & rhs ) const
00146 { return lhs.resolvable() < rhs.resolvable(); }
00147
00149 }
00151 #endif // ZYPP_POOLITEM_H