summaryrefslogtreecommitdiffhomepage
path: root/Kernel/NewKit
diff options
context:
space:
mode:
Diffstat (limited to 'Kernel/NewKit')
-rw-r--r--Kernel/NewKit/Json.hxx18
-rw-r--r--Kernel/NewKit/Variant.hpp20
2 files changed, 26 insertions, 12 deletions
diff --git a/Kernel/NewKit/Json.hxx b/Kernel/NewKit/Json.hxx
index 4b994606..9371bf15 100644
--- a/Kernel/NewKit/Json.hxx
+++ b/Kernel/NewKit/Json.hxx
@@ -16,7 +16,8 @@
#include <NewKit/Utils.hpp>
#define cMaxJsonPath 4096
-#define cUndefinedLen 32
+#define cJSONLen 32
+#define cJSONNull "null"
namespace Kernel
{
@@ -25,10 +26,13 @@ namespace Kernel
{
public:
explicit JsonType()
- : Kernel::JsonType(cUndefinedLen, cUndefinedLen)
{
- this->AsKey() += "undefined";
- this->AsValue() += "undefined";
+ auto len = cJSONLen;
+ StringView key = StringView(len);
+ key += cJSONNull;
+
+ this->AsKey() = key;
+ this->AsValue() = key;
}
explicit JsonType(SizeT lhsLen, SizeT rhsLen)
@@ -40,7 +44,7 @@ namespace Kernel
NEWOS_COPY_DEFAULT(JsonType);
- Bool IsUndefined() { return fUndefined; }
+ const Bool& IsUndefined() { return fUndefined; }
private:
Bool fUndefined; // is this instance undefined?
@@ -62,7 +66,7 @@ namespace Kernel
return fValue;
}
- static JsonType kUndefined;
+ static JsonType kNull;
};
/// @brief Json stream reader helper.
@@ -71,7 +75,7 @@ namespace Kernel
STATIC JsonType In(const Char* full_array)
{
if (full_array[0] != '{')
- return JsonType::kUndefined;
+ return JsonType::kNull;
SizeT len = rt_string_len(full_array);
Boolean probe_value = false;
diff --git a/Kernel/NewKit/Variant.hpp b/Kernel/NewKit/Variant.hpp
index 27cd29cc..c118eda1 100644
--- a/Kernel/NewKit/Variant.hpp
+++ b/Kernel/NewKit/Variant.hpp
@@ -8,6 +8,7 @@
#include <NewKit/Defines.hpp>
#include <NewKit/String.hpp>
+#include <NewKit/Json.hxx>
namespace Kernel
{
@@ -17,8 +18,9 @@ namespace Kernel
enum class VariantKind
{
kString,
- kPointer,
- kUndefined
+ kBlob,
+ kNull,
+ kJson,
};
public:
@@ -35,20 +37,28 @@ namespace Kernel
: fPtr((voidPtr)stringView), fKind(VariantKind::kString)
{
}
+
+ explicit Variant(JsonType* json)
+ : fPtr((voidPtr)json), fKind(VariantKind::kJson)
+ {
+ }
+
explicit Variant(nullPtr)
- : fPtr(nullptr), fKind(VariantKind::kUndefined)
+ : fPtr(nullptr), fKind(VariantKind::kNull)
{
}
+
explicit Variant(voidPtr ptr)
- : fPtr(ptr), fKind(VariantKind::kPointer)
+ : fPtr(ptr), fKind(VariantKind::kBlob)
{
}
public:
const Char* ToString();
+ VoidPtr Leak();
private:
voidPtr fPtr{nullptr};
- VariantKind fKind{VariantKind::kUndefined};
+ VariantKind fKind{VariantKind::kNull};
};
} // namespace Kernel