diff options
author | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-21 06:53:46 (GMT) |
---|---|---|
committer | clifford <clifford@b57f626f-c46c-0410-a088-ec61d464b74c> | 2009-06-21 06:53:46 (GMT) |
commit | 1c2472067c3843342f56b5833c284106ab349417 (patch) | |
tree | fd6f914e8cf19337a14b9663b6bda4a6642b8a70 /openscad.h | |
parent | e416017c5e0ef689e9fbc43b520632cde7927c26 (diff) |
Clifford Wolf:
Improved backend data structures
Added dump feature to backend data
git-svn-id: http://svn.clifford.at/openscad/trunk@4 b57f626f-c46c-0410-a088-ec61d464b74c
Diffstat (limited to 'openscad.h')
-rw-r--r-- | openscad.h | 46 |
1 files changed, 32 insertions, 14 deletions
@@ -23,6 +23,9 @@ #include <QHash> #include <QVector> +#include <stdio.h> +#include <stdlib.h> +#include <math.h> class Value; class Expression; @@ -49,6 +52,7 @@ public: Value(double v1) : x(v1), y(0), z(0), is_vector(false), is_nan(false) { } Value(double v1, double v2, double v3) : x(v1), y(v2), z(v3), is_vector(true), is_nan(false) { } Value(const Value &v) : x(v.x), y(v.y), z(v.z), is_vector(v.is_vector), is_nan(v.is_nan) { } + Value(const Value &v1, const Value &v2, const Value &v3); Value& operator = (const Value &v); Value operator + (const Value &v) const; @@ -57,6 +61,8 @@ public: Value operator / (const Value &v) const; Value operator % (const Value &v) const; Value inv() const; + + QString dump() const; }; class Expression @@ -73,21 +79,24 @@ public: // Math operators: * / % + - // Invert (prefix '-'): I // Constant value: C - // Variable: V + // Create Vector: V + // Lookup Variable: L // Function call: F char type; Expression(); ~Expression(); - Value evaluate(Context *context); + Value evaluate(const Context *context) const; + QString dump() const; }; class AbstractFunction { public: virtual ~AbstractFunction(); - virtual Value evaluate(Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues); + virtual Value evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) const; + virtual QString dump(QString indent, QString name) const; }; class BuiltinFunction : public AbstractFunction @@ -99,7 +108,8 @@ public: BuiltinFunction(eval_func_t f) : eval_func(f) { } virtual ~BuiltinFunction(); - virtual Value evaluate(Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues); + virtual Value evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) const; + virtual QString dump(QString indent, QString name) const; }; class Function : public AbstractFunction @@ -108,12 +118,13 @@ public: QVector<QString> argnames; QVector<Expression*> argexpr; - Expression expr; + Expression *expr; Function() { } virtual ~Function(); - virtual Value evaluate(Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues); + virtual Value evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) const; + virtual QString dump(QString indent, QString name) const; }; extern QHash<QString, AbstractFunction*> builtin_functions; @@ -124,7 +135,8 @@ class AbstractModule { public: virtual ~AbstractModule(); - virtual AbstractNode *evaluate(Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues); + virtual AbstractNode *evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) const; + virtual QString dump(QString indent, QString name) const; }; class ModuleInstanciation @@ -134,9 +146,12 @@ public: QString modname; QVector<QString> argnames; QVector<Expression*> argexpr; + QVector<ModuleInstanciation*> children; ModuleInstanciation() { } ~ModuleInstanciation(); + + virtual QString dump(QString indent) const; }; class Module : public AbstractModule @@ -149,12 +164,13 @@ public: QHash<QString, AbstractFunction*> functions; QHash<QString, AbstractModule*> modules; - QVector<ModuleInstanciation> children; + QVector<ModuleInstanciation*> children; Module() { } virtual ~Module(); - virtual AbstractNode *evaluate(Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues); + virtual AbstractNode *evaluate(const Context *ctx, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues) const; + virtual QString dump(QString indent, QString name) const; }; extern QHash<QString, AbstractModule*> builtin_modules; @@ -164,17 +180,17 @@ extern void destroy_builtin_modules(); class Context { public: - Context *parent; + const Context *parent; QHash<QString, Value> variables; QHash<QString, AbstractFunction*> *functions_p; QHash<QString, AbstractModule*> *modules_p; - Context(Context *parent) : parent(parent) { } + Context(const Context *parent) : parent(parent) { } void args(const QVector<QString> &argnames, const QVector<Expression*> &argexpr, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues); - Value lookup_variable(QString name); - Value evaluate_function(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues); - AbstractNode *evaluate_module(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues); + Value lookup_variable(QString name) const; + Value evaluate_function(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues) const; + AbstractNode *evaluate_module(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues) const; }; class AbstractNode @@ -183,5 +199,7 @@ public: QVector<AbstractNode*> children; }; +extern AbstractModule *parse(FILE *f, int debug); + #endif |