#include <formulaparser.h>
Calculates the result of mathematical expressions provided as strings.
The parser supports the unit types km, m, cm, mm, um (also micron-sign-character + m), nm, mi, yd, ft, and in. It also supports the functions sin(x), cos(x), acos(x), asin(x), tan(x), atan(x), cosh(x), sinh(x), tanh(x), floor(x), ceil(x), round(x), abs(x), sqr(x), sqrt(x), exp(x), log(x), log10(x), trunc(x), rnd(x) (random value between 0 and x), rnd(x;y) (y is a seed value), pow(x;y), mod(a;b), clamp(x;lower;upper), min(x;y), max(x;y), a<<b, (x)shl(y) (bitwise shift), a>>b, (x)shr(y) (bitwise shift), and len(a;b;...) (vector length of two or more components). Addtionally, the operators +, -, *, /, (, ), =, ==, >, >=, <, <=, !=, ! (bitwise not), ||, or, &&, and, & (bitwise and), | (bitwise or), ^ (bitwise xor), ~ (bitwise not), cond?(x;y) (conditional statement), and if (cond;x;y) (conditional statement) are supported. The symbols e and pi are being interpreted as the respective irrational numbers, and both the dot and comma character will be interpreted as a decimal point.
The interface can throw the errors FormulaExecutionError, FormulaNumberError, and FormulaParseError.
Public Types | |
using | VariableDictionary = DataDictionary |
Static Public Member Functions | |
static MAXON_METHOD FormulaParserInterface * | Alloc (MAXON_SOURCE_LOCATION_DECLARATION) |
Private Member Functions | |
MAXON_INTERFACE_NONVIRTUAL (FormulaParserInterface, MAXON_REFERENCE_NORMAL, "net.maxon.interface.formulaparser") | |
using VariableDictionary = DataDictionary |
|
private |
|
static |
allocator for common use.
MAXON_METHOD Result<void> AddFloatVariable | ( | const String & | name, |
Float64 * | val, | ||
Bool | caseSensitive | ||
) |
Adds a floating point variable to the formula parser. All variables must be known to the parser for CalculateParserCache calls.
[in] | name | Name of the variable. |
[in] | val | Pointer to the variable. Note that the pointer must always be valid when Calculate or Evaluate are called. |
[in] | caseSensitive | If false, then the user can write the letters of the variable using any lower/uppercase combinations. |
MAXON_METHOD Result<void> AddIntVariable | ( | const String & | name, |
Int64 * | val, | ||
Bool | caseSensitive | ||
) |
Adds an integer variable to the formula parser. All variables must be known to the parser for CalculateParserCache calls.
[in] | name | Name of the variable. |
[in] | val | Pointer to the variable. Note that the pointer must always be valid when Calculate or Evaluate are called. |
[in] | caseSensitive | If false, then the user can write the letters of the variable using any lower/uppercase combinations. |
MAXON_METHOD Result<void> AddStringVariable | ( | const String & | name, |
String * | val, | ||
Bool | caseSensitive | ||
) |
Adds a string variable to the formula parser. All variables must be known to the parser for CalculateParserCache calls.
[in] | name | Name of the variable. |
[in] | val | Pointer to the variable. Note that the pointer must always be valid when Calculate or Evaluate are called. |
[in] | caseSensitive | If false, then the user can write the letters of the variable using any lower/uppercase combinations. |
MAXON_METHOD Result<void> RemoveVariable | ( | const String & | name, |
Bool | caseSensitive | ||
) |
Removes variable from the formula parser.
[in] | name | Name of the variable. |
[in] | caseSensitive | If false, then any variable that matches any possible lower/uppercase combination will be picked. |
MAXON_METHOD Result<void> CalculateParserCache | ( | FormulaParserCacheRef & | cache, |
const String & | formula, | ||
METRICUNIT | unit, | ||
ANGLEUNIT | angleUnit, | ||
Int | base, | ||
Bool | integerMode | ||
) |
Translates a formula expression string into a pre-parsed cache.
[out] | cache | Cache that will be created. |
[in] | formula | Formula to be parsed. |
[in] | unit | The metric unit format for the result value. If set to METRICUNIT::NONE all metric units will be ignored as if they were not present. |
[in] | angleUnit | The angular unit that trigonometric functions expect as input / produce as output. |
[in] | base | The numerical base for numbers in the range of [2..36], by default 10. If the base is != 10 then any number will be parsed as an integer value. |
[in] | integerMode | Calculate expressions with integer numbers (floating point values cannot accurately represent most of the Int64 values) |
MAXON_METHOD Result<void> CalculateFloat | ( | FormulaParserCacheRef & | cache, |
Float32 & | result | ||
) |
Executes a floating point formula calculation using a pre-parsed cache for better performance. This method is not thread safe. See the const version of CalculateFloat/Int for thread safe calls.
[in] | cache | Pre-parsed cache generated by CalculateParserCache. |
[out] | result | Will be filled with the result of the formula (even if a neglectable error occurred) or 0.0. |
MAXON_METHOD Result<void> CalculateFloat | ( | FormulaParserCacheRef & | cache, |
Float64 & | result | ||
) |
MAXON_METHOD Result<void> CalculateInt | ( | FormulaParserCacheRef & | cache, |
Int64 & | result | ||
) |
Executes an integer formula calculation using a pre-parsed cache for better performance. This method is not thread safe. See the const version of CalculateFloat/Int for thread safe calls.
[in] | cache | Pre-parsed cache generated by CalculateParserCache. |
[out] | result | Will be filled with the result of the formula (even if a neglectable error occurred) or 0. |
MAXON_METHOD Result<void> EvaluateFloat | ( | const String & | formula, |
Float64 & | result, | ||
METRICUNIT | unit = METRICUNIT::NONE , |
||
ANGLEUNIT | angleUnit = ANGLEUNIT::RADIANS , |
||
Int | base = 10 |
||
) |
Evaluates a floating point formula. If you need multiple calls to the same formula (e.g. when variables are used) use CalculateParserCache and CalculateFloat for better performance. This method is not thread safe. See the const version of CalculateFloat/Int for thread safe calls.
[in] | formula | Formula to be parsed. |
[out] | result | Will be filled with the result of the formula (might even be the case if a neglectable error occured) or 0.0. |
[in] | unit | The metric unit format for the result value. If set to METRICUNIT::NONE all metric units will be ignored as if they were not present. |
[in] | angleUnit | The angular unit that trigonometric functions expect as input / produce as output. |
[in] | base | The numerical base for numbers in the range of [2..36], by default 10. If the base is != 10 then any number will be parsed as an integer value. |
MAXON_METHOD Result<void> EvaluateInt | ( | const String & | formula, |
Int64 & | result, | ||
METRICUNIT | unit = METRICUNIT::NONE , |
||
ANGLEUNIT | angleUnit = ANGLEUNIT::RADIANS , |
||
Int | base = 10 |
||
) |
Evaluates an integer formula. If you need multiple calls to the same formula (e.g. when variables are used) use CalculateParserCache and CalculateInt for better performance. This method is not thread safe. See the const version of CalculateFloat/Int for thread safe calls.
[in] | formula | Formula to be parsed. |
[out] | result | Will be filled with the result of the formula (might even be the case if a neglectable error occured) or 0. |
[in] | unit | The metric unit format for the result value. If set to METRICUNIT::NONE all metric units will be ignored as if they were not present. |
[in] | angleUnit | The angular unit that trigonometric functions expect as input / produce as output. |
[in] | base | The numerical base for numbers in the range of [2..36], by default 10. |
MAXON_METHOD Result<void> AddDataVariable | ( | const String & | name, |
Data * | val, | ||
Bool | caseSensitive | ||
) |
Adds a Data variable to the formula parser. All variables must be known to the parser for CalculateParserCache calls.
[in] | name | Name of the variable. |
[in] | val | Pointer to the variable. Note that the pointer must always be valid when Calculate or Evaluate are called. |
[in] | caseSensitive | If false, then the user can write the letters of the variable using any lower/uppercase combinations. |
MAXON_METHOD Result<void> AddDummyFloatVariable | ( | const String & | name, |
Bool | caseSensitive | ||
) |
Adds a floating point variable to the formula parser with no valid address. Parser will only refer to the name for formula caching. All variables must be known to the parser for CalculateParserCache calls, even if they are dummies.
[in] | name | Name of the variable. |
[in] | caseSensitive | If false, then the user can write the letters of the variable using any lower/uppercase combinations. |
MAXON_METHOD Result<void> AddDummyIntVariable | ( | const String & | name, |
Bool | caseSensitive | ||
) |
Adds an integer variable to the formula parser with no valid address. Parser will only refer to the name for formula caching. All variables must be known to the parser for CalculateParserCache calls, even if they are dummies.
[in] | name | Name of the variable. |
[in] | caseSensitive | If false, then the user can write the letters of the variable using any lower/uppercase combinations. |
MAXON_METHOD Result<void> AddDummyStringVariable | ( | const String & | name, |
Bool | caseSensitive | ||
) |
Adds a string variable to the formula parser with no valid address. Parser will only refer to the name for formula caching. All variables must be known to the parser for CalculateParserCache calls, even if they are dummies.
[in] | name | Name of the variable. |
[in] | caseSensitive | If false, then the user can write the letters of the variable using any lower/uppercase combinations. |
MAXON_METHOD Result<void> AddDummyDataVariable | ( | const String & | name, |
Bool | caseSensitive | ||
) |
Adds a Data variable to the formula parser with no valid address. Parser will only refer to the name for formula caching. All variables must be known to the parser for CalculateParserCache calls, even if they are dummies.
[in] | name | Name of the variable. |
[in] | caseSensitive | If false, then the user can write the letters of the variable using any lower/uppercase combinations. |
MAXON_METHOD Result<void> CalculateFloat | ( | const FormulaParserCacheRef & | cache, |
const VariableDictionary & | varOverrides, | ||
Float32 & | result | ||
) |
Executes a floating point formula calculation using a pre-parsed cache for better performance. Method is thread safe if used with the #varOverrides dictionary. Each thread must supply it's own variable's address so the parser can be given a specific variable value on each thread. I.e. use with AddDummyXVariable methods. The variable names must match those given through the AddFloat/Int/StringVariable calls. If #caseSensitive was false, the VariableDictionary key should be an upper case hashed string.
[in] | cache | Pre-parsed cache generated by CalculateParserCache. Cache is const and can be used in multi threaded execution. |
[in] | varOverrides | Variable dictionary that can be supplied as an override for multi threaded execution. |
[out] | result | Will be filled with the result of the formula (even if a neglectable error occurred) or 0.0. |
MAXON_METHOD Result<void> CalculateFloat | ( | const FormulaParserCacheRef & | cache, |
const VariableDictionary & | varOverrides, | ||
Float64 & | result | ||
) |
MAXON_METHOD Result<void> CalculateInt | ( | const FormulaParserCacheRef & | cache, |
const VariableDictionary & | varOverrides, | ||
Int64 & | result | ||
) |
Executes an integer formula calculation using a pre-parsed cache for better performance. Method is thread safe if used with the #varOverrides dictionary. Each thread must supply it's own variable's address so the parser can be given a specific variable value on each thread. I.e. use with AddDummyXVariable methods. The variable names must match those given through the AddFloat/Int/StringVariable calls. If #caseSensitive was false, the VariableDictionary key should be an upper case hashed string.
[in,out] | cache | Pre-parsed cache generated by CalculateParserCache. The cache might be modified during this call. |
[out] | result | Will be filled with the result of the formula (even if a neglect able error occurred) or 0. |