namespace cloonel { ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template Vector::Vector (T parValue) : m_mem {parValue} { } ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template template Vector::Vector (const Vector& parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] = parOther.m_mem[z]; } } ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template template const Vector& Vector::operator+= (const Vector& parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] += parOther.m_mem[z]; } return *this; } template template const Vector& Vector::operator-= (const Vector& parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] -= parOther.m_mem[z]; } return *this; } template template const Vector& Vector::operator*= (const Vector& parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] *= parOther.m_mem[z]; } return *this; } template template const Vector& Vector::operator/= (const Vector& parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] /= parOther.m_mem[z]; } return *this; } ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template template const Vector& Vector::operator+= (U parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] += parOther; } return *this; } template template const Vector& Vector::operator-= (U parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] -= parOther; } return *this; } template template const Vector& Vector::operator*= (U parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] *= parOther; } return *this; } template template const Vector& Vector::operator/= (U parOther) { for (uint32_t z = 0; z < S; ++z) { m_mem[z] /= parOther; } return *this; } ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template template Vector::operator Vector() { Vector retVal; for (uint32_t z = 0; z < S; ++z) { retVal[z] = m_mem[z]; } return retVal; } ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template inline Vector::type, S> operator+ (const Vector& parA, const Vector& parB) { typedef typename std::common_type::type RetType; Vector retVal(parA); parA += parB; return retVal; } template inline Vector::type, S> operator- (const Vector& parA, const Vector& parB) { typedef typename std::common_type::type RetType; Vector retVal(parA); parA -= parB; return retVal; } template inline Vector::type, S> operator* (const Vector& parA, const Vector& parB) { typedef typename std::common_type::type RetType; Vector retVal(parA); parA *= parB; return retVal; } template inline Vector::type, S> operator/ (const Vector& parA, const Vector& parB) { typedef typename std::common_type::type RetType; Vector retVal(parA); parA /= parB; return retVal; } ///------------------------------------------------------------------------- ///------------------------------------------------------------------------- template Vector::type, S> operator+ (T parA, const Vector& parB) { return parB + parA; } template Vector::type, S> operator- (T parA, const Vector& parB) { return Vector(parA) - parB; } template Vector::type, S> operator* (T parA, const Vector& parB) { return parB * parA; } template Vector::type, S> operator/ (T parA, const Vector& parB) { return Vector(parA) / parB; } template Vector::type, S> operator+ (const Vector& parA, U parB) { typedef typename std::common_type::type RetType; Vector retVal; for (uint32_t z = 0; z < S; ++z) { retVal[z] = parA[z] + parB; } return retVal; } template Vector::type, S> operator- (const Vector& parA, U parB) { typedef typename std::common_type::type RetType; Vector retVal; for (uint32_t z = 0; z < S; ++z) { retVal[z] = parA[z] - parB; } return retVal; } template Vector::type, S> operator* (const Vector& parA, U parB) { typedef typename std::common_type::type RetType; Vector retVal; for (uint32_t z = 0; z < S; ++z) { retVal[z] = parA[z] * parB; } return retVal; } template Vector::type, S> operator/ (const Vector& parA, U parB) { typedef typename std::common_type::type RetType; Vector retVal; for (uint32_t z = 0; z < S; ++z) { retVal[z] = parA[z] / parB; } return retVal; } } //namespace cloonel