/* dtkVector.tpp --- * * Author: Thibaud Kloczko * Copyright (C) 2008 - Thibaud Kloczko, Inria. * Created: Mon Jul 12 16:04:26 2010 (+0200) * Version: $Id: dbf560db31b53987becd057fac36e4e3eaa5be79 $ * Last-Updated: jeu. mars 26 11:14:34 2015 (+0100) * By: Thibaud Kloczko * Update #: 10 */ /* Commentary: * */ /* Change log: * */ #ifndef DTKVECTOR_TPP #define DTKVECTOR_TPP #include #include "dtkMatrix.h" #include "dtkMatrixSquared.h" // ///////////////////////////////////////////////////////////////// // dtkVector implementation // ///////////////////////////////////////////////////////////////// namespace dtkDeprecated { template inline dtkVector::dtkVector(const dtkVector& vec, unsigned irowStart, unsigned irowEnd) : dtkMatrix(vec, irowStart, 0, irowEnd, 0) { } template inline dtkVector::dtkVector(const dtkMatrix& mat, unsigned irowStart, unsigned icolStart, unsigned irowEnd) : dtkMatrix(mat, irowStart, icolStart, irowEnd, icolStart) { } template QString dtkVector::identifier(void) const { return QString("dtkVector<%1>").arg(typeid(T).name()); } template inline void dtkVector::mapInto(const dtkMatrix& mat, unsigned irowStart, unsigned icol, unsigned irowEnd) { dtkMatrix::mapInto(mat, irowStart, icol, irowEnd, icol); } template inline void dtkVector::mapInto(const dtkVector& vec, unsigned irowStart, unsigned irowEnd) { dtkMatrix::mapInto(vec, irowStart, 0, irowEnd, 0); } template inline dtkVector& dtkVector::operator =(const dtkVector& vec) { return static_cast(dtkMatrix::operator=(vec)); } template inline dtkVector& dtkVector::operator +=(const dtkVector& vec) { return static_cast(dtkMatrix::operator+=(vec)); } template inline dtkVector& dtkVector::operator -=(const dtkVector& vec) { return static_cast(dtkMatrix::operator-=(vec)); } template inline dtkVector& dtkVector::operator *=(const T& value) { return static_cast(dtkMatrix::operator*=(value)); } template inline dtkVector& dtkVector::operator /=(const T& value) { T tTmp = dtkUnity(); tTmp /= value; return (*this) *= tTmp; } template inline void dtkVector::storeAtRow(unsigned irowStart, const dtkVector& vec) { dtkMatrix::storeAtPosition(irowStart, 0, vec); } template dtkVector dtkVector::operator +(const dtkVector& vec) const { return dtkVector(*this) += vec; } template dtkVector dtkVector::operator -(const dtkVector& vec) const { return dtkVector(*this) -= vec; } template dtkVector dtkVector::operator -(void) const { T tTmp = dtkZero(); tTmp -= dtkUnity(); return (*this) * tTmp; } template dtkVector dtkVector::operator *(const T& value) const { return dtkVector(*this) *= value; } template T dtkVector::operator *(const dtkVector& vec) const { T elemResult = dtkZero(); for (unsigned irow = 0; irow < (*this).size(); ++irow) elemResult += (*this)[irow] * vec[irow]; return elemResult; } template inline T norm_func(const dtkVector& val) { double elemResult = dtkZero(); elemResult = (val) * (val); return sqrt( elemResult ); } template T dtkVector::norm(void) const { return norm_func(*this); } template inline dtkVector operator *(const T& value, const dtkVector& vec) { return vec * value; } template dtkVector operator *(const dtkMatrix& mat, const dtkVector& vec) { dtkVector vecResult(mat.numberOfRows()); vecResult.storeProduct(mat, vec); return vecResult; } template dtkVector operator *(const dtkMatrixSquared& mat, const dtkVector& vec) { dtkVector vecResult(mat.numberOfRows()); vecResult.storeProduct(mat, vec); return vecResult; } template inline T dtkNorm(const dtkVector& vec) { return vec.norm(); } template inline dtkVector dtkDirection(const dtkVector& vec) { return vec.unit(); } } // end of namespace #endif