diff --git a/__while.cpp b/__while.cpp index fbf7b37..ea7e16b 100644 --- a/__while.cpp +++ b/__while.cpp @@ -1,32 +1,56 @@ #include "__while.h" #include "Exception.h" +#include "Operand.h" #include namespace jet { __while::__while(coreutils::ZString &in, coreutils::MString &parentOut, Global &global, Tag *parent) : Tag(in, parentOut, global, parent) { - if(variableDefined(coreutils::ZString("value1"))) { - if(variableDefined(coreutils::ZString("expr"))) + coreutils::MString result; + bool booleanResult = false; + + if(variableDefined("value1")) { + + if(variableDefined("expr")) throw coreutils::Exception("Either value1 or expr can be specified but not both."); - if(variableDefined(coreutils::ZString("value2"))) { - if(variableDefined(coreutils::ZString("type"))) { - // process here - } else + if(variableDefined("value2")) { + + if(variableDefined("type")) { + + + } + else throw coreutils::Exception("type expected if value1 and value2 specified."); - } else + } + else throw coreutils::Exception("value2 required if value1 specified."); - } else if(variableDefined(coreutils::ZString("expr"))) { - if(variableDefined(coreutils::ZString("value2"))) + if(!variableDefined("type")) + throw coreutils::Exception("type required for a value1 and value2 comparison."); + int rc = variables["value1"].compare(variables["value2"]); + if(((variables["type"] == "eq") && (rc == 0)) || + ((variables["type"] == "ne") && (rc != 0)) || + ((variables["type"] == "lt") && (rc == -1)) || + ((variables["type"] == "le") && (rc != 1)) || + ((variables["type"] == "gt") && (rc == 1)) || + ((variables["type"] == "ge") && (rc != -1))) + booleanResult = true; + else + throw coreutils::Exception("type value must be 'eq','ne','lt','le','gt','ge'."); + } + else if(variableDefined("expr")) { + + if(variableDefined("value2")) throw coreutils::Exception("value2 should not be specified with expr."); - if(variableDefined(coreutils::ZString("type"))) + if(variableDefined("type")) throw coreutils::Exception("type should not be specified with expr."); - // process here + booleanResult = Operand(variables["expr"]).boolean; } - while(true) { + while(booleanResult) { processContainer(container); - } + container.reset(); + } }