summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-12-22 12:21:08 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-12-22 12:28:18 +0100
commitc965bc54982d6b90ae91edd3bb1103a8d356e59a (patch)
tree129d5970bfde8f80a900b54b88ac9643e5b1c836
parent36dee4f0d8ea806b2f061ed66a89e812ab007ed2 (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.cc1
-rw-r--r--src/kernel/KernelKit/KernelTaskScheduler.h5
-rw-r--r--src/kernel/KernelKit/UserProcessScheduler.h13
-rw-r--r--src/kernel/NeKit/Domain.h8
-rw-r--r--src/kernel/NeKit/Ref.h9
-rw-r--r--src/kernel/NeKit/Vettable.h21
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