From 586dd994e249b6ad2f7779d59ce8cf29586a9631 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 27 Jul 2019 18:47:29 +0200 Subject: [PATCH] Fix annoying build warnings --- src/Evaluator/EvalValues/NumericEvalValue.cpp | 33 --------------- src/Evaluator/EvalValues/NumericEvalValue.hpp | 41 ++++++++++++++++++- 2 files changed, 40 insertions(+), 34 deletions(-) diff --git a/src/Evaluator/EvalValues/NumericEvalValue.cpp b/src/Evaluator/EvalValues/NumericEvalValue.cpp index 02f6cf3..dbbd5a3 100644 --- a/src/Evaluator/EvalValues/NumericEvalValue.cpp +++ b/src/Evaluator/EvalValues/NumericEvalValue.cpp @@ -176,37 +176,4 @@ namespace Porygon::Evaluation { } } } - - EvalValue *FloatEvalValue::BinaryOperation(Binder::BoundBinaryOperation operation, const EvalValue *b) const { - auto right = dynamic_cast(b); - if (right->IsFloat()){ - auto rightVal = right->EvaluateFloat(); - switch (operation){ - case Binder::BoundBinaryOperation::Addition: return new FloatEvalValue(_value + rightVal); - case Binder::BoundBinaryOperation::Subtraction: return new FloatEvalValue(_value - rightVal); - case Binder::BoundBinaryOperation::Multiplication: return new FloatEvalValue(_value * rightVal); - case Binder::BoundBinaryOperation::Division: return new FloatEvalValue(_value / rightVal); - case Binder::BoundBinaryOperation::LessThan: return new BooleanEvalValue(_value < rightVal); - case Binder::BoundBinaryOperation::LessThanEquals: return new BooleanEvalValue(_value <= rightVal); - case Binder::BoundBinaryOperation::GreaterThan: return new BooleanEvalValue(_value > rightVal); - case Binder::BoundBinaryOperation::GreaterThanEquals: return new BooleanEvalValue(_value >= rightVal); - default: - throw; - } - } else{ - auto rightVal = right->EvaluateInteger(); - switch (operation){ - case Binder::BoundBinaryOperation::Addition: return new IntegerEvalValue((long)_value + rightVal); - case Binder::BoundBinaryOperation::Subtraction: return new IntegerEvalValue((long)_value - rightVal); - case Binder::BoundBinaryOperation::Multiplication: return new IntegerEvalValue((long)_value * rightVal); - case Binder::BoundBinaryOperation::Division: return new IntegerEvalValue((long)_value / rightVal); - case Binder::BoundBinaryOperation::LessThan: return new BooleanEvalValue(_value < rightVal); - case Binder::BoundBinaryOperation::LessThanEquals: return new BooleanEvalValue(_value <= rightVal); - case Binder::BoundBinaryOperation::GreaterThan: return new BooleanEvalValue(_value > rightVal); - case Binder::BoundBinaryOperation::GreaterThanEquals: return new BooleanEvalValue(_value >= rightVal); - default: - throw; - } - } - } } \ No newline at end of file diff --git a/src/Evaluator/EvalValues/NumericEvalValue.hpp b/src/Evaluator/EvalValues/NumericEvalValue.hpp index 67c4403..eed00e2 100644 --- a/src/Evaluator/EvalValues/NumericEvalValue.hpp +++ b/src/Evaluator/EvalValues/NumericEvalValue.hpp @@ -133,7 +133,46 @@ namespace Porygon::Evaluation { } [[nodiscard]] - inline EvalValue* BinaryOperation(Binder::BoundBinaryOperation operation, const EvalValue* b) const final; + inline EvalValue* BinaryOperation(Binder::BoundBinaryOperation operation, const EvalValue* b) const final{ + auto right = dynamic_cast(b); + if (right->IsFloat()){ + auto rightVal = right->EvaluateFloat(); + switch (operation){ + case Binder::BoundBinaryOperation::Addition: return new FloatEvalValue(_value + rightVal); + case Binder::BoundBinaryOperation::Subtraction: return new FloatEvalValue(_value - rightVal); + case Binder::BoundBinaryOperation::Multiplication: return new FloatEvalValue(_value * rightVal); + case Binder::BoundBinaryOperation::Division: return new FloatEvalValue(_value / rightVal); + case Binder::BoundBinaryOperation::LessThan: return new BooleanEvalValue(_value < rightVal); + case Binder::BoundBinaryOperation::LessThanEquals: return new BooleanEvalValue(_value <= rightVal); + case Binder::BoundBinaryOperation::GreaterThan: return new BooleanEvalValue(_value > rightVal); + case Binder::BoundBinaryOperation::GreaterThanEquals: return new BooleanEvalValue(_value >= rightVal); + default: + throw; + } + } else { + auto rightVal = right->EvaluateInteger(); + switch (operation) { + case Binder::BoundBinaryOperation::Addition: + return new IntegerEvalValue((long) _value + rightVal); + case Binder::BoundBinaryOperation::Subtraction: + return new IntegerEvalValue((long) _value - rightVal); + case Binder::BoundBinaryOperation::Multiplication: + return new IntegerEvalValue((long) _value * rightVal); + case Binder::BoundBinaryOperation::Division: + return new IntegerEvalValue((long) _value / rightVal); + case Binder::BoundBinaryOperation::LessThan: + return new BooleanEvalValue(_value < rightVal); + case Binder::BoundBinaryOperation::LessThanEquals: + return new BooleanEvalValue(_value <= rightVal); + case Binder::BoundBinaryOperation::GreaterThan: + return new BooleanEvalValue(_value > rightVal); + case Binder::BoundBinaryOperation::GreaterThanEquals: + return new BooleanEvalValue(_value >= rightVal); + default: + throw; + } + } + } [[nodiscard]] EvalValue* UnaryOperation(Binder::BoundUnaryOperation operation) const final{