diff options
Diffstat (limited to 'src/control.cc')
-rw-r--r-- | src/control.cc | 48 |
1 files changed, 24 insertions, 24 deletions
diff --git a/src/control.cc b/src/control.cc index d47eec0..7786e36 100644 --- a/src/control.cc +++ b/src/control.cc @@ -46,15 +46,15 @@ class ControlModule : public AbstractModule public: control_type_e type; ControlModule(control_type_e type) : type(type) { } - virtual AbstractNode *evaluate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx) const; + virtual AbstractNode *instantiate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx) const; }; void for_eval(AbstractNode &node, const ModuleInstantiation &inst, size_t l, const Context *ctx, const EvalContext *evalctx) { - if (evalctx->eval_arguments.size() > l) { - const std::string &it_name = evalctx->eval_arguments[l].first; - const Value &it_values = evalctx->eval_arguments[l].second; + if (evalctx->numArgs() > l) { + const std::string &it_name = evalctx->getArgName(l); + const Value &it_values = evalctx->getArgValue(l, ctx); Context c(ctx); if (it_values.type() == Value::RANGE) { Value::RangeType range = it_values.toRange(); @@ -81,21 +81,21 @@ void for_eval(AbstractNode &node, const ModuleInstantiation &inst, size_t l, for_eval(node, inst, l+1, &c, evalctx); } } else if (l > 0) { - std::vector<AbstractNode *> evaluatednodes = inst.evaluateChildren(ctx); - node.children.insert(node.children.end(), evaluatednodes.begin(), evaluatednodes.end()); + std::vector<AbstractNode *> instantiatednodes = inst.instantiateChildren(ctx); + node.children.insert(node.children.end(), instantiatednodes.begin(), instantiatednodes.end()); } } -AbstractNode *ControlModule::evaluate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx) const +AbstractNode *ControlModule::instantiate(const Context *ctx, const ModuleInstantiation *inst, const EvalContext *evalctx) const { AbstractNode *node = NULL; if (type == CHILD) { int n = 0; - if (evalctx->eval_arguments.size() > 0) { + if (evalctx->numArgs() > 0) { double v; - if (evalctx->eval_arguments[0].second.getDouble(v)) { + if (evalctx->getArgValue(0).getDouble(v)) { n = trunc(v); if (n < 0) { PRINTB("WARNING: Negative child index (%d) not allowed", n); @@ -114,14 +114,14 @@ AbstractNode *ControlModule::evaluate(const Context *ctx, const ModuleInstantiat // assert(filectx->evalctx); if (filectx->evalctx) { - if (n < filectx->evalctx->children.size()) { - node = filectx->evalctx->children[n]->evaluate_instance(filectx->evalctx); + if (n < filectx->evalctx->numChildren()) { + node = filectx->evalctx->getChild(n)->evaluate(filectx->evalctx); } else { // How to deal with negative objects in this case? // (e.g. first child of difference is invalid) PRINTB("WARNING: Child index (%d) out of bounds (%d children)", - n % filectx->evalctx->children.size()); + n % filectx->evalctx->numChildren()); } } return node; @@ -142,8 +142,8 @@ AbstractNode *ControlModule::evaluate(const Context *ctx, const ModuleInstantiat msg << "ECHO: "; for (size_t i = 0; i < inst->arguments.size(); i++) { if (i > 0) msg << ", "; - if (!evalctx->eval_arguments[i].first.empty()) msg << evalctx->eval_arguments[i].first << " = "; - msg << evalctx->eval_arguments[i].second; + if (!evalctx->getArgName(i).empty()) msg << evalctx->getArgName(i) << " = "; + msg << evalctx->getArgValue(i); } PRINTB("%s", msg.str()); } @@ -151,12 +151,12 @@ AbstractNode *ControlModule::evaluate(const Context *ctx, const ModuleInstantiat if (type == ASSIGN) { Context c(evalctx); - for (size_t i = 0; i < evalctx->eval_arguments.size(); i++) { - if (!evalctx->eval_arguments[i].first.empty()) - c.set_variable(evalctx->eval_arguments[i].first, evalctx->eval_arguments[i].second); + for (size_t i = 0; i < evalctx->numArgs(); i++) { + if (!evalctx->getArgName(i).empty()) + c.set_variable(evalctx->getArgName(i), evalctx->getArgValue(i)); } - std::vector<AbstractNode *> evaluatednodes = inst->evaluateChildren(&c); - node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); + std::vector<AbstractNode *> instantiatednodes = inst->instantiateChildren(&c); + node->children.insert(node->children.end(), instantiatednodes.begin(), instantiatednodes.end()); } if (type == FOR || type == INT_FOR) @@ -167,13 +167,13 @@ AbstractNode *ControlModule::evaluate(const Context *ctx, const ModuleInstantiat if (type == IF) { const IfElseModuleInstantiation *ifelse = dynamic_cast<const IfElseModuleInstantiation*>(inst); - if (evalctx->eval_arguments.size() > 0 && evalctx->eval_arguments[0].second.toBool()) { - std::vector<AbstractNode *> evaluatednodes = ifelse->evaluateChildren(evalctx); - node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); + if (evalctx->numArgs() > 0 && evalctx->getArgValue(0).toBool()) { + std::vector<AbstractNode *> instantiatednodes = ifelse->instantiateChildren(evalctx); + node->children.insert(node->children.end(), instantiatednodes.begin(), instantiatednodes.end()); } else { - std::vector<AbstractNode *> evaluatednodes = ifelse->evaluateElseChildren(evalctx); - node->children.insert(node->children.end(), evaluatednodes.begin(), evaluatednodes.end()); + std::vector<AbstractNode *> instantiatednodes = ifelse->instantiateElseChildren(evalctx); + node->children.insert(node->children.end(), instantiatednodes.begin(), instantiatednodes.end()); } } |