void VectorTemplate<T>::getSubVectorCopy(int i,MyT& a) const { Assert(&a != this); Assert(isValidIndex(i)); Assert(isValidIndex(i+a.n-1)); gen_array_equal(a.getStart(),a.stride, getStart()+stride*i,stride, a.n); }
void VectorTemplate<T>::copySubVector(int i,const MyT& a) { Assert(this != &a); Assert(isValidIndex(i)); Assert(isValidIndex(i+a.n-1)); gen_array_equal(getStart()+i*stride,stride, a.getStart(),a.stride, a.n); }
const VectorTemplate<T>& VectorTemplate<T>::operator = (const MyT& a) { if(this == &a) return *this; if(n!=a.n) resize(a.n); gen_array_equal(getStart(),stride, a.getStart(),a.stride, n); return *this; }
T VectorTemplate<T>::dot(const MyT& a) const { CHECKEMPTY(); Assert(size()==a.size()); return gen_array_dot(getStart(),stride, a.getStart(),a.stride, n); }
void VectorTemplate<T>::setNegative(const MyT& a) { CHECKRESIZE(a.n); gen_array_negate(getStart(),stride, a.getStart(),a.stride, n); }
void VectorTemplate<T>::madd(const MyT& v, T c) { Assert(size() == v.size()); gen_array_madd(getStart(),stride, v.getStart(),v.stride, c,n); }
void VectorTemplate<T>::dec(const MyT& v) { Assert(size() == v.size()); gen_array_dec(getStart(),stride, v.getStart(),v.stride, n); }
void VectorTemplate<T>::axpby(T a,const MyT& x,T b,const MyT& y) { Assert(x.n == y.n); CHECKRESIZE(x.n); gen_array_axpby(getStart(),stride, a, x.getStart(),x.stride, b, y.getStart(),y.stride,n); }
void VectorTemplate<T>::div(const MyT& a, T c) { CHECKRESIZE(a.n); gen_array_div(getStart(),stride, a.getStart(),a.stride, c, n); }
void VectorTemplate<T>::sub(const MyT& a, const MyT& b) { Assert(a.size() == b.size()); CHECKRESIZE(a.n); gen_array_sub(getStart(),stride, a.getStart(),a.stride, b.getStart(),b.stride, n); }
void VectorTemplate<T>::copy(const MyT& a) { if(this == &a) return; CHECKRESIZE(a.n); gen_array_equal(getStart(),stride, a.getStart(),a.stride, n); }