CMS 3D CMS Logo

/afs/cern.ch/work/a/aaltunda/public/www/CMSSW_5_3_14/src/Geometry/CaloGeometry/interface/EZArrayFL.h

Go to the documentation of this file.
00001 #ifndef GEOMETRY_CALOGEOMETRY_EZArrayFL_H
00002 #define GEOMETRY_CALOGEOMETRY_EZArrayFL_H 1
00003 
00004 #include "Geometry/CaloGeometry/interface/EZMgrFL.h"
00005 
00020 template < class T >
00021 class EZArrayFL
00022 {
00023    public:
00024 
00025       typedef          EZMgrFL< T >             MgrType ;
00026       typedef typename MgrType::iterator        iterator ;
00027       typedef typename MgrType::const_iterator  const_iterator ;
00028       typedef typename MgrType::reference       reference ;
00029       typedef typename MgrType::const_reference const_reference ;
00030       typedef typename MgrType::size_type       size_type ;
00031       typedef typename MgrType::value_type      value_type ;
00032 
00033       EZArrayFL< T >() : m_begin ( 0 ) ,
00034                          m_mgr   (   ) {}
00035 
00036       EZArrayFL< T >( const MgrType* mgr  ) : m_begin ( 0 ) ,
00037                                               m_mgr   ( mgr )   {}
00038 
00039       EZArrayFL< T >( const MgrType* mgr   , 
00040                       const_iterator start ,
00041                       const_iterator finis       ) :
00042          m_begin ( 0==finis-start ? (iterator)0 : mgr->assign() ) ,
00043          m_mgr   ( mgr )
00044       {
00045          assert( ( finis - start ) == m_mgr->subSize() ) ;
00046          iterator i ( begin() ) ;
00047          for( const_iterator ic ( start ) ; ic != finis ; ++ic )
00048          {
00049             (*i) = (*ic) ;
00050          }
00051       }
00052 
00053       virtual ~EZArrayFL< T >() {}
00054 
00055       void resize() const { assign() ; }
00056 
00057       void assign( const T& t = T() ) const 
00058       {
00059          assert( (iterator)0 == m_begin ) ;
00060          m_begin = m_mgr->assign( t ) ;
00061       }
00062 
00063       const_iterator begin() const { return m_begin ; } 
00064       const_iterator end()   const { return m_begin + m_mgr->subSize() ; }
00065 
00066       reference operator[]( const unsigned int i ) 
00067       {
00068          if( (iterator)0 == m_begin ) assign() ;
00069          return *( m_begin + i ) ; 
00070       }
00071 
00072       const_reference operator[]( const unsigned int i ) const 
00073       {
00074          return *( m_begin + i ) ;
00075       }
00076 
00077       bool uninitialized() const { return ( (iterator)0 == m_begin ) ;  }
00078 
00079       bool empty()         const { return ( 0 == size() ) ;  }
00080 
00081       size_type size()     const { return m_mgr->subSize() ; }
00082 
00083       size_type capacity() const { return size() ; }
00084 
00085    protected:
00086 
00087    private:
00088 
00089       //EZArrayFL( const EZArrayFL& ) ; //stop
00090       //EZArrayFL& operator=( const EZArrayFL& ) ; //stop
00091       mutable iterator m_begin   ;
00092       const MgrType*   m_mgr   ;
00093 };
00094 
00095 #endif