ResPoolProxy.h

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                          ____ _   __ __ ___                          |
00003 |                         |__  / \ / / . \ . \                         |
00004 |                           / / \ V /|  _/  _/                         |
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   //    CLASS NAME : ResPoolProxy
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 } // namespace zypp
00194 #endif // ZYPP_RESPOOLPROXY_H

Generated on Tue Sep 25 19:23:06 2007 for libzypp by  doxygen 1.5.3