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