diff options
Diffstat (limited to 'src/kernel/NeKit/Variant.h')
| -rw-r--r-- | src/kernel/NeKit/Variant.h | 71 |
1 files changed, 71 insertions, 0 deletions
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 <NeKit/Defines.h> +#include <NeKit/Json.h> +#include <NeKit/TOML.h> +#include <NeKit/KString.h> +#include <SwapKit/DiskSwap.h> + +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 <typename CharKind> + explicit Variant(KBasicString<CharKind>* 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 <typename T> + T* As() noexcept { + return reinterpret_cast<T*>(fPtr); + } + + VariantKind& Kind(); + + private: + VoidPtr fPtr{nullptr}; + VariantKind fKind{VariantKind::kNull}; +}; +} // namespace Kernel |
