From 86904d513734134beffc29c6f4012d53a99f25c5 Mon Sep 17 00:00:00 2001
From: Ferenc Szontágh <szf@fsociety.hu>
Date: Sun, 13 Apr 2025 15:38:34 +0000
Subject: [PATCH] some clean up, added function declaration
---
src/Value.hpp | 58 ++++++++++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 50 insertions(+), 8 deletions(-)
diff --git a/src/Value.hpp b/src/Value.hpp
index 2a15758..520e0de 100644
--- a/src/Value.hpp
+++ b/src/Value.hpp
@@ -4,35 +4,77 @@
#include <string>
#include <variant>
+#include "Token.hpp"
#include "VariableTypes.hpp"
class Value {
public:
Variables::Type type = Variables::Type::VT_NULL;
Variables::DataContainer data;
+ Token token;
Value() : type(Variables::Type::VT_NULL) {}
- Value(Variables::Type t, double val) : type(t), data(std::move(val)) {}
+ //Value(Variables::Type t, double val) : type(t), data(std::move(val)) {}
- Value(Variables::Type t, int val) : type(t), data(std::move(val)) {}
+ //Value(Variables::Type t, int val) : type(t), data(std::move(val)) {}
- Value(Variables::Type t, const std::string & val) : type(t), data(val) {}
+ //Value(Variables::Type t, const std::string & val) : type(t), data(val) {}
- Value(Variables::Type t, bool val) : type(t), data(std::move(val)) {}
+ //Value(Variables::Type t, bool val) : type(t), data(std::move(val)) {}
- static Value fromInt(int val) { return Value(Variables::Type::VT_INT, val); }
+ Value(Variables::Type variable_type, const Token & token) : type(variable_type), token(token) {
+ if (type == Variables::Type::VT_INT) {
+ data = std::stoi(token.lexeme);
+ } else if (type == Variables::Type::VT_DOUBLE) {
+ data = std::stod(token.lexeme);
+ } else if (type == Variables::Type::VT_BOOLEAN) {
+ data = token.lexeme == "true";
+ } else if (type == Variables::Type::VT_NULL) {
+ data = Variables::TypeToString(type);
+ } else if (type == Variables::Type::VT_NOT_DEFINED) {
+ data = Variables::TypeToString(type);
+ } else {
+ data = token.lexeme;
+ }
+ }
- static Value fromDouble(double val) { return Value(Variables::Type::VT_DOUBLE, val); }
+ //Value(const Token & token) : token(token), type(token.variableType), data(token.lexeme) {}
- static Value fromString(const std::string & val) { return { Variables::Type::VT_STRING, val }; }
+ //static Value fromInt(int val) { return Value(Variables::Type::VT_INT, val); }
- static Value fromBoolean(bool val) { return { Variables::Type::VT_BOOLEAN, val }; }
+ //static Value fromDouble(double val) { return Value(Variables::Type::VT_DOUBLE, val); }
+
+ //static Value fromString(const std::string & val) { return { Variables::Type::VT_STRING, val }; }
+
+ //static Value fromBoolean(bool val) { return { Variables::Type::VT_BOOLEAN, val }; }
+
+ static Value fromInt(const Token & token) { return Value(Variables::Type::VT_INT, token); }
+
+ static Value fromDouble(const Token & token) { return Value(Variables::Type::VT_DOUBLE, token); }
+
+ static Value fromString(const Token & token) { return Value(Variables::Type::VT_STRING, token); }
+
+ static Value fromBoolean(const Token & token, bool state) {
+ auto result = Value(Variables::Type::VT_BOOLEAN, token);
+ result.data = state;
+ return result;
+ }
std::string ToString() const { return decodeEscapes(Variables::ToString(data, type)); }
+ int ToInt() const { return std::get<int>(data); }
+
+ double ToDouble() const { return std::get<double>(data); }
+
+ bool ToBool() const { return std::get<bool>(data); }
+
std::string TypeToString() const { return Variables::TypeToString(type); }
+ void SetToken(const Token & token) { this->token = token; }
+
+ const Token & GetToken() const { return token; }
+
private:
Value(Variables::Type t, std::variant<int, double, std::string, bool> && val) : type(t), data(std::move(val)) {}
--
Gitblit v1.9.3