C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html

This commit is contained in:
Arash Partow 2016-08-02 20:07:52 +10:00
parent 3a684785a8
commit 57841f8a11
3 changed files with 20 additions and 14 deletions

View File

@ -14468,7 +14468,7 @@ namespace exprtk
freefunc6(ff6_functor ff) : exprtk::ifunction<T>(6), f(ff) {} freefunc6(ff6_functor ff) : exprtk::ifunction<T>(6), f(ff) {}
inline T operator()(const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, const T& v5) inline T operator()(const T& v0, const T& v1, const T& v2, const T& v3, const T& v4, const T& v5)
{ return f(v0,v1,v2,v3,v4,v5); } { return f(v0,v1,v2,v3,v4,v5); }
ff5_functor f; ff6_functor f;
}; };
template <typename Type, typename RawType> template <typename Type, typename RawType>
@ -14953,19 +14953,22 @@ namespace exprtk
inline symbol_table<T>& operator=(const symbol_table<T>& st) inline symbol_table<T>& operator=(const symbol_table<T>& st)
{ {
if (holder_) if (this != &st)
{ {
if (0 == --holder_->ref_count) if (holder_)
{ {
delete holder_; if (0 == --holder_->ref_count)
{
delete holder_;
}
holder_ = 0;
} }
holder_ = 0; holder_ = st.holder_;
holder_->ref_count++;
} }
holder_ = st.holder_;
holder_->ref_count++;
return *this; return *this;
} }

View File

@ -3139,6 +3139,7 @@ double foo2(double v0, double v1) { return v0 + v1; }
double foo3(double v0, double v1, double v2) { return v0 + v1 + v2; } double foo3(double v0, double v1, double v2) { return v0 + v1 + v2; }
double foo4(double v0, double v1, double v2, double v3) { return v0 + v1 + v2 + v3; } double foo4(double v0, double v1, double v2, double v3) { return v0 + v1 + v2 + v3; }
double foo5(double v0, double v1, double v2, double v3, double v4) { return v0 + v1 + v2 + v3 + v4; } double foo5(double v0, double v1, double v2, double v3, double v4) { return v0 + v1 + v2 + v3 + v4; }
double foo6(double v0, double v1, double v2, double v3, double v4, double v5) { return v0 + v1 + v2 + v3 + v4 + v5; }
template <typename T> template <typename T>
inline bool run_test09() inline bool run_test09()
@ -3241,11 +3242,12 @@ inline bool run_test09()
const std::string expression_list[] = const std::string expression_list[] =
{ {
"foo1(1) == 1", "foo1(1) == 1",
"foo2(1,2) == (1 + 2)", "foo2(1,2) == (1 + 2)",
"foo3(1,2,3) == (1 + 2 + 3)", "foo3(1,2,3) == (1 + 2 + 3)",
"foo4(1,2,3,4) == (1 + 2 + 3 + 4)", "foo4(1,2,3,4) == (1 + 2 + 3 + 4)",
"foo5(1,2,3,4,5) == (1 + 2 + 3 + 4 + 5)" "foo5(1,2,3,4,5) == (1 + 2 + 3 + 4 + 5)",
"foo6(1,2,3,4,5,6) == (1 + 2 + 3 + 4 + 5 + 6)"
}; };
const std::size_t expression_list_size = sizeof(expression_list) / sizeof(std::string); const std::size_t expression_list_size = sizeof(expression_list) / sizeof(std::string);
@ -3257,6 +3259,7 @@ inline bool run_test09()
symbol_table.add_function("foo3",foo3); symbol_table.add_function("foo3",foo3);
symbol_table.add_function("foo4",foo4); symbol_table.add_function("foo4",foo4);
symbol_table.add_function("foo5",foo5); symbol_table.add_function("foo5",foo5);
symbol_table.add_function("foo6",foo6);
for (std::size_t i = 0; i < expression_list_size; ++i) for (std::size_t i = 0; i < expression_list_size; ++i)
{ {

View File

@ -881,7 +881,7 @@ std::vector.
Expressions | | Expressions as Expressions | | Expressions as
in string form A V exprtk::expression in string form A V exprtk::expression
| | instances | | instances
[s0:'x+1' ]-+ | | +-[e0: x+1] [s0:'x+1']------+ | | +-[e0: x+1]
| | | | | | | |
[s1:'2z+y']-----+--+ +-->+-[e1: 2z+y] [s1:'2z+y']-----+--+ +-->+-[e1: 2z+y]
| | | |