mirror of
https://github.com/ArashPartow/exprtk.git
synced 2025-06-12 16:27:23 +00:00
C++ Mathematical Expression Library (ExprTk) http://www.partow.net/programming/exprtk/index.html
This commit is contained in:
47
exprtk.hpp
47
exprtk.hpp
@ -409,7 +409,7 @@ namespace exprtk
|
|||||||
|
|
||||||
static const std::string cntrl_struct_list[] =
|
static const std::string cntrl_struct_list[] =
|
||||||
{
|
{
|
||||||
"if", "switch", "for", "while", "repeat"
|
"if", "switch", "for", "while", "repeat", "return"
|
||||||
};
|
};
|
||||||
|
|
||||||
static const std::size_t cntrl_struct_list_size = sizeof(cntrl_struct_list) / sizeof(std::string);
|
static const std::size_t cntrl_struct_list_size = sizeof(cntrl_struct_list) / sizeof(std::string);
|
||||||
@ -4207,11 +4207,13 @@ namespace exprtk
|
|||||||
return std::string(view.begin(),view.size());
|
return std::string(view.begin(),view.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef exprtk_disable_return_statement
|
||||||
namespace details
|
namespace details
|
||||||
{
|
{
|
||||||
template <typename T> class return_node;
|
template <typename T> class return_node;
|
||||||
template <typename T> class return_envelope_node;
|
template <typename T> class return_envelope_node;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class results_context
|
class results_context
|
||||||
@ -4261,8 +4263,10 @@ namespace exprtk
|
|||||||
bool results_available_;
|
bool results_available_;
|
||||||
ts_list_t parameter_list_;
|
ts_list_t parameter_list_;
|
||||||
|
|
||||||
|
#ifndef exprtk_disable_return_statement
|
||||||
friend class details::return_node<T>;
|
friend class details::return_node<T>;
|
||||||
friend class details::return_envelope_node<T>;
|
friend class details::return_envelope_node<T>;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace details
|
namespace details
|
||||||
@ -11526,6 +11530,7 @@ namespace exprtk
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifndef exprtk_disable_return_statement
|
||||||
template <typename T>
|
template <typename T>
|
||||||
class return_node : public generic_function_node<T,null_igenfunc<T> >
|
class return_node : public generic_function_node<T,null_igenfunc<T> >
|
||||||
{
|
{
|
||||||
@ -11626,6 +11631,7 @@ namespace exprtk
|
|||||||
expression_ptr body_;
|
expression_ptr body_;
|
||||||
bool body_deletable_;
|
bool body_deletable_;
|
||||||
};
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
#define exprtk_define_unary_op(OpName) \
|
#define exprtk_define_unary_op(OpName) \
|
||||||
template <typename T> \
|
template <typename T> \
|
||||||
@ -18889,7 +18895,8 @@ namespace exprtk
|
|||||||
e_ctrl_switch,
|
e_ctrl_switch,
|
||||||
e_ctrl_for_loop,
|
e_ctrl_for_loop,
|
||||||
e_ctrl_while_loop,
|
e_ctrl_while_loop,
|
||||||
e_ctrl_repeat_loop
|
e_ctrl_repeat_loop,
|
||||||
|
e_ctrl_return
|
||||||
};
|
};
|
||||||
|
|
||||||
enum settings_logic_opr
|
enum settings_logic_opr
|
||||||
@ -24003,6 +24010,7 @@ namespace exprtk
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef exprtk_disable_return_statement
|
||||||
inline expression_node_ptr parse_return_statement()
|
inline expression_node_ptr parse_return_statement()
|
||||||
{
|
{
|
||||||
if (state_.parsing_return_stmt)
|
if (state_.parsing_return_stmt)
|
||||||
@ -24112,6 +24120,12 @@ namespace exprtk
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
inline expression_node_ptr parse_return_statement()
|
||||||
|
{
|
||||||
|
return error_node();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline bool post_variable_process(const std::string& symbol)
|
inline bool post_variable_process(const std::string& symbol)
|
||||||
{
|
{
|
||||||
@ -24522,7 +24536,10 @@ namespace exprtk
|
|||||||
{
|
{
|
||||||
return parse_swap_statement();
|
return parse_swap_statement();
|
||||||
}
|
}
|
||||||
else if (details::imatch(current_token().value,symbol_return))
|
else if (
|
||||||
|
details::imatch(current_token().value,symbol_return) &&
|
||||||
|
settings_.control_struct_enabled(current_token().value)
|
||||||
|
)
|
||||||
{
|
{
|
||||||
return parse_return_statement();
|
return parse_return_statement();
|
||||||
}
|
}
|
||||||
@ -26522,6 +26539,7 @@ namespace exprtk
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifndef exprtk_disable_return_statement
|
||||||
inline expression_node_ptr return_call(std::vector<expression_node_ptr>& arg_list)
|
inline expression_node_ptr return_call(std::vector<expression_node_ptr>& arg_list)
|
||||||
{
|
{
|
||||||
if (!all_nodes_valid(arg_list))
|
if (!all_nodes_valid(arg_list))
|
||||||
@ -26565,6 +26583,19 @@ namespace exprtk
|
|||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
inline expression_node_ptr return_call(std::vector<expression_node_ptr>&)
|
||||||
|
{
|
||||||
|
return error_node();
|
||||||
|
}
|
||||||
|
|
||||||
|
inline expression_node_ptr return_envelope(expression_node_ptr,
|
||||||
|
results_context_t*,
|
||||||
|
bool*&)
|
||||||
|
{
|
||||||
|
return error_node();
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
inline expression_node_ptr vector_element(const std::string& symbol,
|
inline expression_node_ptr vector_element(const std::string& symbol,
|
||||||
vector_holder_ptr vector_base,
|
vector_holder_ptr vector_base,
|
||||||
@ -33518,6 +33549,7 @@ namespace exprtk
|
|||||||
|
|
||||||
inline void return_cleanup()
|
inline void return_cleanup()
|
||||||
{
|
{
|
||||||
|
#ifndef exprtk_disable_return_statement
|
||||||
if (results_context_)
|
if (results_context_)
|
||||||
{
|
{
|
||||||
delete results_context_;
|
delete results_context_;
|
||||||
@ -33525,6 +33557,7 @@ namespace exprtk
|
|||||||
}
|
}
|
||||||
|
|
||||||
state_.return_stmt_present = false;
|
state_.return_stmt_present = false;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -36619,7 +36652,7 @@ namespace exprtk
|
|||||||
vector_t vec(parameters[0]);
|
vector_t vec(parameters[0]);
|
||||||
|
|
||||||
T increment = scalar_t(parameters[1])();
|
T increment = scalar_t(parameters[1])();
|
||||||
T base = ((1 == ps_index) || (3 == ps_index))? scalar_t(parameters[2])() : T(0);
|
T base = ((1 == ps_index) || (3 == ps_index)) ? scalar_t(parameters[2])() : T(0);
|
||||||
|
|
||||||
std::size_t r0 = 0;
|
std::size_t r0 = 0;
|
||||||
std::size_t r1 = vec.size() - 1;
|
std::size_t r1 = vec.size() - 1;
|
||||||
@ -37097,9 +37130,9 @@ namespace exprtk
|
|||||||
namespace information
|
namespace information
|
||||||
{
|
{
|
||||||
static const char* library = "Mathematical Expression Toolkit";
|
static const char* library = "Mathematical Expression Toolkit";
|
||||||
static const char* version = "2.718281828459045235360287471352662497757247"
|
static const char* version = "2.71828182845904523536028747135266249775724709"
|
||||||
"09369995957496696762772407663035354759457138";
|
"3699959574966967627724076630353547594571382178";
|
||||||
static const char* date = "20170107";
|
static const char* date = "20170404";
|
||||||
|
|
||||||
static inline std::string data()
|
static inline std::string data()
|
||||||
{
|
{
|
||||||
|
41
readme.txt
41
readme.txt
@ -1316,7 +1316,7 @@ side-effects, however the latter, statement 5, is the final statement
|
|||||||
in the expression and hence will be assumed to have a side-effect.
|
in the expression and hence will be assumed to have a side-effect.
|
||||||
|
|
||||||
During compilation when the DCE optimisation is applied to the above
|
During compilation when the DCE optimisation is applied to the above
|
||||||
expression, statement 2 will be removed from the expression, as it has
|
expression, statement 3 will be removed from the expression, as it has
|
||||||
no bearing on the final result of expression, the rest of the
|
no bearing on the final result of expression, the rest of the
|
||||||
statements will all remain. The optimised form of the expression is as
|
statements will all remain. The optimised form of the expression is as
|
||||||
follows:
|
follows:
|
||||||
@ -1325,7 +1325,7 @@ follows:
|
|||||||
var y := x + 2; // Statement 2
|
var y := x + 2; // Statement 2
|
||||||
y := x + 3y; // Statement 3
|
y := x + 3y; // Statement 3
|
||||||
x - y; // Statement 4
|
x - y; // Statement 4
|
||||||
|
8
|
||||||
|
|
||||||
(3) Conditional Statements (If-Then-Else)
|
(3) Conditional Statements (If-Then-Else)
|
||||||
ExprTk support two forms of conditional branching or otherwise known
|
ExprTk support two forms of conditional branching or otherwise known
|
||||||
@ -1358,7 +1358,7 @@ most imperative languages. There are two variations of the statement:
|
|||||||
(a) If-Statement
|
(a) If-Statement
|
||||||
This version of the conditional statement returns the value of the
|
This version of the conditional statement returns the value of the
|
||||||
consequent expression when the condition expression is true, else it
|
consequent expression when the condition expression is true, else it
|
||||||
will require a quiet NaN value as its result.
|
will return a quiet NaN value as its result.
|
||||||
|
|
||||||
Example 1:
|
Example 1:
|
||||||
x := if (y < z) y + 3;
|
x := if (y < z) y + 3;
|
||||||
@ -2877,8 +2877,8 @@ simple user defined USR:
|
|||||||
|
|
||||||
|
|
||||||
In the example above, a user specified USR is defined, and is
|
In the example above, a user specified USR is defined, and is
|
||||||
registered with the parser enabling the USR functionality. The when an
|
registered with the parser enabling the USR functionality. Then when
|
||||||
unknown symbol is encountered during the compilation process, the
|
an unknown symbol is encountered during the compilation process, the
|
||||||
USR's process method will be invoked. The USR in the example will only
|
USR's process method will be invoked. The USR in the example will only
|
||||||
'accept' unknown symbols that have a prefix of 'var_' as being valid
|
'accept' unknown symbols that have a prefix of 'var_' as being valid
|
||||||
variables, all other unknown symbols will result in a compilation
|
variables, all other unknown symbols will result in a compilation
|
||||||
@ -4338,14 +4338,16 @@ disable certain features and capabilities. The defines can either be
|
|||||||
part of a compiler command line switch or scoped around the include to
|
part of a compiler command line switch or scoped around the include to
|
||||||
the ExprTk header. The defines are as follows:
|
the ExprTk header. The defines are as follows:
|
||||||
|
|
||||||
(1) exprtk_enable_debugging
|
(01) exprtk_enable_debugging
|
||||||
(2) exprtk_disable_comments
|
(02) exprtk_disable_comments
|
||||||
(3) exprtk_disable_break_continue
|
(03) exprtk_disable_break_continue
|
||||||
(4) exprtk_disable_sc_andor
|
(04) exprtk_disable_sc_andor
|
||||||
(5) exprtk_disable_enhanced_features
|
(05) exprtk_disable_return_statement
|
||||||
(6) exprtk_disable_string_capabilities
|
(06) exprtk_disable_enhanced_features
|
||||||
(7) exprtk_disable_superscalar_unroll
|
(07) exprtk_disable_string_capabilities
|
||||||
(8) exprtk_disable_rtl_io_file
|
(08) exprtk_disable_superscalar_unroll
|
||||||
|
(09) exprtk_disable_rtl_io_file
|
||||||
|
(10) exprtk_disable_rtl_vecops
|
||||||
|
|
||||||
|
|
||||||
(1) exprtk_enable_debugging
|
(1) exprtk_enable_debugging
|
||||||
@ -4366,19 +4368,22 @@ in a compilation failure.
|
|||||||
This define will disable the short-circuit '&' (and) and '|' (or)
|
This define will disable the short-circuit '&' (and) and '|' (or)
|
||||||
operators
|
operators
|
||||||
|
|
||||||
(5) exprtk_disable_enhanced_features
|
(5) exprtk_disable_return_statement
|
||||||
|
This define will disable use of return statements within expressions.
|
||||||
|
|
||||||
|
(6) exprtk_disable_enhanced_features
|
||||||
This define will disable all enhanced features such as strength
|
This define will disable all enhanced features such as strength
|
||||||
reduction and special function optimisations and expression specific
|
reduction and special function optimisations and expression specific
|
||||||
type instantiations. This feature will reduce compilation times and
|
type instantiations. This feature will reduce compilation times and
|
||||||
binary sizes but will also result in massive performance degradation
|
binary sizes but will also result in massive performance degradation
|
||||||
of expression evaluations.
|
of expression evaluations.
|
||||||
|
|
||||||
(6) exprtk_disable_string_capabilities
|
(7) exprtk_disable_string_capabilities
|
||||||
This define will disable all string processing capabilities. Any
|
This define will disable all string processing capabilities. Any
|
||||||
expression that contains a string or string related syntax will result
|
expression that contains a string or string related syntax will result
|
||||||
in a compilation failure.
|
in a compilation failure.
|
||||||
|
|
||||||
(7) exprtk_disable_superscalar_unroll
|
(8) exprtk_disable_superscalar_unroll
|
||||||
This define will set the loop unroll batch size to 4 operations per
|
This define will set the loop unroll batch size to 4 operations per
|
||||||
loop instead of the default 8 operations. This define is used in
|
loop instead of the default 8 operations. This define is used in
|
||||||
operations that involve vectors and aggregations over vectors. When
|
operations that involve vectors and aggregations over vectors. When
|
||||||
@ -4386,12 +4391,12 @@ targeting non-superscalar architectures, it may be recommended to
|
|||||||
build using this particular option if efficiency of evaluations is of
|
build using this particular option if efficiency of evaluations is of
|
||||||
concern.
|
concern.
|
||||||
|
|
||||||
(8) exprtk_disable_rtl_io_file
|
(9) exprtk_disable_rtl_io_file
|
||||||
This define will disable the file I/O RTL package features. When
|
This define will disable the file I/O RTL package features. When
|
||||||
present, any attempts to register the file I/O package with a given
|
present, any attempts to register the file I/O package with a given
|
||||||
symbol table will fail causing a compilation error.
|
symbol table will fail causing a compilation error.
|
||||||
|
|
||||||
(9) exprtk_disable_rtl_vecops
|
(10) exprtk_disable_rtl_vecops
|
||||||
This define will disable the extended vector operations RTL package
|
This define will disable the extended vector operations RTL package
|
||||||
features. When present, any attempts to register the vector operations
|
features. When present, any attempts to register the vector operations
|
||||||
package with a given symbol table will fail causing a compilation
|
package with a given symbol table will fail causing a compilation
|
||||||
|
Reference in New Issue
Block a user