00001
00006 #ifndef __BGDNetCollection_h__
00007 #define __BGDNetCollection_h__
00008
00009 #include "BGDNetConfig.h"
00010
00011 #include <vector>
00012 #include <assert.h>
00013
00014 namespace BGDNet
00015 {
00016
00017 using std::vector;
00018
00025 template<class T>
00026 class BGDNET_API Collection
00027 {
00028 public:
00029
00030 Collection( void );
00036 Collection( const Collection& col );
00041 Collection& operator =( const Collection& col );
00046 ~Collection( void );
00051 int size( void ) const;
00057 void resize( size_t sz, const T& x = T() );
00065 void add( const T& x );
00072 void clear( void );
00077 T& operator []( int n );
00084 const T& operator []( int n ) const;
00091 T& front( void );
00097 const T& front( void ) const;
00103 T& back( void );
00109 const T& back( void ) const;
00115 private:
00116
00117 vector<T>* m_pCont;
00121 };
00122
00123 template<class T>
00124 Collection<T>::Collection( void )
00125 {
00126 m_pCont = new vector<T>;
00127 }
00128
00129 template<class T>
00130 Collection<T>::Collection( const Collection& col )
00131 {
00132 m_pCont = new vector<T>(*col.m_pCont);
00133 }
00134
00135 template<class T>
00136 Collection<T>& Collection<T>::operator =( const Collection& col )
00137 {
00138 if (this != &col)
00139 *m_pCont = *col.m_pCont;
00140 return *this;
00141 }
00142
00143 template<class T>
00144 Collection<T>::~Collection( void )
00145 {
00146 delete m_pCont;
00147 }
00148
00149 template<class T>
00150 int Collection<T>::size( void ) const
00151 {
00152 return m_pCont->size();
00153 }
00154
00155 template<class T>
00156 void Collection<T>::resize( size_t sz, const T& x )
00157 {
00158 m_pCont->resize(sz, x);
00159 }
00160
00161 template<class T>
00162 void Collection<T>::add( const T& x )
00163 {
00164 m_pCont->push_back(x);
00165 }
00166
00167 template<class T>
00168 void Collection<T>::clear( void )
00169 {
00170 m_pCont->clear();
00171 }
00172
00173 template<class T>
00174 T& Collection<T>::operator []( int n )
00175 {
00176 assert(0 <= n && n < size());
00177 return m_pCont->at(n);
00178 }
00179
00180 template<class T>
00181 const T& Collection<T>::operator []( int n ) const
00182 {
00183 assert(0 <= n && n < size());
00184 return m_pCont->at(n);
00185 }
00186
00187 template<class T>
00188 T& Collection<T>::front( void )
00189 {
00190 assert(size() > 0);
00191 return m_pCont->front();
00192 }
00193
00194 template<class T>
00195 const T& Collection<T>::front( void ) const
00196 {
00197 assert(size() > 0);
00198 return m_pCont->front();
00199 }
00200
00201 template<class T>
00202 T& Collection<T>::back( void )
00203 {
00204 assert(size() > 0);
00205 return m_pCont->back();
00206 }
00207
00208 template<class T>
00209 const T& Collection<T>::back( void ) const
00210 {
00211 assert(size() > 0);
00212 return m_pCont->back();
00213 }
00214
00215 }
00216
00217 #endif //__BGDNetCollection_h__