libzypp  10.5.0
PoolItem.h
Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
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 
00026   class ResPool;
00027 
00028   namespace pool
00029   {
00030     class PoolImpl;
00031   }
00032 
00034   //
00035   //    CLASS NAME : PoolItem
00036   //
00050   class PoolItem
00051   {
00052     friend std::ostream & operator<<( std::ostream & str, const PoolItem & obj );
00053 
00054     public:
00056       class Impl;
00057 
00058     public:
00060       PoolItem();
00061 
00063       explicit PoolItem( const sat::Solvable & solvable_r );
00064 
00066       explicit PoolItem( const ResObject::constPtr & resolvable_r );
00067 
00069       ~PoolItem();
00070 
00071     public:
00075       ResStatus & status() const;
00076 
00078       ResStatus & statusReset() const;
00079 
00080 
00086       bool isUndetermined() const;
00087 
00091       bool isRelevant() const;
00092 
00094       bool isSatisfied() const;
00095 
00097       bool isBroken() const;
00098 
00102       bool isNeeded() const;
00103 
00105       bool isUnwanted() const;
00107 
00109     public:
00111       ResPool pool() const;
00112 
00114       sat::Solvable satSolvable() const
00115       { return resolvable() ? resolvable()->satSolvable() : sat::Solvable::noSolvable; }
00116 
00120       sat::Solvable buddy() const;
00121 
00122     public:
00126       ResObject::constPtr resolvable() const;
00127 
00131       operator ResObject::constPtr() const
00132       { return resolvable(); }
00133 
00135       ResObject::constPtr operator->() const
00136       { return resolvable(); }
00137 
00140       operator ResObject::constPtr::unspecified_bool_type() const
00141       { return resolvable(); }
00142 
00143     private:
00144       friend class Impl;
00145       friend class pool::PoolImpl;
00147       static PoolItem makePoolItem( const sat::Solvable & solvable_r );
00149       void setBuddy( sat::Solvable solv_r );
00151       explicit PoolItem( Impl * implptr_r );
00153       RW_pointer<Impl> _pimpl;
00154 
00155     private:
00159       friend class PoolItemSaver;
00160       void saveState() const;
00161       void restoreState() const;
00162       bool sameState() const;
00164   };
00166 
00168   std::ostream & operator<<( std::ostream & str, const PoolItem & obj );
00169 
00171   inline bool operator==( const PoolItem & lhs, const PoolItem & rhs )
00172   { return lhs.resolvable() == rhs.resolvable(); }
00173 
00175   inline bool operator==( const PoolItem & lhs, const ResObject::constPtr & rhs )
00176   { return lhs.resolvable() == rhs; }
00177 
00179   inline bool operator==( const ResObject::constPtr & lhs, const PoolItem & rhs )
00180   { return lhs == rhs.resolvable(); }
00181 
00182 
00184   inline bool operator!=( const PoolItem & lhs, const PoolItem & rhs )
00185   { return ! (lhs==rhs); }
00186 
00188   inline bool operator!=( const PoolItem & lhs, const ResObject::constPtr & rhs )
00189   { return ! (lhs==rhs); }
00190 
00192   inline bool operator!=( const ResObject::constPtr & lhs, const PoolItem & rhs )
00193   { return ! (lhs==rhs); }
00194 
00195 
00197   inline bool identical( const PoolItem & lhs, const PoolItem & rhs )
00198   { return lhs == rhs || lhs.satSolvable().identical( rhs.satSolvable() ); }
00199 
00201   inline bool identical( const PoolItem & lhs, sat::Solvable rhs )
00202   { return lhs.satSolvable().identical( rhs ); }
00203 
00205   inline bool identical( sat::Solvable lhs, const PoolItem & rhs )
00206   { return lhs.identical( rhs.satSolvable() ); }
00207 
00208 
00210   inline bool sameNVRA( const PoolItem & lhs, const PoolItem & rhs )
00211   { return lhs == rhs || lhs.satSolvable().sameNVRA( rhs.satSolvable() ); }
00212 
00214   inline bool sameNVRA( const PoolItem & lhs, sat::Solvable rhs )
00215   { return lhs.satSolvable().sameNVRA( rhs ); }
00216 
00218   inline bool sameNVRA( sat::Solvable lhs, const PoolItem & rhs )
00219   { return lhs.sameNVRA( rhs.satSolvable() ); }
00220 
00225   struct asPoolItem
00226   {
00227     typedef PoolItem result_type;
00228 
00229     PoolItem operator()( const sat::Solvable & solv_r ) const
00230     { return PoolItem( solv_r ); }
00231   };
00232 
00234 } // namespace zypp
00237 namespace std
00238 { 
00239 
00241   template<>
00242     inline bool less<zypp::PoolItem>::operator()( const zypp::PoolItem & lhs, const zypp::PoolItem & rhs ) const
00243     { return lhs.resolvable() < rhs.resolvable(); }
00244 
00246 } // namespace zypp
00248 #endif // ZYPP_POOLITEM_H