diff options
| author | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-22 12:21:08 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlal@nekernel.org> | 2025-12-22 12:28:18 +0100 |
| commit | c965bc54982d6b90ae91edd3bb1103a8d356e59a (patch) | |
| tree | 129d5970bfde8f80a900b54b88ac9643e5b1c836 | |
| parent | 36dee4f0d8ea806b2f061ed66a89e812ab007ed2 (diff) | |
feat: kernel: New Vettable API, remove IsAcceptable concept.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
| -rw-r--r-- | src/kernel/HALKit/AMD64/HalKernelMain.cc | 1 | ||||
| -rw-r--r-- | src/kernel/KernelKit/KernelTaskScheduler.h | 5 | ||||
| -rw-r--r-- | src/kernel/KernelKit/UserProcessScheduler.h | 13 | ||||
| -rw-r--r-- | src/kernel/NeKit/Domain.h | 8 | ||||
| -rw-r--r-- | src/kernel/NeKit/Ref.h | 9 | ||||
| -rw-r--r-- | src/kernel/NeKit/Vettable.h | 21 |
6 files changed, 24 insertions, 33 deletions
diff --git a/src/kernel/HALKit/AMD64/HalKernelMain.cc b/src/kernel/HALKit/AMD64/HalKernelMain.cc index 3a30bb04..860da0a3 100644 --- a/src/kernel/HALKit/AMD64/HalKernelMain.cc +++ b/src/kernel/HALKit/AMD64/HalKernelMain.cc @@ -120,6 +120,7 @@ EXTERN_C Kernel::Int32 hal_init_platform(Kernel::HEL::BootInfoHeader* handover_h FB::cg_clear_video(); + // Load memory descriptors. HAL::Register64 gdt_reg; diff --git a/src/kernel/KernelKit/KernelTaskScheduler.h b/src/kernel/KernelKit/KernelTaskScheduler.h index 861ccbda..a3fba2af 100644 --- a/src/kernel/KernelKit/KernelTaskScheduler.h +++ b/src/kernel/KernelKit/KernelTaskScheduler.h @@ -32,11 +32,8 @@ class KernelTask final { /// @brief a KID is a Kernel ID, it is used to find a task running within /// the kernel. KID Kid{0}; -}; -template <> -struct Vettable<KernelTask> final { - static constexpr BOOL kValue = NO; + NE_NON_VETTABLE; }; /// @brief Equivalent of UserProcessHelper, but for kernel tasks. diff --git a/src/kernel/KernelKit/UserProcessScheduler.h b/src/kernel/KernelKit/UserProcessScheduler.h index 9a679c87..08788ba3 100644 --- a/src/kernel/KernelKit/UserProcessScheduler.h +++ b/src/kernel/KernelKit/UserProcessScheduler.h @@ -32,7 +32,7 @@ class UserProcessHelper; /// @name UserProcess /// @brief UserProcess class, holds information about the running process/thread. /***********************************************************************************/ -class UserProcess { +class UserProcess final { public: UserProcess(); ~UserProcess(); @@ -40,6 +40,12 @@ class UserProcess { public: NE_COPY_DEFAULT(UserProcess) + using TypeRef = UserProcess&; + using ConstType = const UserProcess&; + using TypePtr = UserProcess*; + + NE_VETTABLE; + public: Char Name[kSchedNameLen] = {"UserProcess"}; ProcessSubsystem SubSystem{ProcessSubsystem::kProcessSubsystemUser}; @@ -159,11 +165,6 @@ class UserProcess { friend UserProcessHelper; }; -template <> -struct Vettable<UserProcess> final { - static constexpr BOOL kValue = YES; -}; - using UserProcessArray = Array<UserProcess, kSchedProcessLimitPerTeam>; using UserProcessRef = Ref<UserProcess>; diff --git a/src/kernel/NeKit/Domain.h b/src/kernel/NeKit/Domain.h index cda63ee9..376fd9d5 100644 --- a/src/kernel/NeKit/Domain.h +++ b/src/kernel/NeKit/Domain.h @@ -14,6 +14,9 @@ template <class Type> struct IsDefined final { using ResultType = Type; using ResultTypeRef = Type&; + using TypeRef = ResultTypeRef; + using ConstType = const Type&; + using TypePtr = Type*; static constexpr bool kValue = true; }; @@ -27,11 +30,6 @@ using NullDomain = IsDefined<nullPtr>; template <class Type> using Domain = IsDefined<Type>; - -template <class Type> -concept IsAcceptable = requires() { - { IsDefined<Type>::kValue }; -}; } // namespace Kernel #endif // !__NE_KIT_DOMAIN_H__
\ No newline at end of file diff --git a/src/kernel/NeKit/Ref.h b/src/kernel/NeKit/Ref.h index 2010f3e9..58a77238 100644 --- a/src/kernel/NeKit/Ref.h +++ b/src/kernel/NeKit/Ref.h @@ -59,8 +59,13 @@ class Ref final { Type operator*() { return fClass; } - explicit operator bool() { return Vettable<Type>::kValue; } - bool operator!() { return !Vettable<Type>::kValue; } + explicit operator bool() { + if constexpr (IsVettable<Type>) { + return Type::kVettable; + } else { + return false; + } + } private: Type fClass; diff --git a/src/kernel/NeKit/Vettable.h b/src/kernel/NeKit/Vettable.h index e4c09624..a09a6aae 100644 --- a/src/kernel/NeKit/Vettable.h +++ b/src/kernel/NeKit/Vettable.h @@ -11,24 +11,13 @@ #include <CompilerKit/CompilerKit.h> #include <NeKit/Config.h> -namespace Kernel { -template <class Type> -struct Vettable final { - using ResultType = Type; - using TypeRef = Type&; - using ConstType = const Type&; - using TypePtr = Type*; - - - static constexpr BOOL kValue = NO; -}; +#define NE_VETTABLE static constexpr BOOL kVettable = YES +#define NE_NON_VETTABLE static constexpr BOOL kVettable = NO +namespace Kernel { template <class Type> -using FallbackType = Void (*)(const PropertyResult<Type>& type_value); - -template <class Type, FallbackType<Type> OnFallback> -concept IsVettable = requires() { - { Vettable<Type>::kValue ? TrueResult<Type>{} : OnFallback(PropertyResult<Type>{}) }; +concept IsVettable = requires(Type) { + (Type::kVettable); }; } // namespace Kernel |
