diff options
author | 2009-05-20 15:41:23 +0200 | |
---|---|---|
committer | 2009-05-20 15:41:23 +0200 | |
commit | dd45c4805ced4ad8ead743875f42259e9b6a2795 (patch) | |
tree | 22ba6d80c2f8d60721e38adf579ffb6bba23d0f5 /Eigen/src/Core/MathFunctions.h | |
parent | 6ecd02d7ec85f07e02559cb311d4dd07e844a72d (diff) |
* add a writable generic coeff wise expression (CwiseUnaryView)
* add writable .real() and .imag() functions
Diffstat (limited to 'Eigen/src/Core/MathFunctions.h')
-rw-r--r-- | Eigen/src/Core/MathFunctions.h | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/Eigen/src/Core/MathFunctions.h b/Eigen/src/Core/MathFunctions.h index e201f98b2..64131ea78 100644 --- a/Eigen/src/Core/MathFunctions.h +++ b/Eigen/src/Core/MathFunctions.h @@ -53,6 +53,7 @@ template<typename T> inline typename NumTraits<T>::Real ei_hypot(T x, T y) template<> inline int precision<int>() { return 0; } template<> inline int machine_epsilon<int>() { return 0; } inline int ei_real(int x) { return x; } +inline int& ei_real_ref(int& x) { return x; } inline int ei_imag(int) { return 0; } inline int ei_conj(int x) { return x; } inline int ei_abs(int x) { return abs(x); } @@ -106,6 +107,7 @@ inline bool ei_isApproxOrLessThan(int a, int b, int = precision<int>()) template<> inline float precision<float>() { return 1e-5f; } template<> inline float machine_epsilon<float>() { return 1.192e-07f; } inline float ei_real(float x) { return x; } +inline float& ei_real_ref(float& x) { return x; } inline float ei_imag(float) { return 0.f; } inline float ei_conj(float x) { return x; } inline float ei_abs(float x) { return std::abs(x); } @@ -153,6 +155,7 @@ template<> inline double precision<double>() { return 1e-11; } template<> inline double machine_epsilon<double>() { return 2.220e-16; } inline double ei_real(double x) { return x; } +inline double& ei_real_ref(double& x) { return x; } inline double ei_imag(double) { return 0.; } inline double ei_conj(double x) { return x; } inline double ei_abs(double x) { return std::abs(x); } @@ -200,6 +203,8 @@ template<> inline float precision<std::complex<float> >() { return precision<flo template<> inline float machine_epsilon<std::complex<float> >() { return machine_epsilon<float>(); } inline float ei_real(const std::complex<float>& x) { return std::real(x); } inline float ei_imag(const std::complex<float>& x) { return std::imag(x); } +inline float& ei_real_ref(std::complex<float>& x) { return reinterpret_cast<float*>(&x)[0]; } +inline float& ei_imag_ref(std::complex<float>& x) { return reinterpret_cast<float*>(&x)[1]; } inline std::complex<float> ei_conj(const std::complex<float>& x) { return std::conj(x); } inline float ei_abs(const std::complex<float>& x) { return std::abs(x); } inline float ei_abs2(const std::complex<float>& x) { return std::norm(x); } @@ -234,6 +239,8 @@ template<> inline double precision<std::complex<double> >() { return precision<d template<> inline double machine_epsilon<std::complex<double> >() { return machine_epsilon<double>(); } inline double ei_real(const std::complex<double>& x) { return std::real(x); } inline double ei_imag(const std::complex<double>& x) { return std::imag(x); } +inline double& ei_real_ref(std::complex<double>& x) { return reinterpret_cast<double*>(&x)[0]; } +inline double& ei_imag_ref(std::complex<double>& x) { return reinterpret_cast<double*>(&x)[1]; } inline std::complex<double> ei_conj(const std::complex<double>& x) { return std::conj(x); } inline double ei_abs(const std::complex<double>& x) { return std::abs(x); } inline double ei_abs2(const std::complex<double>& x) { return std::norm(x); } @@ -268,6 +275,7 @@ inline bool ei_isApprox(const std::complex<double>& a, const std::complex<double template<> inline long double precision<long double>() { return precision<double>(); } template<> inline long double machine_epsilon<long double>() { return 1.084e-19l; } inline long double ei_real(long double x) { return x; } +inline long double& ei_real_ref(long double& x) { return x; } inline long double ei_imag(long double) { return 0.; } inline long double ei_conj(long double x) { return x; } inline long double ei_abs(long double x) { return std::abs(x); } |