summaryrefslogtreecommitdiffhomepage
path: root/src/kernel/NeKit/Ref.h
diff options
context:
space:
mode:
authorAmlal El Mahrouss <amlal@nekernel.org>2025-12-11 08:34:36 +0100
committerAmlal El Mahrouss <amlal@nekernel.org>2025-12-11 08:34:36 +0100
commitfe58b444de6c00089010d308a39f78890b1782b6 (patch)
tree84849ef1576aca5410210503c58268d3a9592c14 /src/kernel/NeKit/Ref.h
parent076c8378e96a9fac9864c9d02bb63fa7dd423e4a (diff)
feat: kernel: `Vettable.h` interface and concepts.
Signed-off-by: Amlal El Mahrouss <amlal@nekernel.org>
Diffstat (limited to 'src/kernel/NeKit/Ref.h')
-rw-r--r--src/kernel/NeKit/Ref.h31
1 files changed, 18 insertions, 13 deletions
diff --git a/src/kernel/NeKit/Ref.h b/src/kernel/NeKit/Ref.h
index 5f6e1940..960df31f 100644
--- a/src/kernel/NeKit/Ref.h
+++ b/src/kernel/NeKit/Ref.h
@@ -12,7 +12,7 @@
#include <KernelKit/HeapMgr.h>
#include <NeKit/Config.h>
#include <NeKit/KernelPanic.h>
-#include <NeKit/Vet.h>
+#include <NeKit/Vettable.h>
namespace Kernel {
/// =========================================================== ///
@@ -25,10 +25,12 @@ class Ref final {
~Ref() = default;
public:
- Ref(T* cls) : fClass(*cls) {}
- Ref(T cls) : fClass(cls) {}
+ using Type = T;
- Ref& operator=(T ref) {
+ Ref(Type* cls) : fClass(*cls) {}
+ Ref(Type cls) : fClass(cls) {}
+
+ Ref& operator=(Type ref) {
fClass = ref;
return *this;
}
@@ -36,29 +38,32 @@ class Ref final {
NE_COPY_DEFAULT(Ref)
public:
- T operator->() const { return fClass; }
+ Type operator->() const { return fClass; }
- T& Leak() { return fClass; }
+ Type& Leak() { return fClass; }
- T& TryLeak() { return fClass; }
+ Type& TryLeak() { return fClass; }
- T operator*() { return fClass; }
+ Type operator*() { return fClass; }
- operator bool() { return Vettable<T>::kValue; }
- bool operator!() { return !Vettable<T>::kValue; }
+ operator bool() { return Vettable<Type>::kValue; }
+ bool operator!() { return !Vettable<Type>::kValue; }
private:
- T fClass;
+ Type fClass;
};
template <typename T>
class NonNullRef final {
public:
+ using RefType = Ref<T>;
+ using Type = T;
+
NonNullRef() = delete;
NonNullRef(nullPtr) = delete;
- NonNullRef(T* ref) : fRef(ref) { MUST_PASS(ref); }
- NonNullRef(Ref<T> ref) : fRef(ref) { MUST_PASS(ref); }
+ NonNullRef(Type* ref) : fRef(ref) { MUST_PASS(ref); }
+ NonNullRef(RefType ref) : fRef(ref) { MUST_PASS(ref); }
Ref<T>& operator->() {
MUST_PASS(fRef);