NeKernel dev
Loading...
Searching...
No Matches
Ref.h
Go to the documentation of this file.
1
2/* -------------------------------------------
3
4 Copyright (C) 2024-2025, Amlal El Mahrouss, all rights reserved.
5
6------------------------------------------- */
7
8#ifndef _NEWKIT_REF_H_
9#define _NEWKIT_REF_H_
10
12#include <KernelKit/HeapMgr.h>
13#include <NeKit/Defines.h>
14#include <NeKit/KernelPanic.h>
15
16namespace Kernel {
17template <typename T>
18class Ref final {
19 public:
20 explicit Ref() = default;
21 ~Ref() = default;
22
23 public:
24 Ref(T* cls) : fClass(*cls) {}
25 Ref(T cls) : fClass(cls) {}
26
27 Ref& operator=(T ref) {
28 fClass = ref;
29 return *this;
30 }
31
33
34 public:
35 T operator->() const { return fClass; }
36
37 T& Leak() noexcept { return fClass; }
38
39 T& TryLeak() const noexcept { return fClass; }
40
41 T operator*() { return fClass; }
42
43 operator bool() noexcept { return true; }
44
45 private:
47};
48
49template <typename T>
50class NonNullRef final {
51 public:
52 NonNullRef() = delete;
54
55 NonNullRef(T* ref) : fRef(ref) { MUST_PASS(ref); }
56
59 return fRef;
60 }
61
62 NonNullRef& operator=(const NonNullRef<T>& ref) = delete;
63 NonNullRef(const NonNullRef<T>& ref) = default;
64
65 private:
67};
68} // namespace Kernel
69
70#endif // ifndef _NEWKIT_REF_H_
: Memory allocation support for the NeKernel.
#define MUST_PASS(EXPR)
Definition KernelPanic.h:40
NonNullRef(const NonNullRef< T > &ref)=default
NonNullRef(T *ref)
Definition Ref.h:55
Ref< T > & operator->()
Definition Ref.h:57
Ref< T > fRef
Definition Ref.h:66
NonNullRef & operator=(const NonNullRef< T > &ref)=delete
NonNullRef(nullPtr)=delete
Definition Ref.h:18
Ref(T cls)
Definition Ref.h:25
Ref & operator=(T ref)
Definition Ref.h:27
T & Leak() noexcept
Definition Ref.h:37
T & TryLeak() const noexcept
Definition Ref.h:39
Ref(T *cls)
Definition Ref.h:24
~Ref()=default
Ref()=default
USER_PROCESS fClass
Definition Ref.h:46
T operator->() const
Definition Ref.h:35
T operator*()
Definition Ref.h:41
NE_COPY_DEFAULT(Ref)
USER_PROCESS inline definitions.
Definition Qr.h:793
decltype(nullptr) nullPtr
Definition Defines.h:34