diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-23 04:07:12 +0200 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-05-23 04:07:12 +0200 |
| commit | fc67c4af554189c941c811486a0b2b21aa3f54ea (patch) | |
| tree | ddc7677c3bb1072c9b9fb85618b75c8ee172b377 /dev/kernel/NeKit/Variant.h | |
| parent | fbd1f65a2cd30b3b4ed3da236398ddcfc437ac47 (diff) | |
feat!(kernel): Rename NewKit to NeKit.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'dev/kernel/NeKit/Variant.h')
| -rw-r--r-- | dev/kernel/NeKit/Variant.h | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/dev/kernel/NeKit/Variant.h b/dev/kernel/NeKit/Variant.h new file mode 100644 index 00000000..51548272 --- /dev/null +++ b/dev/kernel/NeKit/Variant.h @@ -0,0 +1,61 @@ +/* ------------------------------------------- + + Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved. + +------------------------------------------- */ + +#pragma once + +#include <NeKit/Defines.h> +#include <NeKit/Json.h> +#include <NeKit/KString.h> +#include <SwapKit/DiskSwap.h> + +namespace Kernel { +class Variant final { + public: + enum class VariantKind { + kString, + kBlob, + kNull, + kJson, + kXML, + kSwap, + kInvalid, + }; + + public: + explicit Variant() = delete; + + public: + NE_COPY_DEFAULT(Variant) + + ~Variant() = default; + + public: + explicit Variant(KString* stringView) : fPtr((VoidPtr) stringView), fKind(VariantKind::kString) {} + + explicit Variant(Json* json) : fPtr((VoidPtr) json), fKind(VariantKind::kJson) {} + + 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(); + VoidPtr Leak(); + + template <typename T> + T* As() { + return reinterpret_cast<T*>(fPtr); + } + + VariantKind& Kind(); + + private: + voidPtr fPtr{nullptr}; + VariantKind fKind{VariantKind::kNull}; +}; +} // namespace Kernel |
