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