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
00029
00030
00031
00032
00033 #ifndef MUPARSER_SCRIPT_H
00034 #define MUPARSER_SCRIPT_H
00035
00036 #include "ScriptingEnv.h"
00037 #include "Script.h"
00038
00039 #include <muParser.h>
00040 #include "math.h"
00041 #include <gsl/gsl_sf.h>
00042 #include <q3asciidict.h>
00043
00045 class muParserScript: public Script
00046 {
00047 Q_OBJECT
00048
00049 public:
00050 muParserScript(ScriptingEnv *env, const QString &code, QObject *context=0, const QString &name="<input>");
00051
00052 public slots:
00053 bool compile(bool asFunction=true);
00054 QVariant eval();
00055 bool exec();
00056 bool setQObject(QObject *val, const char *name);
00057 bool setInt(int val, const char* name);
00058 bool setDouble(double val, const char* name);
00059
00060 private:
00061 double col(const QString &arg);
00062 double cell(int row, int col);
00063 double tableCell(int col, int row);
00064 double *addVariable(const char *name);
00065 double *addVariableR(const char *name);
00066 static double *mu_addVariableR(const char *name) { return current->addVariableR(name); }
00067 static double mu_col(const char *arg) { return current->col(arg); }
00068 static double mu_cell(double row, double col) { return current->cell(qRound(row), qRound(col)); }
00069 static double mu_tableCell(double col, double row) { return current->tableCell(qRound(col), qRound(row)); }
00070 static double *mu_addVariable(const char *name, void *){ return current->addVariable(name); }
00071 static double *mu_addVariableR(const char *name, void *) { return current->addVariableR(name); }
00072 static QString compileColArg(const QString& in);
00073
00074 mu::Parser parser, rparser;
00075 Q3AsciiDict<double> variables, rvariables;
00076 QStringList muCode;
00077
00078 public:
00079 static muParserScript *current;
00080 };
00081
00082 #endif