1 /*---------------------------------------------------------------------\
3 | |__ / \ / / . \ . \ |
8 \---------------------------------------------------------------------*/
9 /** \file zypp/ResPoolProxy.h
12 #ifndef ZYPP_RESPOOLPROXY_H
13 #define ZYPP_RESPOOLPROXY_H
17 #include "zypp/base/PtrTypes.h"
19 #include "zypp/ResPool.h"
20 #include "zypp/ui/Selectable.h"
21 #include "zypp/ui/SelFilters.h"
23 ///////////////////////////////////////////////////////////////////
25 { /////////////////////////////////////////////////////////////////
27 ///////////////////////////////////////////////////////////////////
29 // CLASS NAME : ResPoolProxy
31 /** ResPool::instance().proxy();
32 * \todo integrate it into ResPool
36 friend std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
37 friend std::ostream & dumpOn( std::ostream & str, const ResPoolProxy & obj );
38 typedef std::multimap<ResKind,ui::Selectable::Ptr> SelectablePool;
44 typedef MapKVIteratorTraits<SelectablePool>::Value_const_iterator const_iterator;
45 typedef SelectablePool::size_type size_type;
47 typedef ResPool::repository_iterator repository_iterator;
51 /** Default ctor: no pool
52 * Nonempty proxies are provided by \ref ResPool.
53 * \see \ref ResPool::proxy
55 * ResPoolProxy p( ResPool::instance().proxy() );
64 /** \name Lookup individual Selectables. */
66 ui::Selectable::Ptr lookup( const pool::ByIdent & ident_r ) const;
68 ui::Selectable::Ptr lookup( IdString ident_r ) const
69 { return lookup( pool::ByIdent( ident_r ) ); }
71 ui::Selectable::Ptr lookup( ResKind kind_r, const std::string & name_r ) const
72 { return lookup( pool::ByIdent( kind_r, name_r ) ); }
74 ui::Selectable::Ptr lookup( const sat::Solvable & solv_r ) const
75 { return lookup( pool::ByIdent( solv_r ) ); }
77 ui::Selectable::Ptr lookup( const ResObject::constPtr & resolvable_r ) const
78 { return resolvable_r ? lookup( resolvable_r->satSolvable() ) : ui::Selectable::Ptr(); }
80 ui::Selectable::Ptr lookup( const PoolItem & pi_r ) const
81 { return lookup( pi_r.satSolvable() ); }
85 /** \name Iterate through all Selectables of a all kind. */
88 size_type size() const;
89 const_iterator begin() const;
90 const_iterator end() const;
93 /** \name Iterate through all Selectables of a certain kind. */
95 /** True if there are items of a certain kind. */
96 bool empty( const ResKind & kind_r ) const;
100 { return empty( ResTraits<_Res>::kind ); }
102 /** Number of Items of a certain kind. */
103 size_type size( const ResKind & kind_r ) const;
106 size_type size() const
107 { return size( ResTraits<_Res>::kind ); }
109 const_iterator byKindBegin( const ResKind & kind_r ) const;
112 const_iterator byKindBegin() const
113 { return byKindBegin( ResTraits<_Res>::kind ); }
116 const_iterator byKindEnd( const ResKind & kind_r ) const;
119 const_iterator byKindEnd() const
120 { return byKindEnd( ResTraits<_Res>::kind ); }
124 /** \name Iterate through all Repositories that contribute ResObjects.
127 size_type knownRepositoriesSize() const;
129 repository_iterator knownRepositoriesBegin() const;
131 repository_iterator knownRepositoriesEnd() const;
135 /** Test whether there is at least one ui::Selectable with
136 * an installed object.
138 bool hasInstalledObj( const ResKind & kind_r ) const
140 return( make_begin<ui::selfilter::ByHasInstalledObj>( kind_r )
141 != make_end<ui::selfilter::ByHasInstalledObj>( kind_r ) );
145 bool hasInstalledObj() const
146 { return hasInstalledObj( ResTraits<_Res>::kind ); }
149 /** \name Save and restore state per kind of resolvable.
150 * Simple version, no savety net. So don't restore or diff,
151 * if you didn't save before.
153 * Diff returns true, if current stat differs from the saved
157 void saveState() const;
159 void saveState( const ResKind & kind_r ) const;
162 void saveState() const
163 { return saveState( ResTraits<_Res>::kind ); }
165 void restoreState() const;
167 void restoreState( const ResKind & kind_r ) const;
170 void restoreState() const
171 { return restoreState( ResTraits<_Res>::kind ); }
173 bool diffState() const;
175 bool diffState( const ResKind & kind_r ) const;
178 bool diffState() const
179 { return diffState( ResTraits<_Res>::kind ); }
183 template<class _Filter>
184 filter_iterator<_Filter,const_iterator>
185 make_begin( _Filter filter_r, const ResKind & kind_r ) const
187 return make_filter_iterator( filter_r,
191 template<class _Filter>
192 filter_iterator<_Filter,const_iterator>
193 make_begin( const ResKind & kind_r ) const
195 return make_begin( _Filter(), kind_r );
199 template<class _Filter>
200 filter_iterator<_Filter,const_iterator>
201 make_end( _Filter filter_r, const ResKind & kind_r ) const
203 return make_filter_iterator( filter_r,
207 template<class _Filter>
208 filter_iterator<_Filter,const_iterator>
209 make_end( const ResKind & kind_r ) const
211 return make_end( _Filter(), kind_r );
215 friend class pool::PoolImpl;
217 ResPoolProxy( ResPool pool_r, const pool::PoolImpl & poolImpl_r );
218 /** Pointer to implementation */
219 RW_pointer<Impl> _pimpl;
221 ///////////////////////////////////////////////////////////////////
223 /** \relates ResPoolProxy Stream output */
224 std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
226 /** \relates ResPoolProxy Verbose stream output */
227 std::ostream & dumpOn( std::ostream & str, const ResPoolProxy & obj );
229 /////////////////////////////////////////////////////////////////
231 ///////////////////////////////////////////////////////////////////
232 #endif // ZYPP_RESPOOLPROXY_H