ExpressionEvaluator::ExpressionEvaluator():
variable_values(0),
- result(0.0f),
- result_valid(false)
+ r_result(0.0f),
+ r_result_valid(false)
{ }
ExpressionEvaluator::ExpressionEvaluator(const ValueMap &v):
variable_values(&v),
- result(0.0f),
- result_valid(false)
+ r_result(0.0f),
+ r_result_valid(false)
{ }
void ExpressionEvaluator::visit(Literal &literal)
{
if(literal.token=="true")
- result = 1.0f;
+ r_result = 1.0f;
else if(literal.token=="false")
- result = 0.0f;
+ r_result = 0.0f;
else
- result = lexical_cast<float>(literal.token);
- result_valid = true;
+ r_result = lexical_cast<float>(literal.token);
+ r_result_valid = true;
}
void ExpressionEvaluator::visit(ParenthesizedExpression &parexp)
void ExpressionEvaluator::visit(UnaryExpression &unary)
{
- result_valid = false;
+ r_result_valid = false;
unary.expression->visit(*this);
- if(!result_valid)
+ if(!r_result_valid)
return;
if(unary.oper->token[0]=='!')
- result = !result;
+ r_result = !r_result;
else
- result_valid = false;
+ r_result_valid = false;
}
void ExpressionEvaluator::visit(BinaryExpression &binary)
{
- result_valid = false;
+ r_result_valid = false;
binary.left->visit(*this);
- if(!result_valid)
+ if(!r_result_valid)
return;
- float left_result = result;
- result_valid = false;
+ float left_result = r_result;
+ r_result_valid = false;
binary.right->visit(*this);
- if(!result_valid)
+ if(!r_result_valid)
return;
std::string oper = binary.oper->token;
if(oper=="<")
- result = (left_result<result);
+ r_result = (left_result<r_result);
else if(oper=="<=")
- result = (left_result<=result);
+ r_result = (left_result<=r_result);
else if(oper==">")
- result = (left_result>result);
+ r_result = (left_result>r_result);
else if(oper==">=")
- result = (left_result>=result);
+ r_result = (left_result>=r_result);
else if(oper=="==")
- result = (left_result==result);
+ r_result = (left_result==r_result);
else if(oper=="!=")
- result = (left_result!=result);
+ r_result = (left_result!=r_result);
else if(oper=="&&")
- result = (left_result && result);
+ r_result = (left_result && r_result);
else if(oper=="||")
- result = (left_result || result);
+ r_result = (left_result || r_result);
else
- result_valid = false;
+ r_result_valid = false;
}
} // namespace SL