// Vector class implementation // See Vector.hpp for details #include "global.hpp" #include "Vector.hpp" #define Class Vector template // Unary minus Class Class::operator-() const {Class result(lbound(),hbound()); for (sizet ctr = 0; ctr < dim(); ctr++) *(result.data+ctr) = - *(data+ctr); return result; } template void Class::copy(const Class& rs) {assert(dim() == rs.dim()); for (sizet count = 0; count <= dim(); count++) *(data+count) = *(rs.data+count); return; } template void Class::copy(T rs) {for (sizet count = 0; count <= dim(); count++) *(data+count) = rs; return; } template T Class::sum() const {T result = 0; for (sizet ctr = 0; ctr < dim(); ctr++) result += *(data+ctr); return result; } template T Class::prod() const {T result = 1; for (sizet ctr = 0; ctr < dim(); ctr++) result *= *(data+ctr); return result; } template Class& Class::reverse () {for (sizet ctr = 0; ctr < dim()/2; ctr++) swap(*(data+ctr), *(data+dim()-ctr-1)); return *this; } // Compound assignment operators // ----------------------------- #define tpl template #define BINARY_OP(op) \ tpl Class& Class::operator op (const Class& rs) \ {for (sizet ctr = 0; ctr < dim(); ++ctr) *(data+ctr) op *(rs.data+ctr); \ return *this;} \ tpl Class& Class::operator op (const T rs) \ {for (sizet ctr = 0; ctr < dim(); ++ctr) *(data+ctr) op rs; \ return *this;} BINARY_OP(+=) BINARY_OP(-=) BINARY_OP(*=) BINARY_OP(/=) // Output stream operator // ---------------------- template ostream& operator<< (ostream& ls, Class& rs) {sizet ctr = rs.lbound(); ls << rs[ctr++]; while (ctr < rs.hbound()) ls << ", " << rs[ctr++]; return ls; }