From 83d870e58457a1d335a1d9b9966a6a1887cc297b Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Mon, 24 Nov 2025 03:02:43 +0100 Subject: feat! breaking changes on kernel sources. Signed-off-by: Amlal El Mahrouss --- src/kernel/NeKit/Variant.h | 71 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 71 insertions(+) create mode 100644 src/kernel/NeKit/Variant.h (limited to 'src/kernel/NeKit/Variant.h') diff --git a/src/kernel/NeKit/Variant.h b/src/kernel/NeKit/Variant.h new file mode 100644 index 00000000..7bcd0dff --- /dev/null +++ b/src/kernel/NeKit/Variant.h @@ -0,0 +1,71 @@ +/* ======================================== + + Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. + +======================================== */ + +#pragma once + +#include +#include +#include +#include +#include + +namespace Kernel { +class Variant final { + public: + enum class VariantKind { + kInvalid = 0, + kString = 200, + kBlob, + kNull, + kJson, + kTOML, + kSwap, + }; + + public: + explicit Variant() = delete; + + public: + NE_COPY_DEFAULT(Variant) + + ~Variant() = default; + + public: + template + explicit Variant(KBasicString* stringView) + : fPtr((VoidPtr) stringView), fKind(VariantKind::kString) {} + + explicit Variant(JsonObject<>* json) : fPtr((VoidPtr) json), fKind(VariantKind::kJson) {} + + explicit Variant(TOMLObject* toml) : fPtr((VoidPtr) toml), fKind(VariantKind::kTOML) {} + + explicit Variant(nullPtr ptr) : fPtr(ptr), fKind(VariantKind::kNull) {} + + explicit Variant(SWAP_DISK_HEADER* ptr) : fPtr(ptr), fKind(VariantKind::kSwap) {} + + explicit Variant(VoidPtr ptr) : fPtr(ptr), fKind(VariantKind::kBlob) {} + + public: + const Char* ToString(); + + /// ======================================================================== + /// @brief Returns the underlying pointer. + /// @return the underlying pointer. + /// ======================================================================== + VoidPtr Leak(); + + template + T* As() noexcept { + return reinterpret_cast(fPtr); + } + + VariantKind& Kind(); + + private: + VoidPtr fPtr{nullptr}; + VariantKind fKind{VariantKind::kNull}; +}; +} // namespace Kernel -- cgit v1.2.3