00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #include "vCore.h"
00029 #include "vebMathExpr.h"
00030
00031 #include "mathexpr.h"
00032
00033 namespace vValue {
00034 namespace Expr {
00035 namespace Bindings {
00036
00038 MathExpr::MathExpr(tString const &expr) : m_operation(new ROperation(expr.c_str())), m_vararray(0), m_funcarray(0), m_varsSize(0), m_functionsSize(0) {}
00039
00043 MathExpr::MathExpr(tString const &expr, varmap_t const &vars, funcmap_t const &functions) {
00044
00045 m_vararray = new RVar*[vars.size()];
00046 unsigned int i = 0;
00047 for(varmap_t::const_iterator iter = vars.begin(); iter != vars.end(); ++iter, ++i) {
00048 m_vararray[i] = new RVar(iter->first.c_str(), iter->second);
00049 }
00050 m_funcarray = new RFunction*[functions.size()];
00051 unsigned int j = 0;
00052 m_varsSize = vars.size();
00053 m_functionsSize = functions.size();
00054 for(funcmap_t::const_iterator iter = functions.begin(); iter != functions.end(); ++iter, ++j) {
00055 m_funcarray[j] = new RFunction(iter->second);
00056 m_funcarray[j]->SetName(iter->first.c_str());
00057 }
00058 m_operation = boost::shared_ptr<ROperation>(new ROperation(expr.c_str(), vars.size(), m_vararray, functions.size(), m_funcarray));
00059 }
00060
00061 MathExpr::~MathExpr() {
00062 if(m_vararray != 0) {
00063 for(int i = 0; i < m_varsSize; i++) {
00064 delete m_vararray[i];
00065 }
00066 delete[] m_vararray;
00067 }
00068 if(m_funcarray != 0) {
00069 for(int i = 0; i < m_functionsSize; i++) {
00070 delete m_funcarray[i];
00071 }
00072 delete[] m_funcarray;
00073 }
00074 }
00075
00076 Base *MathExpr::copy(void) const {
00077 return new MathExpr(*this);
00078 }
00079
00080 Variant MathExpr::GetValue() const {
00081 return m_operation->Val();
00082 }
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099 }
00100 }
00101 }