From c258c2e5fa9f5134dbc56f717ba37231a08a9081 Mon Sep 17 00:00:00 2001 From: Amlal El Mahrouss Date: Tue, 16 Dec 2025 10:05:50 +0100 Subject: chore: kernel improvements and tweaks on the kernel. - Two default domains: - Computable domain, alias: Domain. - Non-Computable domain, alias: NullDomain. - DiskSwap API improvements. - Vettable Now returns the Result object instead of its value. - Kernel shall not panic when `ptr_new` returns null. Signed-off-by: Amlal El Mahrouss --- src/kernel/NeKit/Domain.h | 37 +++++++++++++++++++++++++++++++++++++ src/kernel/NeKit/Function.h | 2 -- src/kernel/NeKit/Nullable.h | 32 -------------------------------- src/kernel/NeKit/Ref.h | 2 +- src/kernel/NeKit/TOML.h | 2 ++ src/kernel/NeKit/Variant.h | 6 +----- src/kernel/NeKit/Vettable.h | 8 ++++---- 7 files changed, 45 insertions(+), 44 deletions(-) create mode 100644 src/kernel/NeKit/Domain.h delete mode 100644 src/kernel/NeKit/Nullable.h (limited to 'src/kernel/NeKit') diff --git a/src/kernel/NeKit/Domain.h b/src/kernel/NeKit/Domain.h new file mode 100644 index 00000000..cda63ee9 --- /dev/null +++ b/src/kernel/NeKit/Domain.h @@ -0,0 +1,37 @@ +/* ======================================== + + Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. + +======================================== */ + +#ifndef __NE_KIT_DOMAIN_H__ +#define __NE_KIT_DOMAIN_H__ + +#include + +namespace Kernel { +template +struct IsDefined final { + using ResultType = Type; + using ResultTypeRef = Type&; + + static constexpr bool kValue = true; +}; + +template <> +struct IsDefined final { + static constexpr bool kValue = false; +}; + +using NullDomain = IsDefined; + +template +using Domain = IsDefined; + +template +concept IsAcceptable = requires() { + { IsDefined::kValue }; +}; +} // namespace Kernel + +#endif // !__NE_KIT_DOMAIN_H__ \ No newline at end of file diff --git a/src/kernel/NeKit/Function.h b/src/kernel/NeKit/Function.h index f7e47973..dfa8608a 100644 --- a/src/kernel/NeKit/Function.h +++ b/src/kernel/NeKit/Function.h @@ -27,8 +27,6 @@ class Function final { T operator()(Args&&... args) { return fFn(args...); } - T Call(Args&&... args) { return fFn(args...); } - explicit operator bool() { return fFn; } bool operator!() { return !fFn; } diff --git a/src/kernel/NeKit/Nullable.h b/src/kernel/NeKit/Nullable.h deleted file mode 100644 index 30ce9da4..00000000 --- a/src/kernel/NeKit/Nullable.h +++ /dev/null @@ -1,32 +0,0 @@ -/* ======================================== - - Copyright (C) 2025, Amlal El Mahrouss, licensed under the Apache 2.0 license. - -======================================== */ - -#ifndef __NE_KIT_NULLABLE_H__ -#define __NE_KIT_NULLABLE_H__ - -#include - -namespace Kernel { -template -struct IsDefined final { - using ResultType = Type; - using ResultTypeRef = Type&; - - static constexpr bool kValue = true; -}; - -template <> -struct IsDefined final { - static constexpr bool kValue = false; -}; - -template -concept IsAcceptable = requires() { - { IsDefined::kValue }; -}; -} // namespace Kernel - -#endif // !__NE_KIT_NULLABLE_H__ \ No newline at end of file diff --git a/src/kernel/NeKit/Ref.h b/src/kernel/NeKit/Ref.h index 62460568..4767f728 100644 --- a/src/kernel/NeKit/Ref.h +++ b/src/kernel/NeKit/Ref.h @@ -12,7 +12,7 @@ #include #include #include -#include +#include #include namespace Kernel { diff --git a/src/kernel/NeKit/TOML.h b/src/kernel/NeKit/TOML.h index dee273ad..3eaf5197 100644 --- a/src/kernel/NeKit/TOML.h +++ b/src/kernel/NeKit/TOML.h @@ -6,6 +6,8 @@ #pragma once +#include + namespace Kernel { class TOMLObject final { public: diff --git a/src/kernel/NeKit/Variant.h b/src/kernel/NeKit/Variant.h index f7b2c450..5747e9ca 100644 --- a/src/kernel/NeKit/Variant.h +++ b/src/kernel/NeKit/Variant.h @@ -40,13 +40,9 @@ class Variant final { : 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(SwapDiskHdr* ptr) : fPtr(ptr), fKind(VariantKind::kSwap) {} explicit Variant(VoidPtr ptr) : fPtr(ptr), fKind(VariantKind::kBlob) {} public: diff --git a/src/kernel/NeKit/Vettable.h b/src/kernel/NeKit/Vettable.h index fad1f06c..d79aaa0b 100644 --- a/src/kernel/NeKit/Vettable.h +++ b/src/kernel/NeKit/Vettable.h @@ -39,12 +39,12 @@ struct Vettable final { static constexpr bool kValue = true; }; -using FallbackType = bool (*)(bool type_value); +template +using FallbackType = Void (*)(const PropertyResult& type_value); -/// @brief Concept version of Vettable. -template +template OnFallback> concept IsVettable = requires() { - { Vettable::kValue ? TrueResult::kValue : OnFallback(PropertyResult::kValue) }; + { Vettable::kValue ? TrueResult{} : OnFallback(PropertyResult{}) }; }; } // namespace Kernel -- cgit v1.2.3