#include "EvaluatedValue.hpp" #include BaseValue::BaseValue(Kind kind) : mKind{ kind } { } BaseValue::Kind BaseValue::GetKind() const { return mKind; } bool NumericValue::IsInstance(const BaseValue* value) { return value->GetKind() == KD_Numeric; } NumericValue::NumericValue() : BaseValue(BaseValue::KD_Numeric) { } std::string NumericValue::GetString() const { char buf[64]; auto res = std::to_chars(buf, buf + std::size(buf), mValue); if (res.ec == std::errc()) { return std::string(buf, res.ptr); } else { // TODO larger buffer return ""; } } int64_t NumericValue::GetInt() const { return static_cast(mValue); } double NumericValue::GetValue() const { return mValue; } void NumericValue::SetValue(double value) { mValue = value; } bool TextValue::IsInstance(const BaseValue* value) { return value->GetKind() == KD_Text; } TextValue::TextValue() : BaseValue(BaseValue::KD_Text) { } const std::string& TextValue::GetValue() const { return mValue; } void TextValue::SetValue(const std::string& value) { mValue = value; } bool DateTimeValue::IsInstance(const BaseValue* value) { return value->GetKind() == KD_DateTime; } DateTimeValue::DateTimeValue() : BaseValue(BaseValue::KD_DateTime) { } std::string DateTimeValue::GetString() const { namespace chrono = std::chrono; auto t = chrono::system_clock::to_time_t(mValue); char data[32]; std::strftime(data, sizeof(data), "%Y-%m-%d %H:%M:%S", std::localtime(&t)); return std::string(data); } const std::chrono::time_point& DateTimeValue::GetValue() const { return mValue; } void DateTimeValue::SetValue(const std::chrono::time_point& value) { mValue = value; }