From ef2d4ba215e775ad60de8349a759e9e7ee28c7a1 Mon Sep 17 00:00:00 2001 From: "Schoenit, Tobias ST/BHL-TPO1" Date: Tue, 28 Mar 2023 15:04:05 +0200 Subject: [PATCH] removed non const ref() function --- exprtk.hpp | 77 +++++++++++++++++++++++++++++++++++++++++++++--------- 1 file changed, 65 insertions(+), 12 deletions(-) diff --git a/exprtk.hpp b/exprtk.hpp index 4abf6d2..0f569c5 100644 --- a/exprtk.hpp +++ b/exprtk.hpp @@ -7586,11 +7586,17 @@ namespace exprtk { *value_ = val; } -#endif + + inline T* value_ptr() + { + return value_; + } +#else inline T& ref() exprtk_override { - return (*value_); + return (*value_); } +#endif inline const T& ref() const exprtk_override { @@ -8183,8 +8189,15 @@ namespace exprtk inline T value() const exprtk_override { +#ifdef exprtk_enable_vector_runtime_checks + const T tmp = var1_->ref(); + var1_->set(var0_->ref()); + var0_->set(tmp); + return tmp; +#else std::swap(var0_->ref(),var1_->ref()); return var1_->ref(); +#endif } inline typename expression_node::node_type type() const exprtk_override @@ -10458,9 +10471,13 @@ namespace exprtk if (var_node_ptr_) { assert(branch(1)); - +#ifdef exprtk_enable_vector_runtime_checks + T result = branch(1)->value(); + var_node_ptr_->set(result); +#else T& result = var_node_ptr_->ref(); result = branch(1)->value(); +#endif return result; } @@ -12742,7 +12759,7 @@ namespace exprtk return false; ts.size = 1; - ts.data = &var->ref(); + ts.data = var->value_ptr(); ts.type = type_store_t::e_scalar; } else @@ -37795,12 +37812,21 @@ namespace exprtk if (var) { +#ifdef exprtk_enable_vector_runtime_checks + T& x = *(var->value_ptr()); + const T x_original = x; + const T result = integrate(e, x, r0, r1, number_of_intervals); + var->set(x_original); + + return result; +#else T& x = var->ref(); const T x_original = x; const T result = integrate(e, x, r0, r1, number_of_intervals); x = x_original; return result; +#endif } else return std::numeric_limits::quiet_NaN(); @@ -37886,12 +37912,21 @@ namespace exprtk if (var) { - T& x = var->ref(); +#ifdef exprtk_enable_vector_runtime_checks + T& x = *(var->value_ptr()); + const T x_original = x; + const T result = derivative(e, x, h); + var->set(x_original); + + return result; +#else + T& x = var->ref(); const T x_original = x; const T result = derivative(e, x, h); x = x_original; return result; +#endif } else return std::numeric_limits::quiet_NaN(); @@ -37913,12 +37948,21 @@ namespace exprtk if (var) { +#ifdef exprtk_enable_vector_runtime_checks + T &x = *(var->value_ptr()); + const T x_original = x; + const T result = second_derivative(e, x, h); + var->set(x_original); + + return result; +#else T& x = var->ref(); const T x_original = x; const T result = second_derivative(e, x, h); x = x_original; return result; +#endif } else return std::numeric_limits::quiet_NaN(); @@ -37940,12 +37984,21 @@ namespace exprtk if (var) { +#ifdef exprtk_enable_vector_runtime_checks + T &x = *(var->value_ptr()); + const T x_original = x; + const T result = third_derivative(e, x, h); + var->set(x_original); + + return result; +#else T& x = var->ref(); const T x_original = x; const T result = third_derivative(e, x, h); x = x_original; return result; +#endif } else return std::numeric_limits::quiet_NaN(); @@ -40356,7 +40409,7 @@ namespace exprtk for (std::size_t i = r1 - n + 1; i <= r1; ++i) { #ifdef exprtk_enable_vector_runtime_checks - vec.set(i, T(0)); + vec.set(i, T(0)); #else vec[i] = T(0); #endif @@ -40420,7 +40473,7 @@ namespace exprtk for (std::size_t i = r0; i < r0 + n; ++i) { #ifdef exprtk_enable_vector_runtime_checks - vec.set(i, T(0)); + vec.set(i, T(0)); #else vec[i] = T(0); #endif @@ -40583,7 +40636,7 @@ namespace exprtk for (std::size_t i = r0; i <= r1; ++i, ++j) { #ifdef exprtk_enable_vector_runtime_checks - vec.set(i, base + (increment * j)); + vec.set(i, base + (increment * j)); #else vec[i] = base + (increment * j); #endif @@ -40678,7 +40731,7 @@ namespace exprtk for (std::size_t i = r0; i <= r1; ++i) { #ifdef exprtk_enable_vector_runtime_checks - y.set(i, (a * x[i]) + y[i]); + y.set(i, (a * x[i]) + y[i]); #else y[i] = (a * x[i]) + y[i]; #endif @@ -40730,7 +40783,7 @@ namespace exprtk for (std::size_t i = r0; i <= r1; ++i) { #ifdef exprtk_enable_vector_runtime_checks - y.set(i, (a * x[i]) + (b * y[i])); + y.set(i, (a * x[i]) + (b * y[i])); #else y[i] = (a * x[i]) + (b * y[i]); #endif @@ -40839,7 +40892,7 @@ namespace exprtk for (std::size_t i = r0; i <= r1; ++i) { #ifdef exprtk_enable_vector_runtime_checks - z.set(i, (a * x[i]) + (b * y[i])); + z.set(i, (a * x[i]) + (b * y[i])); #else z[i] = (a * x[i]) + (b * y[i]); #endif @@ -40891,7 +40944,7 @@ namespace exprtk for (std::size_t i = r0; i <= r1; ++i) { #ifdef exprtk_enable_vector_runtime_checks - z.set(i, (a * x[i]) + b); + z.set(i, (a * x[i]) + b); #else z[i] = (a * x[i]) + b; #endif