From ad5e55b79bbe0debf81539c12b68df7f06d7e7dd Mon Sep 17 00:00:00 2001 From: astrojhgu Date: Sat, 28 Nov 2009 16:40:33 +0000 Subject: git-svn-id: file:///home/svn/opt_utilities@98 ed2142bd-67ad-457f-ba7c-d818d4011675 --- misc/optvec.hpp | 164 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 155 insertions(+), 9 deletions(-) diff --git a/misc/optvec.hpp b/misc/optvec.hpp index 2e8ecb2..27fafde 100644 --- a/misc/optvec.hpp +++ b/misc/optvec.hpp @@ -3,6 +3,7 @@ #include #include +#include namespace opt_utilities { @@ -44,49 +45,172 @@ namespace opt_utilities optvec operator+(const optvec& x1,const optvec& x2) { - optvec result(x1); + optvec result(x1.size()); for(size_t i=0;i!=x1.size();++i) { - result[i]=result[i]+x2.at(i); + result[i]=x1[i]+x2.at(i); } return result; } + template + optvec operator+(const optvec& x1,const T& x2) + { + + optvec result(x1.size()); + for(size_t i=0;i!=x1.size();++i) + { + result[i]=x1[i]+x2; + } + return result; + } + + template + optvec& operator+=(optvec& x1,const optvec& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]+=x2.at(i); + } + return x1; + } + template optvec operator-(const optvec& x1,const optvec& x2) { - optvec result(x1); + optvec result(x1.size()); + for(size_t i=0;i!=x1.size();++i) + { + result[i]=x1[i]-x2.at(i); + } + return result; + } + + template + optvec operator-(const optvec& x1,const T& x2) + { + + optvec result(x1.size()); for(size_t i=0;i!=x1.size();++i) { - result[i]=result[i]-x2.at(i); + result[i]=x1[i]-x2; } return result; } + + template + optvec& operator-=(optvec& x1,const optvec& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]-=x2.at(i); + } + return x1; + } + template optvec operator*(const optvec& x1,const optvec& x2) { - optvec result(x1); + optvec result(x1.size()); + for(size_t i=0;i!=x1.size();++i) + { + result[i]=x1[i]*x2.at(i); + } + return result; + } + + template + optvec operator*(const optvec& x1,const T& x2) + { + + optvec result(x1.size()); for(size_t i=0;i!=x1.size();++i) { - result[i]=result[i]*x2.at(i); + result[i]=x1[i]*x2; + } + return result; + } + + template + optvec operator*(const T& x1,const optvec& x2) + { + + optvec result(x2.size()); + for(size_t i=0;i!=x2.size();++i) + { + result[i]=x2[i]*x1; } return result; } + + + template + optvec& operator*=(optvec& x1,const optvec& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]*=x2.at(i); + } + return x1; + } + + template + optvec& operator*=(optvec& x1,const T& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]*=x2; + } + return x1; + } + template optvec operator/(const optvec& x1,const optvec& x2) { - optvec result(x1); + optvec result(x1.size()); for(size_t i=0;i!=x1.size();++i) { - result[i]=result[i]/x2.at(i); + result[i]=x1[i]/x2.at(i); } return result; } + + template + optvec operator/(const optvec& x1,const T& x2) + { + + optvec result(x1.size()); + for(size_t i=0;i!=x1.size();++i) + { + result[i]=x1[i]/x2; + } + return result; + } + + template + optvec& operator/=(optvec& x1,const optvec& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]/=x2.at(i); + } + return x1; + } + + template + optvec& operator/=(optvec& x1,const T& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]/=x2; + } + return x1; + } template T sum(const optvec& x) @@ -111,6 +235,28 @@ namespace opt_utilities } return false; } - + }; + + +#define DEF_VEC_FUNC(_func) template \ + std::vector _func(const opt_utilities::optvec& x) \ + { \ + std::vector result(x.size()); \ + for(int i=0;i!=result.size();++i) \ + { \ + result[i]=_func(x[i]); \ + } \ + return result; \ + } + +namespace std +{ + DEF_VEC_FUNC(sin); + DEF_VEC_FUNC(cos); + DEF_VEC_FUNC(log); + DEF_VEC_FUNC(sqrt); +} + + #endif -- cgit v1.2.2