25 typedef double Tfloat;
27 enum Evaltype {valtypeNONE, valtypeINT, valtypeFLOAT};
28 typedef enum Evaltype Tvaltype;
29 enum Etraversetype { traversetypePREFIX, traversetypeINFIX, traversetypePOSTFIX };
30 typedef enum Etraversetype Ttraversetype;
44 Value() : _type(valtypeNONE) { _value.valInt=0; }
51 : _type(
type), _value(value) {}
57 Value(
int valInt) { _type=valtypeINT; _value.valInt=Tint(valInt); }
58 Value(
long valInt) { _type=valtypeINT; _value.valInt=Tint(valInt); }
64 Value(
float valFloat) { _type=valtypeFLOAT; _value.valFloat=Tfloat(valFloat); }
65 Value(
double valFloat) { _type=valtypeFLOAT; _value.valFloat=Tfloat(valFloat); }
72 Tvaltype
getType()
const {
return _type; }
96 case valtypeFLOAT:
return _value.valFloat;
97 case valtypeINT:
return Tfloat(_value.valInt);
110 case valtypeINT:
return _value.valInt;
111 case valtypeFLOAT:
return Tint(_value.valFloat);
120 void write(std::ostream& ostrm=std::cout)
const
129 std::ostringstream oss;
133 bool operator==(
Value const& v)
const;
134 bool operator>(
Value const& v)
const;
135 bool operator>=(
Value const& v)
const;
136 bool operator<(
Value const& v)
const;
137 bool operator<=(
Value const& v)
const;
162 const std::string getName()
const {
return _name; }
163 void addVariable(
const Variable* var) { _variables.insert(var); }
164 bool removeVariable(
const Variable* var)
165 {
if(_variables.count(var)) { _variables.erase(var);
return true; }
else return false; }
166 unsigned int countVariables()
const {
return _variables.size(); }
167 operator unsigned int()
const {
return countVariables(); }
170 std::set<const Variable*> _variables;
180 : _name(
name), _value(
Value()), _vargrp(grp) {
if(_vargrp) _vargrp->addVariable(
this); }
182 : _name(
name), _value(val), _vargrp(grp) {
if(_vargrp) _vargrp->addVariable(
this); }
183 ~
~Variable() {
if(_vargrp) _vargrp->removeVariable(
this); }
196 return _vargrp->getName()+
":"+_name;
200 Tvaltype getType()
const {
return _value.
getType(); }
201 Value getValue()
const {
return _value; }
202 Tfloat getValueFloat()
const {
return _value.
getValueFloat(); }
203 operator Tfloat()
const {
return getValueFloat(); }
204 Tint getValueInt()
const {
return _value.
getValueInt(); }
205 operator Tint()
const {
return getValueInt(); }
206 bool isInt()
const {
return _value.
isInt(); }
207 bool isFloat()
const {
return _value.
isFloat(); }
208 const VariableGroup* getVariableGroup()
const {
return _vargrp; }
214 void write(std::ostream& ostrm=std::cout,
bool prtval=
false)
const
226 std::ostringstream oss;
234 VariableGroup* _vargrp;
244 const std::set<const VariableGroup*> getVariableGroupNames()
const
246 std::set<const VariableGroup*> vargroups;
247 for (std::map<std::string,VariableGroup>::const_iterator it=_vargroups.begin(); it!=_vargroups.end(); ++it)
248 vargroups.insert(&it->second);
251 unsigned int VariableGroupsCount()
const {
return _vargroups.size(); }
252 bool existVariableGroup(
const std::string&
name)
const {
return _vargroups.count(
name)>0; }
254 {
if(existVariableGroup(
name))
return &(_vargroups.find(
name)->second);
else return NULL; }
255 unsigned int VariableGroupVariablesCount(
const std::string&
name)
const
257 if(existVariableGroup(
name))
259 return (_vargroups.find(
name)->second).countVariables();
264 unsigned int VariablesCount()
const {
return _variables.size(); }
266 std::set<Variable*> getVariables()
268 std::set<Variable*> variables;
269 for(std::map<std::string,Variable>::iterator it=_variables.begin(); it!=_variables.end(); ++it)
270 variables.insert(&it->second);
275 if(existVariable(
name))
276 return &_variables[
name];
291 var=addVariable(
name);
298 {
return setVariable(
std::string(vgrpname+
":"+varname),val); }
303 std::map<std::string,Variable> _variables;
304 std::map<std::string,VariableGroup> _vargroups;
314 Node(
Node* child1=NULL,
Node* child2=NULL,
Node* parent=NULL,
short priority=0)
315 : _parent(parent), _priority(priority)
322 if(_children[0])
delete(_children[0]);
323 if(_children[1])
delete(_children[1]);
325 void setChild1(
Node* child1) { _children[0]=child1; }
326 Node* getChild1()
const {
return _children[0]; }
327 void setChild2(
Node* child2) { _children[1]=child2; }
328 Node* getChild2()
const {
return _children[1]; }
329 void setParent(
Node* parent) { _parent=parent; }
330 Node* getParent()
const {
return _parent; }
331 virtual Tvaltype valueType()
const =0;
332 bool isInt()
const {
return valueType()==valtypeINT; };
333 bool isFloat()
const {
return valueType()==valtypeFLOAT; };
334 virtual Value evaluate()
const =0;
335 virtual Tfloat evaluateFloat()
const {
return Tfloat(evaluate()); }
336 virtual Tint evaluateInt()
const {
return Tint(evaluate()); }
337 virtual void write(std::ostream& ostrm)
const =0;
340 std::ostringstream oss;
344 void write()
const { write(std::cout); }
345 void traverse(std::list<const Node*>& nodelist,
enum Etraversetype traversetype=traversetypePOSTFIX)
const;
346 void writeSubExpr(std::ostream& ostrm=std::cout,
enum Etraversetype traversetype=traversetypePOSTFIX,
char sep=
' ')
const;
361 Tvaltype valueType()
const {
return _value.
getType(); }
362 Value evaluate()
const {
return _value; }
363 Tfloat evaluateFloat()
const {
return _value.
getValueFloat(); }
364 Tint evaluateInt()
const {
return _value.
getValueInt(); }
365 void write(std::ostream& ostrm)
const { _value.
write(ostrm); }
376 Tvaltype valueType()
const {
if(_var)
return _var->getType();
else return valtypeNONE; }
377 Value evaluate()
const {
if(_var)
return _var->getValue();
else return Value(); }
378 Tfloat evaluateFloat()
const {
if(_var)
return _var->getValueFloat();
else return 0.; }
379 Tint evaluateInt()
const {
if(_var)
return _var->getValueInt();
else return 0; }
380 void write(std::ostream& ostrm)
const {
if(_var) _var->write(ostrm);
else ostrm <<
"undefVar"; }
391 char op()
const {
return _operator; }
392 Tvaltype valueType()
const
394 if(_children[0] && _children[1])
396 if(_children[0]->isInt()&&_children[1]->isInt())
404 Value evaluate()
const;
405 void write(std::ostream& ostrm)
const { ostrm << _operator; }
415 enum Efunctype {functypeNONE=0
440 , functypeMarkerVarSet
441 , functypeMarkerVarSet1Arg
443 , functypeMarkerVarSet2Arg
451 :
Node(child0,child1,parent,0), _functype(func) {}
455 Tvaltype valueType()
const;
456 Value evaluate()
const;
457 void write(std::ostream& ostrm)
const;
460 enum Efunctype _functype;
475 :
NodeFunction(func,child1,child0,parent), _variableset(variableset) {}
477 Tvaltype valueType()
const;
478 Value evaluate()
const;
479 void write(std::ostream& ostrm)
const;
489 : _rootnode(NULL), _label(label), _variableset(varset), _variablesetcreated(false)
494 _variablesetcreated=
true;
501 if(_variablesetcreated)
delete _variableset;
504 void clear() {
if(_rootnode) {
delete(_rootnode); _rootnode=NULL; } }
505 void setLabel(
const std::string& label) { _label=label; }
506 const std::string& getLabel()
const {
return _label; }
508 void initializeRPN(
const std::string& exprstr,
bool genlabel=
true);
513 _variableset=rhs._variableset;
514 _variablesetcreated=
false;
515 std::ostringstream oss;
516 rhs.writeExpr(oss,traversetypePOSTFIX);
518 initializeRPN(oss.str());
522 bool isEmpty()
const {
return _rootnode==NULL; }
523 bool isInt()
const {
if(_rootnode)
return _rootnode->isInt();
else return false; }
524 bool isFloat()
const {
if(_rootnode)
return _rootnode->isFloat();
else return false; }
525 Tfloat evaluateFloat()
const
528 return _rootnode->evaluateFloat();
532 Tint evaluateInt()
const
535 return _rootnode->evaluateInt();
540 VariableSet* getVariableSet() {
return _variableset; }
542 unsigned int VariablesCount()
const {
return _variableset->VariablesCount(); }
543 bool existVariable(
const std::string&
name)
const {
return _variableset->existVariable(
name); }
544 unsigned int VariableGroupsCount()
const {
return _variableset->VariableGroupsCount(); }
545 bool existVariableGroup(
const std::string&
name)
const {
return _variableset->existVariableGroup(
name); }
547 void writeExpr(std::ostream& ostrm=std::cout,
enum Etraversetype traversetype=traversetypePOSTFIX,
char sep=
' ')
const
549 if(_rootnode) _rootnode->writeSubExpr(ostrm,traversetype,sep);
553 std::ostringstream oss;
554 writeExpr(oss,traversetypeINFIX,0);
566 VariableSet* _variableset;
567 bool _variablesetcreated;
572inline std::ostream& operator << (std::ostream& ostrm,
const Expression::Value& v)
584inline std::ostream& operator << (std::ostream& ostrm,
const Expression::Node& n)
590inline std::ostream& operator << (std::ostream& ostrm,
const Expression& e)
592 e.writeExpr(ostrm,Expression::traversetypeINFIX,0);
Definition: Expression.h:357
Definition: Expression.h:469
Definition: Expression.h:413
Definition: Expression.h:388
Definition: Expression.h:373
Definition: Expression.h:312
Definition: Expression.h:34
Value()
Constructor.
Definition: Expression.h:44
Value(enum Evaltype type, Tvalue value)
Constructor.
Definition: Expression.h:50
bool isFloat() const
is the value an floating point value?
Definition: Expression.h:87
void write(std::ostream &ostrm=std::cout) const
write value to stream
Definition: Expression.h:120
Tvaltype getType() const
get value type
Definition: Expression.h:72
bool isInt() const
is the value an integer value?
Definition: Expression.h:82
Value(float valFloat)
Constructor.
Definition: Expression.h:64
Tint getValueInt() const
get value as integer number
Definition: Expression.h:106
Tvalue getValue() const
get value
Definition: Expression.h:77
Value(int valInt)
Constructor.
Definition: Expression.h:57
Tfloat getValueFloat() const
get value as floating point number
Definition: Expression.h:92
Definition: Expression.h:158
Definition: Expression.h:240
Definition: Expression.h:176
const std::string getfullName() const
full variable name
Definition: Expression.h:193
void setValue(T val)
set value
Definition: Expression.h:213
const std::string getName() const
variable name
Definition: Expression.h:188
Definition: Expression.h:22
Enumeration class corresponding to the type schema type.
Definition: vtk-unstructured.h:1746
::xsd::cxx::tree::name< char, token > name
C++ type corresponding to the Name XML Schema built-in type.
Definition: vtk-punstructured.h:288
::xsd::cxx::tree::string< char, simple_type > string
C++ type corresponding to the string XML Schema built-in type.
Definition: vtk-punstructured.h:270
Definition: Expression.h:37