Menu conversion base

This commit is contained in:
Jan
2021-12-05 16:23:25 +01:00
parent 05de9cab29
commit 988620e23d
23 changed files with 454 additions and 33 deletions

View File

@ -1,5 +1,7 @@
#pragma once
#include "Utils/ClassUtils.h"
class SimpleExpressionValue;
class ISimpleExpression
{
@ -12,8 +14,8 @@ public:
ISimpleExpression& operator=(const ISimpleExpression& other) = default;
ISimpleExpression& operator=(ISimpleExpression&& other) noexcept = default;
virtual bool IsStatic() = 0;
virtual SimpleExpressionValue Evaluate() = 0;
_NODISCARD virtual bool IsStatic() const = 0;
_NODISCARD virtual SimpleExpressionValue Evaluate() const = 0;
};
// Include SimpleExpressionValue after definition to avoid "base class not defined"

View File

@ -443,14 +443,14 @@ bool SimpleExpressionBinaryOperation::Operand2NeedsParenthesis() const
return operation && operation->m_operation_type->m_precedence > m_operation_type->m_precedence;
}
bool SimpleExpressionBinaryOperation::IsStatic()
bool SimpleExpressionBinaryOperation::IsStatic() const
{
assert(m_operand1 && m_operand2);
return m_operand1->IsStatic() && m_operand2->IsStatic();
}
SimpleExpressionValue SimpleExpressionBinaryOperation::Evaluate()
SimpleExpressionValue SimpleExpressionBinaryOperation::Evaluate() const
{
return m_operation_type->m_evaluation_function(m_operand1->Evaluate(), m_operand2->Evaluate());
}

View File

@ -93,6 +93,6 @@ public:
_NODISCARD bool Operand1NeedsParenthesis() const;
_NODISCARD bool Operand2NeedsParenthesis() const;
bool IsStatic() override;
SimpleExpressionValue Evaluate() override;
_NODISCARD bool IsStatic() const override;
_NODISCARD SimpleExpressionValue Evaluate() const override;
};

View File

@ -11,12 +11,12 @@ SimpleExpressionConditionalOperator::SimpleExpressionConditionalOperator(std::un
{
}
bool SimpleExpressionConditionalOperator::IsStatic()
bool SimpleExpressionConditionalOperator::IsStatic() const
{
return m_condition->IsStatic() && m_true_value->IsStatic() && m_false_value->IsStatic();
}
SimpleExpressionValue SimpleExpressionConditionalOperator::Evaluate()
SimpleExpressionValue SimpleExpressionConditionalOperator::Evaluate() const
{
return m_condition->Evaluate().IsTruthy() ? m_true_value->Evaluate() : m_false_value->Evaluate();
}

View File

@ -8,8 +8,8 @@ public:
std::unique_ptr<ISimpleExpression> m_true_value;
std::unique_ptr<ISimpleExpression> m_false_value;
bool IsStatic() override;
SimpleExpressionValue Evaluate() override;
_NODISCARD bool IsStatic() const override;
_NODISCARD SimpleExpressionValue Evaluate() const override;
SimpleExpressionConditionalOperator();
SimpleExpressionConditionalOperator(std::unique_ptr<ISimpleExpression> condition, std::unique_ptr<ISimpleExpression> trueExpression, std::unique_ptr<ISimpleExpression> falseExpression);

View File

@ -64,14 +64,14 @@ bool SimpleExpressionUnaryOperation::OperandNeedsParenthesis() const
return dynamic_cast<const SimpleExpressionBinaryOperation*>(m_operand.get()) != nullptr;
}
bool SimpleExpressionUnaryOperation::IsStatic()
bool SimpleExpressionUnaryOperation::IsStatic() const
{
assert(m_operand);
return m_operand->IsStatic();
}
SimpleExpressionValue SimpleExpressionUnaryOperation::Evaluate()
SimpleExpressionValue SimpleExpressionUnaryOperation::Evaluate() const
{
return m_operation_type->m_evaluation_function(m_operand->Evaluate());
}

View File

@ -46,6 +46,6 @@ public:
_NODISCARD bool OperandNeedsParenthesis() const;
bool IsStatic() override;
SimpleExpressionValue Evaluate() override;
_NODISCARD bool IsStatic() const override;
_NODISCARD SimpleExpressionValue Evaluate() const override;
};

View File

@ -24,12 +24,12 @@ SimpleExpressionValue::SimpleExpressionValue(const int intValue)
m_int_value = intValue;
}
bool SimpleExpressionValue::IsStatic()
bool SimpleExpressionValue::IsStatic() const
{
return true;
}
SimpleExpressionValue SimpleExpressionValue::Evaluate()
SimpleExpressionValue SimpleExpressionValue::Evaluate() const
{
return *this;
}

View File

@ -29,7 +29,7 @@ public:
explicit SimpleExpressionValue(double doubleValue);
explicit SimpleExpressionValue(int intValue);
bool IsStatic() override;
SimpleExpressionValue Evaluate() override;
_NODISCARD bool IsStatic() const override;
_NODISCARD SimpleExpressionValue Evaluate() const override;
_NODISCARD bool IsTruthy() const;
};