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
00070 ResStatus & statusReset() const;
00071
00075 ResObject::constPtr resolvable() const;
00076
00077 public:
00081 operator ResObject::constPtr() const
00082 { return resolvable(); }
00083
00085 ResObject::constPtr operator->() const
00086 { return resolvable(); }
00087
00090 operator ResObject::constPtr::unspecified_bool_type() const
00091 { return resolvable(); }
00092
00093 private:
00095 RW_pointer<Impl> _pimpl;
00096
00097 private:
00101 friend class PoolItemSaver;
00102 void saveState() const;
00103 void restoreState() const;
00104 bool sameState() const;
00106 };
00108
00109 typedef PoolItem_Ref PoolItem;
00110
00112 std::ostream & operator<<( std::ostream & str, const PoolItem_Ref & obj );
00113
00115 inline bool operator==( const PoolItem_Ref & lhs, const PoolItem_Ref & rhs )
00116 { return lhs.resolvable() == rhs.resolvable(); }
00117
00119 inline bool operator==( const PoolItem_Ref & lhs, const ResObject::constPtr & rhs )
00120 { return lhs.resolvable() == rhs; }
00121
00123 inline bool operator==( const ResObject::constPtr & lhs, const PoolItem_Ref & rhs )
00124 { return lhs == rhs.resolvable(); }
00125
00126
00128 inline bool operator!=( const PoolItem_Ref & lhs, const PoolItem_Ref & rhs )
00129 { return ! (lhs==rhs); }
00130
00132 inline bool operator!=( const PoolItem_Ref & lhs, const ResObject::constPtr & rhs )
00133 { return ! (lhs==rhs); }
00134
00136 inline bool operator!=( const ResObject::constPtr & lhs, const PoolItem_Ref & rhs )
00137 { return ! (lhs==rhs); }
00138
00140 }
00143 namespace std
00144 {
00145
00147 template<>
00148 inline bool less<zypp::PoolItem_Ref>::operator()( const zypp::PoolItem_Ref & lhs, const zypp::PoolItem_Ref & rhs ) const
00149 { return lhs.resolvable() < rhs.resolvable(); }
00150
00152 }
00154 #endif // ZYPP_POOLITEM_H