#ifndef ICL_DYN_VECTOR_H #define ICL_DYN_VECTOR_H #include namespace icl{ template struct DynVector : public std::valarray{ DynVector():std::valarray(){} explicit DynVector(size_t dim):std::valarray(dim){}; DynVector(const T &val, int dim):std::valarray(val,dim){} DynVector(const T *data, int dim):std::valarray(data,dim){} DynVector(const DynVector &v):std::valarray(v){} DynVector(const std::slice_array< T> &a):std::valarray(a){} DynVector(const std::gslice_array< T> &a):std::valarray(a){} DynVector(const std::mask_array< T> &a):std::valarray(a){} DynVector(const std::indirect_array< T> &a):std::valarray(a){} void ensureSize(size_t dim){ if(std::valarray::size() != dim) std::valarray::resize(dim); } DynVector &operator=(const DynVector &v){ ensureSize(v.size()); return std::valarray::operator=(v); } DynVector &operator=(const T &t){ return std::valarray::operator=(t); } DynVector &operator=(const std::slice_array &a){ ensureSize(a.size()); return std::valarray::operator=(a); } DynVector &operator=(const std::gslice_array &a){ ensureSize(a.size()); return std::valarray::operator=(a); } DynVector &operator=(const std::mask_array &a){ ensureSize(a.size()); return std::valarray::operator=(a); } DynVector &operator=(const std::indirect_array &a){ ensureSize(a.size()); return std::valarray::operator=(a); } }; } #endif