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 );
38 typedef std::vector<ui::Selectable::Ptr> SelectableKinds;
39 typedef std::map<ResKind,SelectableKinds> SelectablePool;
45 typedef SelectableKinds::iterator iterator;
46 typedef SelectableKinds::const_iterator const_iterator;
47 typedef SelectableKinds::size_type size_type;
49 typedef ResPool::repository_iterator repository_iterator;
53 /** Default ctor: no pool
54 * Nonempty proxies are provided by \ref ResPool.
55 * \see \ref ResPool::proxy
57 * ResPoolProxy p( ResPool::instance().proxy() );
66 /** \name Lookup individual Selectables. */
68 ui::Selectable::Ptr lookup( const pool::ByIdent & ident_r ) const;
70 ui::Selectable::Ptr lookup( IdString ident_r ) const
71 { return lookup( pool::ByIdent( ident_r ) ); }
73 ui::Selectable::Ptr lookup( ResKind kind_r, const std::string & name_r ) const
74 { return lookup( pool::ByIdent( kind_r, name_r ) ); }
76 ui::Selectable::Ptr lookup( const sat::Solvable & solv_r ) const
77 { return lookup( pool::ByIdent( solv_r ) ); }
79 ui::Selectable::Ptr lookup( const ResObject::constPtr & resolvable_r ) const
80 { return resolvable_r ? lookup( resolvable_r->satSolvable() ) : ui::Selectable::Ptr(); }
82 ui::Selectable::Ptr lookup( const PoolItem & pi_r ) const
83 { return lookup( pi_r.satSolvable() ); }
88 /** True if there are items of a certain kind. */
89 bool empty( const ResKind & kind_r ) const;
93 { return empty( ResTraits<_Res>::kind ); }
95 /** Number of Items of a certain kind. */
96 size_type size( const ResKind & kind_r ) const;
99 size_type size() const
100 { return size( ResTraits<_Res>::kind ); }
102 /** \name Iterate through all Selectables of a certain kind. */
104 const_iterator byKindBegin( const ResKind & kind_r ) const;
107 const_iterator byKindBegin() const
108 { return byKindBegin( ResTraits<_Res>::kind ); }
111 const_iterator byKindEnd( const ResKind & kind_r ) const;
114 const_iterator byKindEnd() const
115 { return byKindEnd( ResTraits<_Res>::kind ); }
119 /** \name Iterate through all Repositories that contribute ResObjects.
122 size_type knownRepositoriesSize() const;
124 repository_iterator knownRepositoriesBegin() const;
126 repository_iterator knownRepositoriesEnd() const;
130 /** Test whether there is at least one ui::Selectable with
131 * an installed object.
133 bool hasInstalledObj( const ResKind & kind_r ) const
135 return( make_begin<ui::selfilter::ByHasInstalledObj>( kind_r )
136 != make_end<ui::selfilter::ByHasInstalledObj>( kind_r ) );
140 bool hasInstalledObj() const
141 { return hasInstalledObj( ResTraits<_Res>::kind ); }
144 /** \name Save and restore state per kind of resolvable.
145 * Simple version, no savety net. So don't restore or diff,
146 * if you didn't save before.
148 * Diff returns true, if current stat differs from the saved
152 void saveState() const;
154 void saveState( const ResKind & kind_r ) const;
157 void saveState() const
158 { return saveState( ResTraits<_Res>::kind ); }
160 void restoreState() const;
162 void restoreState( const ResKind & kind_r ) const;
165 void restoreState() const
166 { return restoreState( ResTraits<_Res>::kind ); }
168 bool diffState() const;
170 bool diffState( const ResKind & kind_r ) const;
173 bool diffState() const
174 { return diffState( ResTraits<_Res>::kind ); }
178 template<class _Filter>
179 filter_iterator<_Filter,const_iterator>
180 make_begin( _Filter filter_r, const ResKind & kind_r ) const
182 return make_filter_iterator( filter_r,
186 template<class _Filter>
187 filter_iterator<_Filter,const_iterator>
188 make_begin( const ResKind & kind_r ) const
190 return make_begin( _Filter(), kind_r );
194 template<class _Filter>
195 filter_iterator<_Filter,const_iterator>
196 make_end( _Filter filter_r, const ResKind & kind_r ) const
198 return make_filter_iterator( filter_r,
202 template<class _Filter>
203 filter_iterator<_Filter,const_iterator>
204 make_end( const ResKind & kind_r ) const
206 return make_end( _Filter(), kind_r );
210 friend class pool::PoolImpl;
212 ResPoolProxy( ResPool pool_r, const pool::PoolImpl & poolImpl_r );
213 /** Pointer to implementation */
214 RW_pointer<Impl> _pimpl;
216 ///////////////////////////////////////////////////////////////////
218 /** \relates ResPoolProxy Stream output */
219 std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
221 /////////////////////////////////////////////////////////////////
223 ///////////////////////////////////////////////////////////////////
224 #endif // ZYPP_RESPOOLPROXY_H