2019-05-24 17:14:30 +00:00
|
|
|
|
|
|
|
#ifndef PORYGONLANG_NUMERICEVALVALUE_HPP
|
|
|
|
#define PORYGONLANG_NUMERICEVALVALUE_HPP
|
|
|
|
|
2019-05-25 14:15:20 +00:00
|
|
|
#include <sstream>
|
2019-09-07 08:57:09 +00:00
|
|
|
#include <variant>
|
2019-05-24 17:14:30 +00:00
|
|
|
#include "EvalValue.hpp"
|
2019-06-23 13:58:14 +00:00
|
|
|
#include "../../Utilities/StringUtils.hpp"
|
|
|
|
|
2019-06-17 16:35:12 +00:00
|
|
|
namespace Porygon::Evaluation {
|
|
|
|
class NumericEvalValue : public EvalValue {
|
2019-09-07 08:57:09 +00:00
|
|
|
std::variant<int64_t , double> _intValue, _floatValue;
|
|
|
|
bool _isFloat;
|
|
|
|
public:
|
2019-06-17 16:35:12 +00:00
|
|
|
|
2019-09-07 08:57:09 +00:00
|
|
|
explicit NumericEvalValue(int64_t i) : _intValue(i), _isFloat(false) {}
|
|
|
|
explicit NumericEvalValue(int32_t i) : _intValue(static_cast<int64_t>(i)), _isFloat(false) {}
|
|
|
|
explicit NumericEvalValue(double d) : _floatValue(d), _isFloat(true) {}
|
|
|
|
explicit NumericEvalValue(float f) : _floatValue(f), _isFloat(true) {}
|
2019-06-17 16:35:12 +00:00
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
[[nodiscard]]
|
2019-09-07 08:57:09 +00:00
|
|
|
virtual bool IsFloat() const{
|
|
|
|
return _isFloat;
|
|
|
|
}
|
2019-06-17 16:35:12 +00:00
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
[[nodiscard]]
|
|
|
|
inline TypeClass GetTypeClass() const final {
|
2019-06-17 16:35:12 +00:00
|
|
|
return TypeClass::Number;
|
|
|
|
}
|
|
|
|
|
2019-07-25 15:23:54 +00:00
|
|
|
bool operator==(const EvalValue *b) const final;
|
2019-07-27 15:59:42 +00:00
|
|
|
|
2019-09-07 08:57:09 +00:00
|
|
|
[[nodiscard]] EvalValue *Clone() const override;
|
|
|
|
[[nodiscard]] size_t GetHashCode() const override;
|
|
|
|
[[nodiscard]] EvalValue* Cast(shared_ptr<const ScriptType> castType) const final;
|
2019-08-15 16:12:29 +00:00
|
|
|
|
2019-09-07 08:57:09 +00:00
|
|
|
[[nodiscard]] int64_t EvaluateInteger() const override;
|
|
|
|
[[nodiscard]] double EvaluateFloat() const override;
|
|
|
|
[[nodiscard]] u16string EvaluateString() const override;
|
2019-06-17 16:35:12 +00:00
|
|
|
|
2019-09-07 08:57:09 +00:00
|
|
|
[[nodiscard]] EvalValue *BinaryOperation(Binder::BoundBinaryOperation operation, const EvalValue *b) const final;
|
|
|
|
[[nodiscard]] EvalValue *UnaryOperation(Binder::BoundUnaryOperation operation) const override;
|
2019-06-17 16:35:12 +00:00
|
|
|
};
|
|
|
|
}
|
2019-05-24 17:14:30 +00:00
|
|
|
|
|
|
|
#endif //PORYGONLANG_NUMERICEVALVALUE_HPP
|