mbxmlutils 1.3.0 Multi-Body XML Utils

Public Types | Public Member Functions | Static Public Member Functions | Static Public Attributes | Protected Member Functions | Static Protected Member Functions | Protected Attributes | Private Member Functions | Static Private Member Functions | Static Private Attributes | Friends | List of all members
MBXMLUtils::Eval Class Referenceabstract

`#include <eval.h>`

Inheritance diagram for MBXMLUtils::Eval:
[legend]

## Public Types

enum | ValueType { ScalarType, VectorType, MatrixType, StringType, FunctionType }
using | Value = std::shared_ptr< void >
| Typedef for a shared value.

## Public Member Functions

| ~Eval () override
| Destructor.
| Eval (const Eval &other)=delete
| Eval (Eval &&other)=delete
Eval & | operator= (const Eval &other)=delete
Eval & | operator= (Eval &&other)=delete
virtual std::string | getName () const =0
| Get the type of this evaluator.
void | addParam (const std::string &paramName, const Value &value)
| Add a value to the current parameters.
void | addParamSet (const xercesc::DOMElement *e)
virtual void | addImport (const std::string &code, const xercesc::DOMElement *e)=0
Value | eval (const xercesc::DOMElement *e)
Value | eval (const xercesc::DOMAttr *a)
Value | eval (const std::string &str, const xercesc::DOMElement *e=nullptr, bool skipRet=false)
template<typename T >
T | cast (const Value &value) const
virtual std::string | getStringRepresentation (const Value &x) const
| Returns a evaluator specific string representation of x. This is only useful for display to the user.
virtual bool | valueIsOfType (const Value &value, ValueType type) const =0
Value | stringToValue (const std::string &str, const xercesc::DOMElement *e=nullptr, bool fullEval=true) const
template<class T >
Value | create (const T &v) const
virtual std::map< boost::filesystem::path, std::pair< boost::filesystem::path, bool > > & | requiredFiles () const =0
| return a list of all required files of the evaluator (excluding dependent files of libraries)
virtual void | convertIndex (Value &v, bool evalTo1Based)=0
virtual Value | callFunction (const std::string &name, const std::vector< Value > &args) const =0
template<>
string | cast (const Value &value) const
template<>
CodeString | cast (const Value &value) const
template<>
double | cast (const Value &value) const
template<>
int | cast (const Value &value) const
template<>
vector< double > | cast (const Value &value) const
template<>
vector< vector< double > > | cast (const Value &value) const
template<>
Eval::Value | create (const double &v) const
template<>
Eval::Value | create (const vector< double > &v) const
template<>
Eval::Value | create (const vector< vector< double > > &v) const
template<>
Eval::Value | create (const string &v) const
template<>
CodeString | cast (const Value &value) const
template<>
double | cast (const Value &value) const
template<>
int | cast (const Value &value) const
template<>
Eval::Value | create (const double &v) const

## Static Public Member Functions

static std::shared_ptr< Eval > | createEvaluator (const std::string &evalName, std::vector< boost::filesystem::path > *dependencies_=nullptr)
| Create a evaluator.
template<class E >
static void | registerEvaluator ()
static void | setValue (xercesc::DOMElement *e, const Value &v)
| Set value on DOMElement (is used by Eval::cast)

## Static Public Attributes

static boost::filesystem::path | installPath

## Protected Member Functions

| Eval (std::vector< boost::filesystem::path > *dependencies_)
| Constructor.
virtual Value | createFunctionIndep (int dim) const =0
| create a function independent variable. If dim == 0 a scalar is created else a vector.
virtual Value | createFunctionDep (const std::vector< Value > &v) const =0
| create a vector function dependent
virtual Value | createFunctionDep (const std::vector< std::vector< Value > > &v) const =0
| create a matrix function dependent
virtual Value | createFunction (const std::vector< Value > &indeps, const Value &dep) const =0
| create a Function with n independents and a dependent function (scalar, vector or matrix)
void | pushContext ()
| Push the current context to a internal stack.
void | popContext ()
| Overwrite the current context with the top level context from the internal stack.
virtual Value | fullStringToValue (const std::string &str, const xercesc::DOMElement *e, bool skipRet=false) const =0
| evaluate the string str using the current parameters and return the result.
std::string | partialStringToString (const std::string &str, const xercesc::DOMElement *e) const
| evaluate str partially and return result as an std::string
void | addStaticDependencies (const xercesc::DOMElement *e) const

## Static Protected Member Functions

template<class E >
static std::shared_ptr< Eval > | newEvaluator (std::vector< boost::filesystem::path > *dependencies_)
static void | printEvaluatorMsg (const std::ostringstream &str, MsgType msgType)

## Protected Attributes

std::vector< boost::filesystem::path > * | dependencies
std::unordered_map< std::string, Value > | currentParam
std::stack< std::unordered_map< std::string, Value > > | paramStack
Value | currentImport
std::stack< Value > | importStack

## Private Member Functions

virtual double | cast_double (const Value &value) const =0
virtual std::vector< double > | cast_vector_double (const Value &value) const =0
virtual std::vector< std::vector< double > > | cast_vector_vector_double (const Value &value) const =0
virtual std::string | cast_string (const Value &value) const =0
CodeString | cast_CodeString (const Value &value) const
int | cast_int (const Value &value) const
virtual Value | create_double (const double &v) const =0
virtual Value | create_vector_double (const std::vector< double > &v) const =0
virtual Value | create_vector_vector_double (const std::vector< std::vector< double > > &v) const =0
virtual Value | create_string (const std::string &v) const =0
virtual std::string | serializeFunction (const Value &x) const =0
Value | handleUnit (const xercesc::DOMElement *e, const Value &ret)

## Static Private Member Functions

static std::map< std::string, std::function< std::shared_ptr< Eval >std::vector< boost::filesystem::path > *)> > & | getEvaluators ()

## Static Private Attributes

static std::map< std::string, std::string > | units

## Friends

class | NewParamLevel

## Detailed Description

Expression evaluator and converter.

## Member Enumeration Documentation

## ◆ ValueType

enum MBXMLUtils::Eval::ValueType

Known types for a variable See also valueIsOfType.

## Member Function Documentation

## ◆ addImport()

virtual void MBXMLUtils::Eval::addImport | ( | const std::string & | code,
|  | const xercesc::DOMElement * | e
| ) |  |

pure virtual

Import evaluator statements. This routine highly depends on the evaluator. See the spezialized evaluators documentation for details.

Implemented in MBXMLUtils::OctEval, MBXMLUtils::PyEval, and MBXMLUtils::XMLFlatEval.

## ◆ addParamSet()

void MBXMLUtils::Eval::addParamSet | ( | const xercesc::DOMElement * | e | ) |

Add all parameters from XML element e. The parameters are added from top to bottom as they appear in the XML element e. Parameters may depend on parameters already added.

## ◆ callFunction()

virtual Value MBXMLUtils::Eval::callFunction | ( | const std::string & | name,
|  | const std::vector< Value > & | args
| ) |  | const

pure virtual

Return the value of a call to name using the arguments args. The following functions must be implemented by the evaluator:

- rotateAboutX(alpha): returns a 3x3 rotation matrix about the x-axis by angle alpha which is given in rad.
- rotateAboutY(beta): returns a 3x3 rotation matrix about the y-axis by angle beta which is given in rad.
- rotateAboutZ(gamma): returns a 3x3 rotation matrix about the z-axis by angle gamma which is given in rad.
- cardan(alpha, beta, gamma): returns a 3x3 rotation matrix of a cardan rotation about the angles alpha, beta and gamma which are given in rad.
- euler(PHI, theta, phi): returns a 3x3 rotation matrix of a euler rotation about the angles PHI, theta and phi which are given in rad.
- load(filename): returns a NxM matrix of the data stored in the file filename. filename may be a absolute or relative path. A relative path is interprete relative to the location of the XML file with the load statement. (The abstract Eval class guarantees that the current path is at the XML file if load is called)

Implemented in MBXMLUtils::OctEval, MBXMLUtils::PyEval, and MBXMLUtils::XMLFlatEval.

## ◆ cast()

template<typename T >

T MBXMLUtils::Eval::cast | ( | const Value & | value | ) | const

Cast the value value to type `T`. Possible combinations of allowed value types and template types `T` are listed in the following table. If a combination is not allowed a exception is thrown.

| `value` is of Type ...
--- | ---
Template Type `T` equals ... | real scalar | real vector | real matrix | string | `Function`
`int` | only if its integral number |  |  |  |
`double` | X |  |  |  |
`vector<double>` | X | X |  |  |
`vector<vector<double> >` | X | X | X |  |
`string` |  |  |  | X |
`CodeString` | returns e.g. `5` | returns e.g. `[3;7]` | returns e.g. `[1,3;5,4]` | returns e.g. `'foo'` | returns e.g. `( 2 [...] {...} [...])`

## ◆ convertIndex()

virtual void MBXMLUtils::Eval::convertIndex | ( | Value & | v,
|  | bool | evalTo1Based
| ) |  |

pure virtual

convert a index (scalar or vector). if evalTo1Based == true: convert from the script language 0/1 base to 1 base. if evalTo1Based == false: convert from 1 base to the script language 0/1 base.

Implemented in MBXMLUtils::OctEval, MBXMLUtils::PyEval, and MBXMLUtils::XMLFlatEval.

## ◆ create()

template<class T >

Value MBXMLUtils::Eval::create | ( | const T & | v | ) | const

create a value of the given type. T can be one of: double: create a floating point value vector<double>: create a vector of floating point values vector<vector<double>>: create a matrix of floating point values string: create a string value

## ◆ eval() [1/3]

Value MBXMLUtils::Eval::eval | ( | const xercesc::DOMElement * | e | ) |

Evaluate the XML element e using the current parameters returning the resulting value. The type of evaluation depends on the type of e.

## ◆ eval() [2/3]

Eval::Value MBXMLUtils::Eval::eval | ( | const xercesc::DOMAttr * | a | ) |

Evaluate the XML attribute a using the current parameters returning the resulting value. The type of evaluation depends on the type of a. The result of a "partially" evaluation is returned as a string even so it is not really a string.

## ◆ eval() [3/3]

Value MBXMLUtils::Eval::eval | ( | const std::string & | str,
|  | const xercesc::DOMElement * | e = `nullptr`,
|  | bool | skipRet = `false`
| ) |  |

Evaluate str using the current parameters. if skipRet=true then str is not required to return anything, a empty Value will be returned in this case.

## ◆ stringToValue()

Eval::Value MBXMLUtils::Eval::stringToValue | ( | const std::string & | str,
|  | const xercesc::DOMElement * | e = `nullptr`,
|  | bool | fullEval = `true`
| ) |  | const

evaluate str and return result as an variable, this can be used to evaluate outside of XML. If e is given it is used as location information in case of errors. If fullEval is false the "partially" evaluation is returned as a string even so it is not really a string.

## ◆ valueIsOfType()

virtual bool MBXMLUtils::Eval::valueIsOfType | ( | const Value & | value,
|  | ValueType | type
| ) |  | const

pure virtual

check whether value is of type type. Note that true is only returned if the value is really of type type. If value can be casted to type type but is not of this type then false is returned. Note that their are evaluators (e.g. octave) which cannot distinguish between e.g. a scalar, a vector of size 1 or a matrix of size 1x1. Hence, these evaluators will return true for ScalarType in all these three cases and analog for VectorType.

Implemented in MBXMLUtils::OctEval, MBXMLUtils::PyEval, and MBXMLUtils::XMLFlatEval.

The documentation for this class was generated from the following files:

- /mbsim-env/openmbv/mbxmlutils/mbxmlutils/eval.h
- /mbsim-env/openmbv/mbxmlutils/mbxmlutils/eval.cc