00001
00002
00003
00004
00005
00006
00007
00008
00012 #ifndef ZYPP_RESPOOLPROXY_H
00013 #define ZYPP_RESPOOLPROXY_H
00014
00015 #include <iosfwd>
00016
00017 #include "zypp/base/PtrTypes.h"
00018
00019 #include "zypp/ResPool.h"
00020 #include "zypp/ui/Selectable.h"
00021 #include "zypp/ui/SelFilters.h"
00022
00024 namespace zypp
00025 {
00026
00028
00029
00030
00034 class ResPoolProxy
00035 {
00036 friend std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
00037
00038 typedef std::set<ui::Selectable::Ptr> SelectableIndex;
00039 typedef std::map<ResObject::Kind,SelectableIndex> SelectablePool;
00040
00041 public:
00043 class Impl;
00044
00045 typedef SelectableIndex::iterator iterator;
00046 typedef SelectableIndex::const_iterator const_iterator;
00047 typedef SelectableIndex::size_type size_type;
00048
00049 typedef ResPool::repository_iterator repository_iterator;
00050
00051 public:
00053 ResPoolProxy();
00055 ResPoolProxy( ResPool_Ref pool_r );
00057 ~ResPoolProxy();
00058
00059 public:
00060
00062 bool empty( const ResObject::Kind & kind_r ) const;
00063
00064 template<class _Res>
00065 bool empty() const
00066 { return empty( ResTraits<_Res>::kind ); }
00067
00069 size_type size( const ResObject::Kind & kind_r ) const;
00070
00071 template<class _Res>
00072 size_type size() const
00073 { return size( ResTraits<_Res>::kind ); }
00074
00077 const_iterator byKindBegin( const ResObject::Kind & kind_r ) const;
00078
00079 template<class _Res>
00080 const_iterator byKindBegin() const
00081 { return byKindBegin( ResTraits<_Res>::kind ); }
00082
00083
00084 const_iterator byKindEnd( const ResObject::Kind & kind_r ) const;
00085
00086 template<class _Res>
00087 const_iterator byKindEnd() const
00088 { return byKindEnd( ResTraits<_Res>::kind ); }
00090
00091 public:
00095 size_type knownRepositoriesSize() const;
00096
00097 repository_iterator knownRepositoriesBegin() const;
00098
00099 repository_iterator knownRepositoriesEnd() const;
00101
00102 public:
00106 bool hasInstalledObj( const ResObject::Kind & kind_r ) const
00107 {
00108 return( make_begin<ui::selfilter::ByHasInstalledObj>( kind_r )
00109 != make_end<ui::selfilter::ByHasInstalledObj>( kind_r ) );
00110 }
00111
00112 template<class _Res>
00113 bool hasInstalledObj() const
00114 { return hasInstalledObj( ResTraits<_Res>::kind ); }
00115
00116 public:
00125 void saveState() const;
00126
00127 void saveState( const ResObject::Kind & kind_r ) const;
00128
00129 template<class _Res>
00130 void saveState() const
00131 { return saveState( ResTraits<_Res>::kind ); }
00132
00133 void restoreState() const;
00134
00135 void restoreState( const ResObject::Kind & kind_r ) const;
00136
00137 template<class _Res>
00138 void restoreState() const
00139 { return restoreState( ResTraits<_Res>::kind ); }
00140
00141 bool diffState() const;
00142
00143 bool diffState( const ResObject::Kind & kind_r ) const;
00144
00145 template<class _Res>
00146 bool diffState() const
00147 { return diffState( ResTraits<_Res>::kind ); }
00149
00150 private:
00151 template<class _Filter>
00152 filter_iterator<_Filter,const_iterator>
00153 make_begin( _Filter filter_r, const ResObject::Kind & kind_r ) const
00154 {
00155 return make_filter_iterator( filter_r,
00156 byKindBegin(kind_r),
00157 byKindEnd(kind_r) );
00158 }
00159 template<class _Filter>
00160 filter_iterator<_Filter,const_iterator>
00161 make_begin( const ResObject::Kind & kind_r ) const
00162 {
00163 return make_begin( _Filter(), kind_r );
00164 }
00165
00166
00167 template<class _Filter>
00168 filter_iterator<_Filter,const_iterator>
00169 make_end( _Filter filter_r, const ResObject::Kind & kind_r ) const
00170 {
00171 return make_filter_iterator( filter_r,
00172 byKindEnd(kind_r),
00173 byKindEnd(kind_r) );
00174 }
00175 template<class _Filter>
00176 filter_iterator<_Filter,const_iterator>
00177 make_end( const ResObject::Kind & kind_r ) const
00178 {
00179 return make_end( _Filter(), kind_r );
00180 }
00181
00182
00184 RW_pointer<Impl> _pimpl;
00185 };
00187
00189 std::ostream & operator<<( std::ostream & str, const ResPoolProxy & obj );
00190
00192 }
00194 #endif // ZYPP_RESPOOLPROXY_H