Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members

PMObjectContainerIter.h

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------\
00002 |                                                                      |
00003 |                      __   __    ____ _____ ____                      |
00004 |                      \ \ / /_ _/ ___|_   _|___ \                     |
00005 |                       \ V / _` \___ \ | |   __) |                    |
00006 |                        | | (_| |___) || |  / __/                     |
00007 |                        |_|\__,_|____/ |_| |_____|                    |
00008 |                                                                      |
00009 |                               core system                            |
00010 |                                                        (C) SuSE GmbH |
00011 \----------------------------------------------------------------------/
00012 
00013    File:       PMObjectContainerIter.h
00014 
00015    Author:     Michael Andres <ma@suse.de>
00016    Maintainer: Michael Andres <ma@suse.de>
00017 
00018 /-*/
00019 #ifndef PMObjectContainerIter_h
00020 #define PMObjectContainerIter_h
00021 
00022 #include <vector>
00023 #include <list>
00024 #include <set>
00025 
00026 #include <y2pm/PMObjectPtr.h>
00027 #include <y2pm/PMPackagePtr.h>
00028 #include <y2pm/PMSelectionPtr.h>
00029 #include <y2pm/PMYouPatchPtr.h>
00030 
00032 //
00033 //      CLASS NAME : PMObjectContainerIter
00074 class PMObjectContainerIter {
00075 
00076   private:
00077 
00081     class ContBase {
00082       public:
00083         ContBase() {}
00084         virtual ~ContBase() {}
00085         virtual ContBase *  clone()    const = 0;
00086       public:
00087         virtual void        setBegin()       = 0;
00088         virtual void        setNext()        = 0;
00089         virtual bool        atEnd()    const = 0;
00090         virtual PMObjectPtr get()      const = 0;
00091         virtual unsigned    size()     const = 0;
00092     };
00093 
00097     template <class Ptr> class StdCont : public ContBase {
00098       private:
00099         const Ptr &                  _cont;
00100         typename Ptr::const_iterator _iter;
00101       public:
00102         StdCont( const Ptr & cont_r ) : _cont( cont_r ) { _iter = cont_r.begin(); }
00103         virtual ~StdCont() {}
00104         virtual ContBase *  clone()    const { return new StdCont( *this ); }
00105       public:
00106         virtual void        setBegin()       { _iter = _cont.begin(); }
00107         virtual void        setNext()        { ++_iter; }
00108         virtual bool        atEnd()    const { return ( _iter == _cont.end() ); }
00109         virtual PMObjectPtr get()      const { return *_iter; }
00110         virtual unsigned    size()     const { return _cont.size(); }
00111    };
00112 
00113   private:
00114 
00115     ContBase * _cont;
00116 
00117   public:
00118 
00119     PMObjectContainerIter( const std::vector<PMObjectPtr> & cont_r ) {
00120       _cont = new StdCont<std::vector<PMObjectPtr> >( cont_r );
00121     }
00122     PMObjectContainerIter( const std::list<PMObjectPtr> & cont_r ) {
00123       _cont = new StdCont<std::list<PMObjectPtr> >( cont_r );
00124     }
00125     PMObjectContainerIter( const std::set<PMObjectPtr> & cont_r ) {
00126       _cont = new StdCont<std::set<PMObjectPtr> >( cont_r );
00127     }
00128 
00129     PMObjectContainerIter( const std::vector<PMPackagePtr> & cont_r ) {
00130       _cont = new StdCont<std::vector<PMPackagePtr> >( cont_r );
00131     }
00132     PMObjectContainerIter( const std::list<PMPackagePtr> & cont_r ) {
00133       _cont = new StdCont<std::list<PMPackagePtr> >( cont_r );
00134     }
00135     PMObjectContainerIter( const std::set<PMPackagePtr> & cont_r ) {
00136       _cont = new StdCont<std::set<PMPackagePtr> >( cont_r );
00137     }
00138 
00139     PMObjectContainerIter( const std::vector<PMSelectionPtr> & cont_r ) {
00140       _cont = new StdCont<std::vector<PMSelectionPtr> >( cont_r );
00141     }
00142     PMObjectContainerIter( const std::list<PMSelectionPtr> & cont_r ) {
00143       _cont = new StdCont<std::list<PMSelectionPtr> >( cont_r );
00144     }
00145     PMObjectContainerIter( const std::set<PMSelectionPtr> & cont_r ) {
00146       _cont = new StdCont<std::set<PMSelectionPtr> >( cont_r );
00147     }
00148 
00149     PMObjectContainerIter( const std::vector<PMYouPatchPtr> & cont_r ) {
00150       _cont = new StdCont<std::vector<PMYouPatchPtr> >( cont_r );
00151     }
00152     PMObjectContainerIter( const std::list<PMYouPatchPtr> & cont_r ) {
00153       _cont = new StdCont<std::list<PMYouPatchPtr> >( cont_r );
00154     }
00155     PMObjectContainerIter( const std::set<PMYouPatchPtr> & cont_r ) {
00156       _cont = new StdCont<std::set<PMYouPatchPtr> >( cont_r );
00157     }
00158 
00159   public:
00160 
00161     PMObjectContainerIter( const PMObjectContainerIter & rhs ) : _cont( 0 ) {
00162       if ( rhs._cont ) {
00163         _cont = rhs._cont->clone();
00164       }
00165     }
00166 
00167     PMObjectContainerIter & operator = ( const PMObjectContainerIter & rhs ) {
00168       if ( &rhs != this ) {
00169         delete _cont;
00170         if ( rhs._cont ) {
00171           _cont = rhs._cont->clone();
00172         } else {
00173           _cont = 0;
00174         }
00175       }
00176       return *this;
00177     }
00178 
00179     ~PMObjectContainerIter() {
00180       delete _cont;
00181     }
00182 
00183   public:
00184 
00188     void setBegin() { _cont->setBegin(); }
00189 
00193     void setNext() { _cont->setNext(); }
00194 
00198     bool atEnd() const { return _cont->atEnd(); }
00199 
00204     PMObjectPtr operator * () const { return _cont->get(); }
00205 
00215     PMObjectPtr operator -> () const { return _cont->get(); }
00216 
00220     unsigned size() const { return _cont->size(); }
00221 
00225     bool empty() const { return ( size() == 0 ); }
00226 };
00227 
00229 
00230 #endif // PMObjectContainerIter_h

Generated on Fri Nov 9 14:30:31 2007 for yast2-packagemanager by doxygen 1.3.6