diff options
Diffstat (limited to 'src/context.h')
-rw-r--r-- | src/context.h | 57 |
1 files changed, 35 insertions, 22 deletions
diff --git a/src/context.h b/src/context.h index cbb1c4f..f085e01 100644 --- a/src/context.h +++ b/src/context.h @@ -1,39 +1,52 @@ #ifndef CONTEXT_H_ #define CONTEXT_H_ -#include <QHash> -#include <QString> +#include <string> +#include <vector> +#include <boost/unordered_map.hpp> #include "value.h" +using boost::unordered_map; + 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; - const QHash<QString, class AbstractModule*> *modules_p; - const QHash<QString, class Module*> *usedlibs_p; - const class ModuleInstantiation *inst_p; - QString document_path; - - static QVector<const Context*> ctx_stack; - - Context(const Context *parent = NULL); + Context(const Context *parent = NULL, const class Module *library = NULL); ~Context(); - void args(const QVector<QString> &argnames, const QVector<class Expression*> &argexpr, const QVector<QString> &call_argnames, const QVector<Value> &call_argvalues); + void args(const std::vector<std::string> &argnames, + const std::vector<class Expression*> &argexpr, + const std::vector<std::string> &call_argnames, + const std::vector<Value> &call_argvalues); - void set_variable(QString name, Value value); - Value lookup_variable(QString name, bool silent = false) const; + void set_variable(const std::string &name, const Value &value); + void set_constant(const std::string &name, const Value &value); - void set_constant(QString name, Value value); + Value lookup_variable(const std::string &name, bool silent = false) const; + Value evaluate_function(const std::string &name, + const std::vector<std::string> &argnames, + const std::vector<Value> &argvalues) const; + class AbstractNode *evaluate_module(const class ModuleInstantiation &inst) const; - QString get_absolute_path(const QString &filename) const; + void setDocumentPath(const std::string &path) { this->document_path = path; } + std::string getAbsolutePath(const std::string &filename) const; - Value evaluate_function(QString name, const QVector<QString> &argnames, const QVector<Value> &argvalues) const; - class AbstractNode *evaluate_module(const ModuleInstantiation *inst) const; +public: + const Context *parent; + const unordered_map<std::string, class AbstractFunction*> *functions_p; + const unordered_map<std::string, class AbstractModule*> *modules_p; + typedef unordered_map<std::string, class Module*> ModuleContainer; + const ModuleContainer *usedlibs_p; + const ModuleInstantiation *inst_p; + + static std::vector<const Context*> ctx_stack; + +private: + typedef unordered_map<std::string, Value> ValueMap; + ValueMap constants; + ValueMap variables; + ValueMap config_variables; + std::string document_path; }; #endif |