diff options
author | astrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675> | 2009-11-28 16:40:33 +0000 |
---|---|---|
committer | astrojhgu <astrojhgu@ed2142bd-67ad-457f-ba7c-d818d4011675> | 2009-11-28 16:40:33 +0000 |
commit | ad5e55b79bbe0debf81539c12b68df7f06d7e7dd (patch) | |
tree | 30dd31cca5590793fe73ba37429b6d3f3f0d2d37 | |
parent | 215034db7c1c62ef1cf67659e72a3275e7b81924 (diff) | |
download | opt-utilities-ad5e55b79bbe0debf81539c12b68df7f06d7e7dd.tar.bz2 |
git-svn-id: file:///home/svn/opt_utilities@98 ed2142bd-67ad-457f-ba7c-d818d4011675
-rw-r--r-- | misc/optvec.hpp | 164 |
1 files 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 <vector> #include <cassert> +#include <cmath> namespace opt_utilities { @@ -44,49 +45,172 @@ namespace opt_utilities optvec<T> operator+(const optvec<T>& x1,const optvec<T>& x2) { - optvec<T> result(x1); + optvec<T> 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<typename T> + optvec<T> operator+(const optvec<T>& x1,const T& x2) + { + + optvec<T> result(x1.size()); + for(size_t i=0;i!=x1.size();++i) + { + result[i]=x1[i]+x2; + } + return result; + } + + template<typename T> + optvec<T>& operator+=(optvec<T>& x1,const optvec<T>& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]+=x2.at(i); + } + return x1; + } + + template<typename T> optvec<T> operator-(const optvec<T>& x1,const optvec<T>& x2) { - optvec<T> result(x1); + optvec<T> result(x1.size()); + for(size_t i=0;i!=x1.size();++i) + { + result[i]=x1[i]-x2.at(i); + } + return result; + } + + template<typename T> + optvec<T> operator-(const optvec<T>& x1,const T& x2) + { + + optvec<T> 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<typename T> + optvec<T>& operator-=(optvec<T>& x1,const optvec<T>& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]-=x2.at(i); + } + return x1; + } + template<typename T> optvec<T> operator*(const optvec<T>& x1,const optvec<T>& x2) { - optvec<T> result(x1); + optvec<T> result(x1.size()); + for(size_t i=0;i!=x1.size();++i) + { + result[i]=x1[i]*x2.at(i); + } + return result; + } + + template<typename T> + optvec<T> operator*(const optvec<T>& x1,const T& x2) + { + + optvec<T> 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<typename T> + optvec<T> operator*(const T& x1,const optvec<T>& x2) + { + + optvec<T> result(x2.size()); + for(size_t i=0;i!=x2.size();++i) + { + result[i]=x2[i]*x1; } return result; } + + + template<typename T> + optvec<T>& operator*=(optvec<T>& x1,const optvec<T>& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]*=x2.at(i); + } + return x1; + } + + template<typename T> + optvec<T>& operator*=(optvec<T>& x1,const T& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]*=x2; + } + return x1; + } + template<typename T> optvec<T> operator/(const optvec<T>& x1,const optvec<T>& x2) { - optvec<T> result(x1); + optvec<T> 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<typename T> + optvec<T> operator/(const optvec<T>& x1,const T& x2) + { + + optvec<T> result(x1.size()); + for(size_t i=0;i!=x1.size();++i) + { + result[i]=x1[i]/x2; + } + return result; + } + + template<typename T> + optvec<T>& operator/=(optvec<T>& x1,const optvec<T>& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]/=x2.at(i); + } + return x1; + } + + template<typename T> + optvec<T>& operator/=(optvec<T>& x1,const T& x2) + { + for(size_t i=0;i!=x1.size();++i) + { + x1[i]/=x2; + } + return x1; + } template <typename T> T sum(const optvec<T>& x) @@ -111,6 +235,28 @@ namespace opt_utilities } return false; } - + }; + + +#define DEF_VEC_FUNC(_func) template <typename T> \ + std::vector<T> _func(const opt_utilities::optvec<T>& x) \ + { \ + std::vector<T> 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 |