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
32 * \todo Make it a _Ref.
36 friend std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
38 typedef std::set<ui::Selectable::Ptr> SelectableIndex;
39 typedef std::map<ResObject::Kind,SelectableIndex> SelectablePool;
45 typedef SelectableIndex::iterator iterator;
46 typedef SelectableIndex::const_iterator const_iterator;
47 typedef SelectableIndex::size_type size_type;
50 /** Default ctor: no pool */
53 ResPoolProxy( ResPool_Ref pool_r );
59 /** True if there are items of a certain kind. */
60 bool empty( const ResObject::Kind & kind_r ) const;
64 { return empty( ResTraits<_Res>::kind ); }
66 /** Number of Items of a certain kind. */
67 size_type size( const ResObject::Kind & kind_r ) const;
70 size_type size() const
71 { return size( ResTraits<_Res>::kind ); }
73 /** \name Iterate through all Selectables of a certain kind. */
75 const_iterator byKindBegin( const ResObject::Kind & kind_r ) const;
78 const_iterator byKindBegin() const
79 { return byKindBegin( ResTraits<_Res>::kind ); }
82 const_iterator byKindEnd( const ResObject::Kind & kind_r ) const;
85 const_iterator byKindEnd() const
86 { return byKindEnd( ResTraits<_Res>::kind ); }
90 /** Test whether there is at least one ui::Selectable with
91 * an installed object.
93 bool hasInstalledObj( const ResObject::Kind & kind_r ) const
95 return( make_begin<ui::selfilter::ByHasInstalledObj>( kind_r )
96 != make_end<ui::selfilter::ByHasInstalledObj>( kind_r ) );
100 bool hasInstalledObj() const
101 { return hasInstalledObj( ResTraits<_Res>::kind ); }
104 /** \name Save and restore state per kind of resolvable.
105 * Simple version, no savety net. So don't restore or diff,
106 * if you didn't save before.
108 * Diff returns true, if current stat differs from the saved
112 void saveState() const;
114 void saveState( const ResObject::Kind & kind_r ) const;
117 void saveState() const
118 { return saveState( ResTraits<_Res>::kind ); }
120 void restoreState() const;
122 void restoreState( const ResObject::Kind & kind_r ) const;
125 void restoreState() const
126 { return restoreState( ResTraits<_Res>::kind ); }
128 bool diffState() const;
130 bool diffState( const ResObject::Kind & kind_r ) const;
133 bool diffState() const
134 { return diffState( ResTraits<_Res>::kind ); }
138 template<class _Filter>
139 filter_iterator<_Filter,const_iterator>
140 make_begin( _Filter filter_r, const ResObject::Kind & kind_r ) const
142 return make_filter_iterator( filter_r,
146 template<class _Filter>
147 filter_iterator<_Filter,const_iterator>
148 make_begin( const ResObject::Kind & kind_r ) const
150 return make_begin( _Filter(), kind_r );
154 template<class _Filter>
155 filter_iterator<_Filter,const_iterator>
156 make_end( _Filter filter_r, const ResObject::Kind & kind_r ) const
158 return make_filter_iterator( filter_r,
162 template<class _Filter>
163 filter_iterator<_Filter,const_iterator>
164 make_end( const ResObject::Kind & kind_r ) const
166 return make_end( _Filter(), kind_r );
170 /** Pointer to implementation */
171 RW_pointer<Impl> _pimpl;
173 ///////////////////////////////////////////////////////////////////
175 /** \relates ResPoolProxy Stream output */
176 std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
178 /////////////////////////////////////////////////////////////////
180 ///////////////////////////////////////////////////////////////////
181 #endif // ZYPP_RESPOOLPROXY_H