#ifndef MODULE_H_ #define MODULE_H_ #include #include #include #include "value.h" class ModuleInstantiation { public: QString label; QString modname; QVector argnames; QVector argexpr; QVector argvalues; QVector children; bool tag_root; bool tag_highlight; bool tag_background; const class Context *ctx; ModuleInstantiation() : tag_root(false), tag_highlight(false), tag_background(false), ctx(NULL) { } virtual ~ModuleInstantiation(); QString dump(QString indent) const; class AbstractNode *evaluate(const Context *ctx) const; }; class IfElseModuleInstantiation : public ModuleInstantiation { public: virtual ~IfElseModuleInstantiation(); QVector else_children; }; class AbstractModule { public: virtual ~AbstractModule(); virtual class AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; virtual QString dump(QString indent, QString name) const; }; class Module : public AbstractModule { public: QHash< QString, Module*> usedlibs; struct libs_cache_ent { Module *mod; QString cache_id, msg; }; static QHash libs_cache; static Module *compile_library(QString filename); QVector argnames; QVector argexpr; QVector assignments_var; QVector assignments_expr; QHash functions; QHash modules; QVector children; Module() { } virtual ~Module(); virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst) const; virtual QString dump(QString indent, QString name) const; }; #endif