#ifndef __tvvector #define __tvvector #ifndef G4USE_OLDSTL #include #else #include #endif #if defined(G4USE_NAMESPACE) using std::vector; #endif #include "rw/defs.h" template class RWTValVector : public vector { #ifdef G4USE_EXPLICIT_TYPES_IN_TEMPLATES typedef T* iterator; typedef const T* const_iterator; #endif public: RWTValVector ():rwsize(0){} RWTValVector (size_t n):vector(n),rwsize(n){} RWTValVector (size_t n, const T& ival):vector(n,ival),rwsize(n){} RWTValVector (const RWTValVector& ival):vector(ival),rwsize(ival.rwsize){} ~RWTValVector(){}; RWTValVector& operator= ( const RWTValVector& v) { vector::operator=(v); rwsize=v.rwsize; return *this; } size_t length() const { return vector::size();} T& operator()(size_t i) { if(i<0 || i>=rwsize) RWTHROW(RWBoundsErr("RWTValVector operator()",rwsize,i)); if(i::size() && rwsize::operator[](i); } const T& operator()(size_t i) const { return vector::operator[](i); } T& operator[](size_t i) { if(i<0 || i>=rwsize) RWTHROW(RWBoundsErr("RWTValVector operator[]",rwsize,i)); if(i::size() && rwsize::operator[](i); } const T& operator[](size_t i) const { if(i<0 || i>=rwsize) RWTHROW(RWBoundsErr("RWTValVector const operator[]",rwsize,i)); return vector::operator[](i); } const T* data() const { return &(vector::front()); }; void resize(size_t N) { if(N>vector::size()) { int e=N-vector::size(); for(int i=0;i::push_back(T()); } else { iterator it=vector::begin(); for(int i=1;i<=N;i++,it++); vector::erase(it,vector::end()); } rwsize=N; } void reshape( size_t n ) { resize(n); } const T& ref(size_t i) const{return vector::operator[](i);} private: size_t rwsize; }; #endif