summaryrefslogtreecommitdiff
path: root/src/control.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/control.cc')
-rw-r--r--src/control.cc48
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());
}
}
contact: Jan Huwald // Impressum