From ce3be6a0391b942d82ac04355e0400415afd9b5e Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Sat, 25 May 2019 12:51:39 +0200 Subject: [PATCH] Improved performance for binary calculations --- src/Evaluator/EvalValues/NumericEvalValue.cpp | 80 +++++++++++-------- 1 file changed, 48 insertions(+), 32 deletions(-) diff --git a/src/Evaluator/EvalValues/NumericEvalValue.cpp b/src/Evaluator/EvalValues/NumericEvalValue.cpp index d387d04..6670913 100644 --- a/src/Evaluator/EvalValues/NumericEvalValue.cpp +++ b/src/Evaluator/EvalValues/NumericEvalValue.cpp @@ -2,49 +2,65 @@ #include "NumericEvalValue.hpp" NumericEvalValue *NumericEvalValue::operator+(NumericEvalValue *b) { - if (this->IsFloat() && b->IsFloat()){ - return new FloatEvalValue(this->GetFloatValue() + b->GetFloatValue()); - } else if (this->IsFloat()){ - return new FloatEvalValue(this->GetFloatValue() + b->GetIntegerValue()); - } else if (b->IsFloat()){ - return new FloatEvalValue(this->GetIntegerValue() + b->GetFloatValue()); - } else{ - return new IntegerEvalValue(this->GetIntegerValue() + b->GetIntegerValue()); + if (this->IsFloat()){ + if (b->IsFloat()){ + return new FloatEvalValue(this->GetFloatValue() + b->GetFloatValue()); + } else{ + return new FloatEvalValue(this->GetFloatValue() + b->GetIntegerValue()); + } + } else { + if (b->IsFloat()){ + return new FloatEvalValue(this->GetIntegerValue() + b->GetFloatValue()); + } else{ + return new IntegerEvalValue(this->GetIntegerValue() + b->GetIntegerValue()); + } } } NumericEvalValue *NumericEvalValue::operator-(NumericEvalValue *b) { - if (this->IsFloat() && b->IsFloat()){ - return new FloatEvalValue(this->GetFloatValue() - b->GetFloatValue()); - } else if (this->IsFloat()){ - return new FloatEvalValue(this->GetFloatValue() - b->GetIntegerValue()); - } else if (b->IsFloat()){ - return new FloatEvalValue(this->GetIntegerValue() - b->GetFloatValue()); - } else{ - return new IntegerEvalValue(this->GetIntegerValue() - b->GetIntegerValue()); + if (this->IsFloat()){ + if (b->IsFloat()){ + return new FloatEvalValue(this->GetFloatValue() - b->GetFloatValue()); + } else{ + return new FloatEvalValue(this->GetFloatValue() - b->GetIntegerValue()); + } + } else { + if (b->IsFloat()){ + return new FloatEvalValue(this->GetIntegerValue() - b->GetFloatValue()); + } else{ + return new IntegerEvalValue(this->GetIntegerValue() - b->GetIntegerValue()); + } } } NumericEvalValue *NumericEvalValue::operator*(NumericEvalValue *b) { - if (this->IsFloat() && b->IsFloat()){ - return new FloatEvalValue(this->GetFloatValue() * b->GetFloatValue()); - } else if (this->IsFloat()){ - return new FloatEvalValue(this->GetFloatValue() * b->GetIntegerValue()); - } else if (b->IsFloat()){ - return new FloatEvalValue(this->GetIntegerValue() * b->GetFloatValue()); - } else{ - return new IntegerEvalValue(this->GetIntegerValue() * b->GetIntegerValue()); + if (this->IsFloat()){ + if (b->IsFloat()){ + return new FloatEvalValue(this->GetFloatValue() * b->GetFloatValue()); + } else{ + return new FloatEvalValue(this->GetFloatValue() * b->GetIntegerValue()); + } + } else { + if (b->IsFloat()){ + return new FloatEvalValue(this->GetIntegerValue() * b->GetFloatValue()); + } else{ + return new IntegerEvalValue(this->GetIntegerValue() * b->GetIntegerValue()); + } } } NumericEvalValue *NumericEvalValue::operator/(NumericEvalValue *b) { - if (this->IsFloat() && b->IsFloat()){ - return new FloatEvalValue(this->GetFloatValue() / b->GetFloatValue()); - } else if (this->IsFloat()){ - return new FloatEvalValue(this->GetFloatValue() / b->GetIntegerValue()); - } else if (b->IsFloat()){ - return new FloatEvalValue(this->GetIntegerValue() / b->GetFloatValue()); - } else{ - return new IntegerEvalValue(this->GetIntegerValue() / b->GetIntegerValue()); + if (this->IsFloat()){ + if (b->IsFloat()){ + return new FloatEvalValue(this->GetFloatValue() / b->GetFloatValue()); + } else{ + return new FloatEvalValue(this->GetFloatValue() / b->GetIntegerValue()); + } + } else { + if (b->IsFloat()){ + return new FloatEvalValue(this->GetIntegerValue() / b->GetFloatValue()); + } else{ + return new IntegerEvalValue(this->GetIntegerValue() / b->GetIntegerValue()); + } } }