NeKernel dev
Loading...
Searching...
No Matches
Variant.h
Go to the documentation of this file.
1/* ========================================
2
3 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
4
5======================================== */
6
7#pragma once
8
9#include <NeKit/Config.h>
10#include <NeKit/Json.h>
11#include <NeKit/KString.h>
12#include <NeKit/TOML.h>
13#include <SwapKit/DiskSwap.h>
14
15namespace Kernel {
16class Variant final {
17 public:
27
28 public:
29 explicit Variant() = delete;
30
31 public:
33
34 ~Variant() = default;
35
36 public:
37 template <typename CharKind>
38 explicit Variant(KBasicString<CharKind>* stringView)
39 : fPtr((VoidPtr) stringView), fKind(VariantKind::kString) {}
40
41 explicit Variant(JsonObject<>* json) : fPtr((VoidPtr) json), fKind(VariantKind::kJson) {}
42
43 explicit Variant(TOMLObject* toml) : fPtr((VoidPtr) toml), fKind(VariantKind::kTOML) {}
44
45 explicit Variant(nullPtr ptr) : fPtr(ptr), fKind(VariantKind::kNull) {}
46
47 explicit Variant(SWAP_DISK_HEADER* ptr) : fPtr(ptr), fKind(VariantKind::kSwap) {}
48
49 explicit Variant(VoidPtr ptr) : fPtr(ptr), fKind(VariantKind::kBlob) {}
50
51 public:
52 const Char* ToString();
53
58 VoidPtr Leak();
59
60 template <typename T>
61 T* As() {
62 return reinterpret_cast<T*>(fPtr);
63 }
64
66
67 private:
68 VoidPtr fPtr{nullptr};
70};
71} // namespace Kernel
#define NE_COPY_DEFAULT(KLASS)
Definition Detail.h:17
JSON object representation.
Definition Json.h:30
Kernel string class, not dynamic.
Definition KString.h:20
Definition TOML.h:10
T * As()
Definition Variant.h:61
Variant(SWAP_DISK_HEADER *ptr)
Definition Variant.h:47
VariantKind & Kind()
Return variant's kind.
Definition Variant.cc:30
VariantKind
Definition Variant.h:18
@ kString
Definition Variant.h:20
@ kJson
Definition Variant.h:23
@ kBlob
Definition Variant.h:21
@ kTOML
Definition Variant.h:24
@ kSwap
Definition Variant.h:25
@ kInvalid
Definition Variant.h:19
@ kNull
Definition Variant.h:22
~Variant()=default
Variant(JsonObject<> *json)
Definition Variant.h:41
Variant(KBasicString< CharKind > *stringView)
Definition Variant.h:38
Variant(VoidPtr ptr)
Definition Variant.h:49
VoidPtr Leak()
Returns the underlying pointer.
Definition Variant.cc:35
const Char * ToString()
Definition Variant.cc:10
Variant(nullPtr ptr)
Definition Variant.h:45
VoidPtr fPtr
Definition Variant.h:68
VariantKind fKind
Definition Variant.h:69
Variant(TOMLObject *toml)
Definition Variant.h:43
Variant()=delete
UPS inline definitions.
Definition Device.h:12
char Char
Definition Config.h:51
decltype(nullptr) nullPtr
Definition Config.h:34
void * VoidPtr
Definition Config.h:33
Swap disk header, containing information about the held virtual memory.
Definition DiskSwap.h:63