#include <ExpressionAction.h>
Public Types | |
| enum | Type { NoOperator, Assign, Sum, SumAssign, Subtract, SubtractAssign, Mult, MultAssign, FloatDiv, FloatDivAssign, IntMod, IntDiv, Coma, OpenBracket, CloseBracket, EndAction, Function, Equal, NotEqual, GreaterThan, GreaterOrEqual, LessThan, LessOrEqual, OpenSquareBracket, CloseSquareBracket, VariableArray } |
Public Member Functions | |
| bool | addAction (ExpressionAction *a) |
| virtual bool | addArgument (ExpressionAction *a)=0 |
| virtual ExpressionAction * | close (ExpressionAction::Type t) |
| ExpressionAction () | |
| virtual bool | isReadOnly () const |
| virtual ExpressionAction * | parent () const |
| virtual int | priority () const |
| virtual void | replaceArgument (ExpressionAction *oldA, ExpressionAction *newA)=0 |
| void | setParent (ExpressionAction *p) |
| virtual void | setValue (const QVariant &) |
| ExpressionAction * | superParent () |
| virtual QVariant | value () const =0 |
| virtual const QString & | xml_tagName () const |
| virtual | ~ExpressionAction () |
Static Public Attributes | |
| static const QString | xmlExpressionActionTag = "ExpressionAction" |
Static Protected Member Functions | |
| static int | compare (const QVariant &op1, const QVariant &op2, bool &ok) |
| static QVariant | floatDiv (const QVariant &op1, const QVariant &op2) |
| static QVariant | mult (const QVariant &op1, const QVariant &op2) |
| static QVariant | subtract (const QVariant &op1, const QVariant &op2) |
| static QVariant | sum (const QVariant &op1, const QVariant &op2) |
Protected Attributes | |
| ExpressionAction * | _parent |
{NoOperator, Assign, Sum, SumAssign, Subtract, SubtractAssign, Mult, MultAssign, FloatDiv,
FloatDivAssign, IntMod, IntDiv, Coma, OpenBracket, CloseBracket, EndAction, Function, Equal,
NotEqual, GreaterThan, GreaterOrEqual, LessThan, LessOrEqual, OpenSquareBracket, CloseSquareBracket,
VariableArray};
| QGpCoreTools::ExpressionAction::ExpressionAction | ( | ) | [inline] |
{_parent=0;}
| virtual QGpCoreTools::ExpressionAction::~ExpressionAction | ( | ) | [inline, virtual] |
{}
References addAction(), addArgument(), parent(), priority(), and TRACE.
Referenced by addAction().
| virtual bool QGpCoreTools::ExpressionAction::addArgument | ( | ExpressionAction * | a | ) | [pure virtual] |
Implemented in QGpCoreTools::ExpressionFunction, QGpCoreTools::ExpressionOperator, QGpCoreTools::ExpressionBracket, QGpCoreTools::ExpressionValue, and QGpCoreTools::ExpressionVariable.
Referenced by addAction(), QGpCoreTools::ExpressionVariable::addArgument(), QGpCoreTools::ExpressionBracket::addArgument(), QGpCoreTools::ExpressionOperator::addArgument(), and QGpCoreTools::ExpressionFunction::addArgument().
| ExpressionAction * QGpCoreTools::ExpressionAction::close | ( | ExpressionAction::Type | t | ) | [virtual] |
Reimplemented in QGpCoreTools::ExpressionFunction, QGpCoreTools::ExpressionBracket, and QGpCoreTools::ExpressionVariable.
References _parent, close(), and TRACE.
Referenced by close().
| int QGpCoreTools::ExpressionAction::compare | ( | const QVariant & | op1, |
| const QVariant & | op2, | ||
| bool & | ok | ||
| ) | [static, protected] |
Compares two variants
References TRACE.
Referenced by QGpCoreTools::ExpressionOperator::value().
{
TRACE;
ok=true;
switch (op1.type()) {
case QVariant::Double:
case QVariant::Int:
switch (op2.type()) {
case QVariant::Double:
case QVariant::Int: {
double op1d=op1.toDouble();
double op2d=op2.toDouble();
if(op1d<op2d) return -1;
else if(op1d>op2d) return 1;
else return 0;
}
case QVariant::String: {
QString op1s=op1.toString();
QString op2s=op2.toString();
if(op1s<op2s) return -1;
else if(op1s>op2s) return 1;
else return 0;
}
default:
ok=false;
return 0;
}
case QVariant::String:
switch (op2.type()) {
case QVariant::String:
case QVariant::Double:
case QVariant::Int: {
QString op1s=op1.toString();
QString op2s=op2.toString();
if(op1s<op2s) return -1;
else if(op1s>op2s) return 1;
else return 0;
}
default:
ok=false;
return 0;
}
default:
ok=false;
return 0;
}
}
| QVariant QGpCoreTools::ExpressionAction::floatDiv | ( | const QVariant & | op1, |
| const QVariant & | op2 | ||
| ) | [static, protected] |
Calculate the division of two variants
References QGpCoreTools::endl(), QGpCoreTools::App::stream(), QGpCoreTools::tr(), and TRACE.
Referenced by QGpCoreTools::ExpressionOperator::value().
{
TRACE;
double val;
bool ok;
switch (op1.type()) {
case QVariant::Double:
switch (op2.type()) {
case QVariant::Double:
case QVariant::Int:
return op1.toDouble()/op2.toDouble();
case QVariant::String:
val=op2.toString().toDouble(&ok);
if(ok)
return op1.toDouble()/val;
else
return QVariant();
default:
return QVariant();
}
case QVariant::Int:
switch (op2.type()) {
case QVariant::Double:
return op1.toDouble()/op2.toDouble();
case QVariant::Int: {
int v2=op2.toInt();
if(v2!=0) {
return op1.toInt()/v2;
} else {
App::stream() << tr("Division by zero") << endl;
return QVariant();
}
}
case QVariant::String:
val=op2.toString().toDouble(&ok);
if(ok)
return op1.toDouble()/val;
else {
App::stream() << tr("Division by zero") << endl;
return QVariant();
}
default:
App::stream() << tr("Division by zero") << endl;
return QVariant();
}
case QVariant::String:
val=op1.toString().toDouble(&ok);
if(ok) {
double val2=op2.toString().toDouble(&ok);
if(ok)
return val/val2;
else {
App::stream() << tr("Division by zero") << endl;
return QVariant();
}
} else {
return 0.0;
}
default:
return QVariant();
}
}
| virtual bool QGpCoreTools::ExpressionAction::isReadOnly | ( | ) | const [inline, virtual] |
Reimplemented in QGpCoreTools::ExpressionBracket, and QGpCoreTools::ExpressionVariable.
Referenced by QGpCoreTools::ExpressionOperator::value().
{return true;}
| QVariant QGpCoreTools::ExpressionAction::mult | ( | const QVariant & | op1, |
| const QVariant & | op2 | ||
| ) | [static, protected] |
Calculate the multiplication of two variants
References TRACE.
Referenced by QGpCoreTools::ExpressionOperator::value().
{
TRACE;
double val;
bool ok;
switch (op1.type()) {
case QVariant::Double:
switch (op2.type()) {
case QVariant::Double:
case QVariant::Int:
return op1.toDouble()*op2.toDouble();
case QVariant::String:
val=op2.toString().toDouble(&ok);
if(ok)
return op1.toDouble()*val;
else
return 0.0;
default:
return QVariant();
}
case QVariant::Int:
switch (op2.type()) {
case QVariant::Double:
return op1.toDouble()*op2.toDouble();
case QVariant::Int:
return op1.toInt()*op2.toInt();
case QVariant::String:
val=op2.toString().toDouble(&ok);
if(ok)
return op1.toDouble()*val;
else
return 0.0;
default:
return QVariant();
}
case QVariant::String:
val=op1.toString().toDouble(&ok);
if(ok) {
double val2=op2.toString().toDouble(&ok);
if(ok)
return val*val2;
else
return 0.0;
} else {
return 0.0;
}
default:
return QVariant();
}
}
| virtual ExpressionAction* QGpCoreTools::ExpressionAction::parent | ( | ) | const [inline, virtual] |
Reimplemented in QGpCoreTools::ExpressionFunction, QGpCoreTools::ExpressionBracket, and QGpCoreTools::ExpressionVariable.
Referenced by addAction(), and QGpCoreTools::ExpressionOperator::addArgument().
{return _parent;}
| virtual int QGpCoreTools::ExpressionAction::priority | ( | ) | const [inline, virtual] |
Reimplemented in QGpCoreTools::ExpressionOperator.
Referenced by addAction(), and QGpCoreTools::ExpressionOperator::addArgument().
{return 4;}
| virtual void QGpCoreTools::ExpressionAction::replaceArgument | ( | ExpressionAction * | oldA, |
| ExpressionAction * | newA | ||
| ) | [pure virtual] |
| void QGpCoreTools::ExpressionAction::setParent | ( | ExpressionAction * | p | ) | [inline] |
Referenced by QGpCoreTools::ExpressionVariable::addArgument(), QGpCoreTools::ExpressionBracket::addArgument(), QGpCoreTools::ExpressionOperator::addArgument(), QGpCoreTools::ExpressionFunction::addArgument(), QGpCoreTools::ExpressionVariable::replaceArgument(), QGpCoreTools::ExpressionBracket::replaceArgument(), QGpCoreTools::ExpressionOperator::replaceArgument(), and QGpCoreTools::ExpressionFunction::replaceArgument().
{_parent=p;}
| virtual void QGpCoreTools::ExpressionAction::setValue | ( | const QVariant & | ) | [inline, virtual] |
Reimplemented in QGpCoreTools::ExpressionVariable.
Referenced by QGpCoreTools::ExpressionOperator::value().
{}
| QVariant QGpCoreTools::ExpressionAction::subtract | ( | const QVariant & | op1, |
| const QVariant & | op2 | ||
| ) | [static, protected] |
Calculate the subtraction of two variants
References TRACE.
Referenced by QGpCoreTools::ExpressionOperator::value().
{
TRACE;
double val;
bool ok;
switch (op1.type()) {
case QVariant::Double:
switch (op2.type()) {
case QVariant::Double:
case QVariant::Int:
return op1.toDouble()-op2.toDouble();
case QVariant::String:
val=op2.toString().toDouble(&ok);
if(ok)
return op1.toDouble()-val;
else
return op1;
default:
return op1;
}
case QVariant::Int:
switch (op2.type()) {
case QVariant::Double:
return op1.toDouble()-op2.toDouble();
case QVariant::Int:
return op1.toInt()-op2.toInt();
case QVariant::String:
val=op2.toString().toDouble(&ok);
if(ok)
return op1.toDouble()-val;
else
return op1;
default:
return op1;
}
case QVariant::String:
val=op1.toString().toDouble(&ok);
if(ok) {
double val2=op2.toString().toDouble(&ok);
if(ok)
return val-val2;
else
return val;
} else {
val=op2.toString().toDouble(&ok);
if(ok)
return -val;
else
return QVariant();
}
default:
switch (op2.type()) {
case QVariant::Double:
case QVariant::Int:
return -op2.toDouble();
default:
return QVariant();
}
}
}
| QVariant QGpCoreTools::ExpressionAction::sum | ( | const QVariant & | op1, |
| const QVariant & | op2 | ||
| ) | [static, protected] |
Calculate the sum of two variants: either the arithmetic sum or concatenation
References TRACE.
Referenced by QGpCoreTools::ExpressionOperator::value().
{
TRACE;
double val;
bool ok;
switch (op1.type()) {
case QVariant::Double:
switch (op2.type()) {
case QVariant::Double:
case QVariant::Int:
return op1.toDouble()+op2.toDouble();
case QVariant::String:
val=op2.toString().toDouble(&ok);
if(ok)
return op1.toDouble()+val;
else
return op1.toString()+op2.toString();
default:
return op1;
}
case QVariant::Int:
switch (op2.type()) {
case QVariant::Double:
return op1.toDouble()+op2.toDouble();
case QVariant::Int:
return op1.toInt()+op2.toInt();
case QVariant::String:
val=op2.toString().toDouble(&ok);
if(ok)
return op1.toDouble()+val;
else
return op1.toString()+op2.toString();
default:
return op1;
}
case QVariant::String:
switch (op2.type()) {
case QVariant::Double:
val=op1.toString().toDouble(&ok);
if(ok)
return val+op2.toDouble();
else
return op1.toString()+op2.toString();
case QVariant::Int:
val=op1.toString().toDouble(&ok);
if(ok)
return val+op2.toInt();
else
return op1.toString()+op2.toString();
case QVariant::String:
return op1.toString()+op2.toString();
default:
return op1;
}
default:
switch (op2.type()) {
case QVariant::Double:
case QVariant::Int:
case QVariant::String:
return op2;
default:
return QVariant();
}
}
}
References _parent, superParent(), and TRACE.
Referenced by superParent().
{
TRACE;
if(_parent) return _parent->superParent(); else return this;
}
| virtual QVariant QGpCoreTools::ExpressionAction::value | ( | ) | const [pure virtual] |
Implemented in QGpCoreTools::ExpressionFunction, QGpCoreTools::ExpressionOperator, QGpCoreTools::ExpressionBracket, QGpCoreTools::ExpressionValue, and QGpCoreTools::ExpressionVariable.
Referenced by QGpCoreTools::ExpressionVariable::setValue(), QGpCoreTools::ExpressionVariable::value(), and QGpCoreTools::ExpressionOperator::value().
| virtual const QString& QGpCoreTools::ExpressionAction::xml_tagName | ( | ) | const [inline, virtual] |
Implements QGpCoreTools::XMLClass.
Reimplemented in QGpCoreTools::ExpressionFunction, QGpCoreTools::ExpressionOperator, QGpCoreTools::ExpressionBracket, QGpCoreTools::ExpressionValue, and QGpCoreTools::ExpressionVariable.
{return xmlExpressionActionTag;}
ExpressionAction* QGpCoreTools::ExpressionAction::_parent [protected] |
const QString QGpCoreTools::ExpressionAction::xmlExpressionActionTag = "ExpressionAction" [static] |