All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines
Public Member Functions
QGpCoreTools::ExpressionContext Class Reference

Brief description of class still missing. More...

#include <ExpressionContext.h>

Inheritance diagram for QGpCoreTools::ExpressionContext:
DinverCore::ParamExpressionContext GeopsyCore::SignalExpressionContext QGpCoreWave::GeophysicalModel::GeophysicalContext

List of all members.

Public Member Functions

void addVariable (const QString &name, const QVariant &val)
void addVariable (const QString &name, const QString &index, const QVariant &val)
int addVariable (const QString &name, ExpressionStorage *var)
 ExpressionContext (ExpressionContext *parent=0)
virtual QStringList functions () const
virtual QVariant functionValue (const QString &name, const QVector< ExpressionAction * > &args) const
virtual bool isValidFunction (const QString &name) const
bool isValidVariable (const QString &name) const
ExpressionStoragevariable (int varIndex) const
QStringList variables () const
QVariant variableValue (const QString &name, const QString &index=QString::null) const
virtual ~ExpressionContext ()

Detailed Description

Brief description of class still missing.

Full description of class still missing


Constructor & Destructor Documentation

{_parent=parent;}

Description of destructor still missing

References TRACE.

{
  TRACE;
  _varNames.clear();
  qDeleteAll(_varValues);
  _varValues.clear();
}

Member Function Documentation

void QGpCoreTools::ExpressionContext::addVariable ( const QString &  name,
const QVariant &  val 
) [inline]
void QGpCoreTools::ExpressionContext::addVariable ( const QString &  name,
const QString &  index,
const QVariant &  val 
)

References TRACE, and variable().

{
  TRACE;
  QMap<QString, int>::iterator it;
  it=_varNames.find (name);
  if(it!=_varNames.end()) {
    variable(it.value())->setValue(index, val);
  } else {
    int varIndex=_varValues.count();
    _varNames.insert(name, varIndex);
    _varValues.append(new ExpressionVariableStorage);
    _varValues[varIndex]->setValue(index, val);
  }
}
int QGpCoreTools::ExpressionContext::addVariable ( const QString &  name,
ExpressionStorage var 
)

Add a new variable if variable named name does not exist. In all cases, it returns the index of the variable

References TRACE.

{
  TRACE;
  int index;
  QMap<QString, int>::iterator it;
  it=_varNames.find (name);
  if(it==_varNames.end()) {
    index=_varValues.count();
    _varNames.insert(name, index);
    _varValues.append(var);
  } else {
    index=it.value();
    delete var;
  }
  return index;
}
QStringList QGpCoreTools::ExpressionContext::functions ( ) const [virtual]

Reimplemented in DinverCore::ParamExpressionContext.

References TRACE.

Referenced by QGpGuiTools::ExpressionEditor::setContext().

{
  TRACE;
  QStringList l;
  l << "if( <condition>, <true>, <false> )"
    << "justify( <string>, <nChars>, <fillChar> )"
    << "left( <string>, <nChars> )"
    << "length( <string> )"
    << "mid( <string>, <pos>, <length> )"
    << "right( <string>, <nChars> )"
    << "sqrt( <value> )"
    << "pow( <base>, <exp> )"
    << "log10( <value> )"
    << "cos( <value> )"
    << "sin( <value> )"
    << "tan( <value> )";
  return l;
}
QVariant QGpCoreTools::ExpressionContext::functionValue ( const QString &  name,
const QVector< ExpressionAction * > &  args 
) const [virtual]

Reimplemented in DinverCore::ParamExpressionContext.

References QGpCoreTools::cos(), QGpCoreTools::sin(), QGpCoreTools::sqrt(), QGpCoreTools::tan(), and TRACE.

{
  TRACE;
  switch(name[0].unicode()) {
  case 'c':
    if(name=="cos") {
      if(args.count()==1) {
        return ::cos(args.at(0)->value().toDouble());
      }
    }
    break;
  case 'i':
    if(name=="if") {
      if(args.count()==3) {
        if(args.at(0)->value().toBool()) {
          return args.at(1)->value();
        } else {
          return args.at(2)->value();
        }
      } else if(args.count()==2) {
        if(args.at(0)->value().toBool()) {
          return args.at(1)->value();
        }
      }
    }
    break;
  case 'j':
    if(name=="justify") {
      if(args.count()==3) {
        QString s=args.at(2)->value().toString();
        QChar c;
        if(s.isEmpty()) c=' '; else c=s[0];
        return args.at(0)->value().toString().rightJustified(args.at(1)->value().toInt(),c);
      }
    }
    break;
  case 'l':
    if(name=="left") {
      if(args.count()==2) {
        return args.at(0)->value().toString().left(args.at(1)->value().toInt());
      }
    } else if(name=="length") {
      if(args.count()==1) {
        return args.at(0)->value().toString().length();
      }
    } else if(name=="log10") {
      if(args.count()==1) {
        return log10(args.at(0)->value().toDouble());
      }
    }
    break;
  case 'm':
    if(name=="mid") {
      if(args.count()==3) {
        return args.at(0)->value().toString().mid(args.at(1)->value().toInt(),
                                                  args.at(2)->value().toInt());
      }
    }
    break;
  case 'p':
    if(name=="pow") {
      if(args.count()==2) {
        return pow(args.at(0)->value().toDouble(),
                    args.at(1)->value().toDouble());
      }
    }
    break;
  case 'r':
    if(name=="right") {
      if(args.count()==2) {
        return args.at(0)->value().toString().right(args.at(1)->value().toInt());
      }
    }
    break;
  case 's':
    if(name=="sqrt") {
      if(args.count()==1) {
        return ::sqrt(args.at(0)->value().toDouble());
      }
    }
    else if(name=="sin") {
      if(args.count()==1) {
        return ::sin(args.at(0)->value().toDouble());
      }
    }
    break;
  case 't':
    if(name=="tan") {
      if(args.count()==1) {
        return ::tan(args.at(0)->value().toDouble());
      }
    }
    break;
  default:
    break;
  }
  return QVariant();
}
bool QGpCoreTools::ExpressionContext::isValidFunction ( const QString &  name) const [virtual]

Reimplemented in DinverCore::ParamExpressionContext.

References TRACE.

{
  TRACE;
  switch(name[0].unicode()) {
  case 'c':
    if(name=="cos") return true;
    break;
  case 'i':
    if(name=="if") return true;
    break;
  case 'j':
    if(name=="justify") return true;
    break;
  case 'l':
    if(name=="left") return true;
    else if(name=="length") return true;
    else if(name=="log10") return true;
    break;
  case 'm':
    if(name=="mid") return true;
    break;
  case 'p':
    if(name=="pow") return true;
    break;
  case 'r':
    if(name=="right") return true;
    break;
  case 's':
    if(name=="sqrt") return true;
    else if(name=="sin") return true;
    break;
  case 't':
    if(name=="tan") return true;
    break;
  default:
    break;
  }
  return false;
}
bool QGpCoreTools::ExpressionContext::isValidVariable ( const QString &  name) const

References isValidVariable(), and TRACE.

Referenced by isValidVariable().

{
  TRACE;
  bool c=_varNames.contains(name);
  if(!c && _parent) return _parent->isValidVariable(name);
  else return c;
}

Referenced by QGpGuiTools::ExpressionEditor::setContext().

{
  QStringList v;
  for(QMap<QString, int>::const_iterator it=_varNames.begin();it!=_varNames.end();it++) {
    v.append(it.key());
  }
  return v;
}
QVariant QGpCoreTools::ExpressionContext::variableValue ( const QString &  name,
const QString &  index = QString::null 
) const

References TRACE, and variableValue().

Referenced by QGpCoreTools::ExpressionString::value(), and variableValue().

{
  TRACE;
  QMap<QString, int>::const_iterator it;
  it=_varNames.find (name);
  if(it!=_varNames.end()) {
    return _varValues[it.value()]->value(index);
  } else if(_parent) {
    return _parent->variableValue(name, index);
  } else {
    return QVariant();
  }
}

The documentation for this class was generated from the following files:
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines