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

#include <ParamSpaceScript.h>

Inheritance diagram for DinverCore::ParamExpressionContext:
QGpCoreTools::ExpressionContext

List of all members.

Public Member Functions

virtual QStringList functions () const
virtual QVariant functionValue (const QString &name, const QVector< ExpressionAction * > &args) const
virtual bool isValidFunction (const QString &name) const
 ParamExpressionContext (RealSpace *param)

Constructor & Destructor Documentation

{_param=param;}

Member Function Documentation

QStringList DinverCore::ParamExpressionContext::functions ( ) const [virtual]

Reimplemented from QGpCoreTools::ExpressionContext.

References TRACE.

{
  TRACE;
  QStringList l;
  l << "linear(<param1>, \">\" | \"<\", <a>, <param2>, <b>)"
    << "parameter(<name>, <unit>, <min>, <max>, <scale>, <prec>)";
  return l;
}
QVariant DinverCore::ParamExpressionContext::functionValue ( const QString &  name,
const QVector< ExpressionAction * > &  args 
) const [virtual]

Reimplemented from QGpCoreTools::ExpressionContext.

References DinverCore::RealSpace::addCondition(), DinverCore::RealSpace::addParameter(), QGpCoreTools::endl(), DinverCore::SimpleCondition::GreaterThan, DinverCore::SimpleCondition::LessThan, DinverCore::ParameterGrid::Linear, DinverCore::ParameterGrid::Log, DinverCore::RealSpace::parameter(), scaleType, DinverCore::RealSpace::setVariableParameters(), QGpCoreTools::tr(), and TRACE.

{
  TRACE;
  switch(name[0].unicode()) {
  case 0x006C:  // 'l'
    if(name=="linear") {
      if(args.count()==5) {
        Parameter * x1Param=_param->parameter(args.at(0)->value().toString());
        if(!x1Param) {
          App::stream() << tr("error: parameter %1 not found").arg(args.at(0)->value().toString()) << endl;
          return QVariant();
        }
        Parameter * x2Param=_param->parameter(args.at(3)->value().toString());
        if(!x2Param) {
          App::stream() << tr("error: parameter %1 not found").arg(args.at(3)->value().toString()) << endl;
          return QVariant();
        }
        if(args.at(1)->value().toString() ==">") {
          _param->addCondition(new SimpleCondition(x1Param, SimpleCondition::GreaterThan,
                                args.at(2)->value().toDouble(), x2Param, args.at(4)->value().toDouble()) );
        } else {
          _param->addCondition(new SimpleCondition(x1Param, SimpleCondition::LessThan,
                                args.at(2)->value().toDouble(), x2Param, args.at(4)->value().toDouble()) );
        }
      } else {
        App::stream() << tr("error: function 'linear' requires 5 arguments: param1, \"<\" or \">\", a, param2, b") << endl;
      }
    }
    break;
  case 0x0070:  // 'p'
    if(name=="parameter") {
      if(args.count()==6) {
        ParameterGrid::Scale s;
        QString scaleType=args.at(4)->value().toString().toLower();
        if(scaleType=="log") {
          s=ParameterGrid::Log;
        } else if(scaleType=="linear"){
          s=ParameterGrid::Linear;
        } else {
          App::stream() << tr("error: bad parameter scale type %1, \"log\" or \"linear\" expected.").arg(scaleType) << endl;
          return QVariant();
        }
        if(_param->addParameter(args.at(0)->value().toString(), args.at(1)->value().toString(),
                                args.at(2)->value().toDouble(), args.at(3)->value().toDouble(),
                                s, args.at(5)->value().toDouble())) {
          _param->setVariableParameters();
        } else {
          App::stream() << tr("error: cannot add parameter %1").arg(args.at(0)->value().toString()) << endl;
        }
      } else {
        App::stream() << tr("error: function 'parameter' requires 6 arguments: name, unit, min, max, scale, prec") << endl;
      }
    }
    break;
  default:
    break;
  }
  return QVariant();
}
bool DinverCore::ParamExpressionContext::isValidFunction ( const QString &  name) const [virtual]

Reimplemented from QGpCoreTools::ExpressionContext.

References TRACE.

{
  TRACE;
  switch(name[0].unicode()) {
  case 0x006C:  // 'l'
    if(name=="linear") return true;
    break;
  case 0x0070:  // 'p'
    if(name=="parameter") return true;
    break;
  default:
    break;
  }
  return false;
}

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