diff options
Diffstat (limited to 'src/kernel')
| -rw-r--r-- | src/kernel/FSKit/OpenHeFS.h | 2 | ||||
| -rw-r--r-- | src/kernel/KernelKit/UserProcessScheduler.h | 2 | ||||
| -rw-r--r-- | src/kernel/NeKit/OwnPtr.h | 2 | ||||
| -rw-r--r-- | src/kernel/NeKit/Pmm.h | 1 | ||||
| -rw-r--r-- | src/kernel/NeKit/Ref.h | 1 | ||||
| -rw-r--r-- | src/kernel/NeKit/Vet.h | 10 |
6 files changed, 15 insertions, 3 deletions
diff --git a/src/kernel/FSKit/OpenHeFS.h b/src/kernel/FSKit/OpenHeFS.h index bd5f3753..16647095 100644 --- a/src/kernel/FSKit/OpenHeFS.h +++ b/src/kernel/FSKit/OpenHeFS.h @@ -9,8 +9,8 @@ #include <CompilerKit/CompilerKit.h>
#include <KernelKit/DriveMgr.h>
#include <KernelKit/UserMgr.h>
-#include <NeKit/Crc32.h>
#include <NeKit/Config.h>
+#include <NeKit/Crc32.h>
#include <NeKit/KString.h>
#include <hint/CompilerHint.h>
diff --git a/src/kernel/KernelKit/UserProcessScheduler.h b/src/kernel/KernelKit/UserProcessScheduler.h index d67d54c2..6a6cfd61 100644 --- a/src/kernel/KernelKit/UserProcessScheduler.h +++ b/src/kernel/KernelKit/UserProcessScheduler.h @@ -37,6 +37,8 @@ class USER_PROCESS final NE_VETTABLE { explicit USER_PROCESS(); ~USER_PROCESS(); + auto DoVet() const { return *this; } + public: NE_COPY_DEFAULT(USER_PROCESS) diff --git a/src/kernel/NeKit/OwnPtr.h b/src/kernel/NeKit/OwnPtr.h index 30c8f9eb..2c493b1b 100644 --- a/src/kernel/NeKit/OwnPtr.h +++ b/src/kernel/NeKit/OwnPtr.h @@ -50,7 +50,7 @@ class OwnPtr final { Ref<T> AsRef() { return Ref<T>(fCls); } explicit operator bool() { return fCls; } - bool operator!() { return !fCls; } + bool operator!() { return !fCls; } private: T* fCls{nullptr}; diff --git a/src/kernel/NeKit/Pmm.h b/src/kernel/NeKit/Pmm.h index 8c117a67..7026c583 100644 --- a/src/kernel/NeKit/Pmm.h +++ b/src/kernel/NeKit/Pmm.h @@ -7,6 +7,7 @@ #pragma once +#include <NeKit/Config.h> #include <NeKit/PageMgr.h> #include <NeKit/Ref.h> diff --git a/src/kernel/NeKit/Ref.h b/src/kernel/NeKit/Ref.h index ff8731e3..da7fe93e 100644 --- a/src/kernel/NeKit/Ref.h +++ b/src/kernel/NeKit/Ref.h @@ -45,6 +45,7 @@ class Ref final { T operator*() { return fClass; } operator bool() { return Vettable<T>::kValue; } + bool operator!() { return !Vettable<T>::kValue; } private: T fClass; diff --git a/src/kernel/NeKit/Vet.h b/src/kernel/NeKit/Vet.h index d4c1060f..86874085 100644 --- a/src/kernel/NeKit/Vet.h +++ b/src/kernel/NeKit/Vet.h @@ -13,13 +13,15 @@ #define NE_VETTABLE : public IVet namespace Kernel { +/// @brief Vet interface for objects. struct IVet { IVet() = default; virtual ~IVet() = default; NE_COPY_DEFAULT(IVet) - operator bool() = delete; + /// @brief Start vetting object for validity. + auto DoVet() const { return false; } }; template <typename T> @@ -31,4 +33,10 @@ template <> struct Vettable<IVet> final { static constexpr bool kValue = true; }; + +/// @brief Concept version of Vettable. +template <typename T, typename Fallback> +concept IVettable = requires(IVet vettable, Fallback fallback) { + { Vettable<T>::kValue ? vettable.DoVet() : fallback(vettable) }; +}; } // namespace Kernel
\ No newline at end of file |
