summaryrefslogtreecommitdiffhomepage
path: root/src/kernel/NeKit/Ref.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/kernel/NeKit/Ref.h')
-rw-r--r--src/kernel/NeKit/Ref.h18
1 files changed, 14 insertions, 4 deletions
diff --git a/src/kernel/NeKit/Ref.h b/src/kernel/NeKit/Ref.h
index 25706437..62460568 100644
--- a/src/kernel/NeKit/Ref.h
+++ b/src/kernel/NeKit/Ref.h
@@ -12,6 +12,7 @@
#include <KernelKit/HeapMgr.h>
#include <NeKit/Config.h>
#include <NeKit/KernelPanic.h>
+#include <NeKit/Nullable.h>
#include <NeKit/Vettable.h>
namespace Kernel {
@@ -30,6 +31,13 @@ class Ref final {
Ref(Type* cls) : fClass(*cls) {}
Ref(Type cls) : fClass(cls) {}
+ Ref& operator=(nullPtr) { return *this; }
+
+ Ref& operator=(Type* ref) {
+ fClass = *ref;
+ return *this;
+ }
+
Ref& operator=(Type ref) {
fClass = ref;
return *this;
@@ -59,11 +67,13 @@ class NonNullRef final {
using RefType = Ref<T>;
using Type = T;
- NonNullRef() = delete;
- NonNullRef(nullPtr) = delete;
+ NonNullRef() = delete;
+
+ NonNullRef(Type* ref) : fRef(ref) {}
+
+ NonNullRef(nullPtr ref) = delete;
- NonNullRef(Type* ref) : fRef(ref) { MUST_PASS(ref); }
- NonNullRef(RefType ref) : fRef(ref) { MUST_PASS(ref); }
+ NonNullRef(RefType ref) : fRef(ref) {}
Ref<T>& operator->() {
MUST_PASS(fRef);