X-Git-Url: http://git.tdb.fi/?a=blobdiff_plain;f=source%2Fglsl%2Fevaluate.cpp;h=f290002b61a14c0fefb15b92398a821c7ec7f529;hb=1476e64621ecbd7b17b00ae2c958322fd39918de;hp=96a80fa7be7c596db57467c19227c3cfa05bdad2;hpb=696a97bd7411d69953c1a9e4b5f3dfb4c1d848f1;p=libs%2Fgl.git diff --git a/source/glsl/evaluate.cpp b/source/glsl/evaluate.cpp index 96a80fa7..f290002b 100644 --- a/source/glsl/evaluate.cpp +++ b/source/glsl/evaluate.cpp @@ -1,3 +1,4 @@ +#include #include "evaluate.h" namespace Msp { @@ -6,25 +7,25 @@ namespace SL { 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(literal.token); - result_valid = true; + r_result = lexical_cast(literal.token); + r_result_valid = true; } void ExpressionEvaluator::visit(ParenthesizedExpression &parexp) @@ -49,48 +50,49 @@ void ExpressionEvaluator::visit(VariableReference &var) 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=="!") - result = !result; + if(unary.oper->token[0]=='!') + 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; - if(binary.oper=="<") - result = (left_result") - result = (left_result>result); - else if(binary.oper==">=") - result = (left_result>=result); - else if(binary.oper=="==") - result = (left_result==result); - else if(binary.oper=="!=") - result = (left_result!=result); - else if(binary.oper=="&&") - result = (left_result && result); - else if(binary.oper=="||") - result = (left_result || result); + std::string oper = binary.oper->token; + if(oper=="<") + r_result = (left_result") + r_result = (left_result>r_result); + else if(oper==">=") + r_result = (left_result>=r_result); + else if(oper=="==") + r_result = (left_result==r_result); + else if(oper=="!=") + r_result = (left_result!=r_result); + else if(oper=="&&") + r_result = (left_result && r_result); + else if(oper=="||") + r_result = (left_result || r_result); else - result_valid = false; + r_result_valid = false; } } // namespace SL