3
0

MathExpressionOperators.h 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  1. /*
  2. * Copyright (c) Contributors to the Open 3D Engine Project.
  3. * For complete copyright and license terms please see the LICENSE at the root of this distribution.
  4. *
  5. * SPDX-License-Identifier: Apache-2.0 OR MIT
  6. *
  7. */
  8. #pragma once
  9. #include <AzCore/Memory/SystemAllocator.h>
  10. #include <ExpressionEngine/ExpressionElementParser.h>
  11. namespace ExpressionEvaluation
  12. {
  13. class MathExpressionOperators
  14. : public ExpressionElementParser
  15. {
  16. public:
  17. AZ_CLASS_ALLOCATOR(MathExpressionOperators, AZ::SystemAllocator);
  18. enum MathExpressionOperatorPriority
  19. {
  20. Unknown = -1,
  21. AddSubtract = 0,
  22. MultiplyDivideModulo = 1,
  23. Power = 2,
  24. Function = 3
  25. };
  26. enum MathOperatorId
  27. {
  28. Add = 0,
  29. Subtract,
  30. Multiply,
  31. Divide,
  32. Modulo
  33. };
  34. static ElementInformation AddOperator();
  35. static ElementInformation SubtractOperator();
  36. static ElementInformation MultiplyOperator();
  37. static ElementInformation DivideOperator();
  38. static ElementInformation ModuloOperator();
  39. MathExpressionOperators() = default;
  40. ~MathExpressionOperators() override = default;
  41. ExpressionParserId GetParserId() const override;
  42. ParseResult ParseElement(const AZStd::string& inputText, size_t offset) const override;
  43. void EvaluateToken(const ElementInformation& elementInformation, ExpressionResultStack& evaluationStack) const override;
  44. private:
  45. ExpressionResult OnAddOperator(const AZStd::any& leftValue, const AZStd::any& rightValue) const;
  46. ExpressionResult OnSubtractOperator(const AZStd::any& leftValue, const AZStd::any& rightValue) const;
  47. ExpressionResult OnMultiplyOperator(const AZStd::any& leftValue, const AZStd::any& rightValue) const;
  48. ExpressionResult OnDivideOperator(const AZStd::any& leftValue, const AZStd::any& rightValue) const;
  49. ExpressionResult OnModuloOperator(const AZStd::any& leftValue, const AZStd::any& rightValue) const;
  50. };
  51. }