1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/PoolItem.cc
13 #include "zypp/base/Logger.h"
15 #include "zypp/PoolItem.h"
16 #include "zypp/ResPool.h"
17 #include "zypp/Package.h"
18 #include "zypp/VendorAttr.h"
22 ///////////////////////////////////////////////////////////////////
24 { /////////////////////////////////////////////////////////////////
26 ///////////////////////////////////////////////////////////////////
28 // CLASS NAME : PoolItem::Impl
30 /** PoolItem implementation. */
36 Impl( ResObject::constPtr res_r,
37 const ResStatus & status_r )
39 , _resolvable( res_r )
42 ResStatus & status() const
45 ResObject::constPtr resolvable() const
46 { return _resolvable; }
48 ResStatus & statusReset() const
50 _status.setLock( false, zypp::ResStatus::USER );
51 _status.resetTransact( zypp::ResStatus::USER );
56 bool isUndetermined() const
58 return status().isUndetermined();
61 bool isRelevant() const
63 return !status().isNonRelevant();
66 bool isSatisfied() const
68 return status().isSatisfied();
73 return status().isBroken();
77 mutable ResStatus _status;
78 ResObject::constPtr _resolvable;
80 /** \name Poor man's save/restore state.
81 * \todo There may be better save/restore state strategies.
85 void saveState() const
86 { _savedStatus = _status; }
87 void restoreState() const
88 { _status = _savedStatus; }
89 bool sameState() const
91 if ( _status.getTransactValue() != _savedStatus.getTransactValue()
92 && !_status.isBySolver() )
94 if ( _status.isLicenceConfirmed() != _savedStatus.isLicenceConfirmed() )
99 mutable ResStatus _savedStatus;
103 /** Offer default Impl. */
104 static shared_ptr<Impl> nullimpl()
106 static shared_ptr<Impl> _nullimpl( new Impl );
110 ///////////////////////////////////////////////////////////////////
112 /** \relates PoolItem::Impl Stream output */
113 inline std::ostream & operator<<( std::ostream & str, const PoolItem::Impl & obj )
116 if (obj.resolvable())
117 str << *obj.resolvable();
123 ///////////////////////////////////////////////////////////////////
125 // CLASS NAME : PoolItem
127 ///////////////////////////////////////////////////////////////////
129 ///////////////////////////////////////////////////////////////////
131 // METHOD NAME : PoolItem::PoolItem
132 // METHOD TYPE : Ctor
135 : _pimpl( Impl::nullimpl() )
138 ///////////////////////////////////////////////////////////////////
140 // METHOD NAME : PoolItem::PoolItem
141 // METHOD TYPE : Ctor
143 PoolItem::PoolItem( const sat::Solvable & solvable_r )
144 : _pimpl( ResPool::instance().find( solvable_r )._pimpl )
147 ///////////////////////////////////////////////////////////////////
149 // METHOD NAME : PoolItem::PoolItem
150 // METHOD TYPE : Ctor
152 PoolItem::PoolItem( const ResObject::constPtr & resolvable_r )
153 : _pimpl( ResPool::instance().find( resolvable_r )._pimpl )
156 ///////////////////////////////////////////////////////////////////
158 // METHOD NAME : PoolItem::PoolItem
159 // METHOD TYPE : Ctor
161 PoolItem::PoolItem( Impl * implptr_r )
162 : _pimpl( implptr_r )
165 ///////////////////////////////////////////////////////////////////
167 // METHOD NAME : PoolItem::makePoolItem
168 // METHOD TYPE : PoolItem
170 PoolItem PoolItem::makePoolItem( const sat::Solvable & solvable_r )
171 { return PoolItem( new Impl( makeResObject( solvable_r ), solvable_r.isSystem() ) ); }
173 ///////////////////////////////////////////////////////////////////
175 // METHOD NAME : PoolItem::~PoolItem
176 // METHOD TYPE : Dtor
178 PoolItem::~PoolItem()
181 ///////////////////////////////////////////////////////////////////
183 // METHOD NAME : PoolItem::pool
184 // METHOD TYPE : ResPool
186 ResPool PoolItem::pool() const
187 { return ResPool::instance(); }
189 ///////////////////////////////////////////////////////////////////
193 ///////////////////////////////////////////////////////////////////
195 ResStatus & PoolItem::status() const
196 { return _pimpl->status(); }
198 ResStatus & PoolItem::statusReset() const
199 { return _pimpl->statusReset(); }
201 bool PoolItem::isUndetermined() const
202 { return _pimpl->isUndetermined(); }
204 bool PoolItem::isRelevant() const
205 { return _pimpl->isRelevant(); }
207 bool PoolItem::isSatisfied() const
208 { return _pimpl->isSatisfied(); }
210 bool PoolItem::isBroken() const
211 { return _pimpl->isBroken(); }
213 void PoolItem::saveState() const
214 { _pimpl->saveState(); }
216 void PoolItem::restoreState() const
217 { _pimpl->restoreState(); }
219 bool PoolItem::sameState() const
220 { return _pimpl->sameState(); }
222 ResObject::constPtr PoolItem::resolvable() const
223 { return _pimpl->resolvable(); }
225 /******************************************************************
227 ** FUNCTION NAME : operator<<
228 ** FUNCTION TYPE : std::ostream &
230 std::ostream & operator<<( std::ostream & str, const PoolItem & obj )
232 return str << *obj._pimpl;
235 /////////////////////////////////////////////////////////////////
237 ///////////////////////////////////////////////////////////////////