diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/context.cc | 10 | ||||
-rw-r--r-- | src/context.h | 3 | ||||
-rw-r--r-- | src/mainwin.cc | 2 | ||||
-rw-r--r-- | src/value.cc | 11 |
4 files changed, 23 insertions, 3 deletions
diff --git a/src/context.cc b/src/context.cc index 4bc6ed5..65d5e23 100644 --- a/src/context.cc +++ b/src/context.cc @@ -84,6 +84,8 @@ Value Context::lookup_variable(QString name, bool silent) const } return Value(); } + if (!parent && constants.contains(name)) + return constants[name]; if (variables.contains(name)) return variables[name]; if (parent) @@ -93,6 +95,14 @@ Value Context::lookup_variable(QString name, bool silent) const return Value(); } +void Context::set_constant(QString name, Value value) +{ + if (constants.contains(name)) + PRINTA("WARNING: Attempt to modify constant '%1'.",name); + else + constants.insert(name,value); +} + Value Context::evaluate_function(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues) const { if (functions_p && functions_p->contains(name)) diff --git a/src/context.h b/src/context.h index d5be745..cbb1c4f 100644 --- a/src/context.h +++ b/src/context.h @@ -9,6 +9,7 @@ class Context { public: const Context *parent; + QHash<QString, Value> constants; QHash<QString, Value> variables; QHash<QString, Value> config_variables; const QHash<QString, class AbstractFunction*> *functions_p; @@ -27,6 +28,8 @@ public: void set_variable(QString name, Value value); Value lookup_variable(QString name, bool silent = false) const; + void set_constant(QString name, Value value); + QString get_absolute_path(const QString &filename) const; Value evaluate_function(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues) const; diff --git a/src/mainwin.cc b/src/mainwin.cc index 3963170..e7014fa 100644 --- a/src/mainwin.cc +++ b/src/mainwin.cc @@ -145,6 +145,8 @@ MainWindow::MainWindow(const QString &filename) root_ctx.set_variable("$fa", Value(12.0)); root_ctx.set_variable("$t", Value(0.0)); + root_ctx.set_constant("PI",Value(M_PI)); + Value zero3; zero3.type = Value::VECTOR; zero3.append(new Value(0.0)); diff --git a/src/value.cc b/src/value.cc index 92aaff1..b5c4afe 100644 --- a/src/value.cc +++ b/src/value.cc @@ -324,6 +324,7 @@ void Value::reset_undef() std::string Value::toString() const { std::stringstream stream; + stream.precision(16); switch (this->type) { case STRING: @@ -338,9 +339,13 @@ std::string Value::toString() const stream << ']'; break; case RANGE: - stream << "[ " - << this->range_begin << " : " << this->range_step << " : " << this->range_end - << " ]"; + stream << "[ " + << this->range_begin + << " : " + << this->range_step + << " : " + << this->range_end + << " ]"; break; case NUMBER: stream << this->num; |