NeKernel dev
Loading...
Searching...
No Matches
OwnPtr.h
Go to the documentation of this file.
1
2/* ========================================
3
4 Copyright (C) 2024-2025, Amlal El Mahrouss, licensed under the Apache 2.0 license.
5
6======================================== */
7
8#pragma once
9
10#include <NeKit/Config.h>
11#include <NeKit/ErrorOr.h>
12#include <NeKit/KernelPanic.h>
13#include <NeKit/Ref.h>
14
15namespace Kernel {
16template <typename T>
17class OwnPtr;
18
19template <typename T>
21
22template <typename T>
23class OwnPtr final {
24 public:
25 OwnPtr() = default;
26 ~OwnPtr() { this->Reset(); }
27
28 OwnPtr& operator=(const OwnPtr&) = default;
29 OwnPtr(const OwnPtr&) = default;
30
31 public:
32 template <typename... Args>
33 bool New(Args&&... arg) {
34 if (fCls) {
35 return false;
36 }
37
38 fCls = new T(arg...);
39 return fCls;
40 }
41
42 void Reset() {
43 if (fCls) delete fCls;
44 fCls = nullptr;
45 }
46
47 T* operator->() const { return fCls; }
48
49 T* Raw() { return fCls; }
50
51 Ref<T> AsRef() { return Ref<T>(fCls); }
52
53 explicit operator bool() { return fCls; }
54 bool operator!() { return !fCls; }
55
56 private:
57 T* fCls{nullptr};
58};
59
60template <typename T>
62
63template <typename T, typename... Args>
64inline OwnPtr<T> make_ptr(Args&&... args) {
65 OwnPtr<T> ret;
66 ret.template New<Args...>(forward(args)...);
67
68 return ret;
69}
70} // namespace Kernel
REF_TYPE * Ref
Definition System.h:28
ErrorOr class for error handling.
Definition ErrorOr.h:22
Definition OwnPtr.h:20
Definition OwnPtr.h:23
OwnPtr()=default
~OwnPtr()
Definition OwnPtr.h:26
T * operator->() const
Definition OwnPtr.h:47
bool operator!()
Definition OwnPtr.h:54
bool New(Args &&... arg)
Definition OwnPtr.h:33
void Reset()
Definition OwnPtr.h:42
OwnPtr(const OwnPtr &)=default
T * fCls
Definition OwnPtr.h:57
OwnPtr & operator=(const OwnPtr &)=default
T * Raw()
Definition OwnPtr.h:49
Ref< T > AsRef()
Definition OwnPtr.h:51
Reference wrapper class. /// =========================================================== ///.
Definition Ref.h:22
UPS inline definitions.
Definition Device.h:12
Args && forward(Args &arg)
Forward object.
Definition Config.h:101
ErrorOr< OwnPtr< T > > OwnOr
Definition OwnPtr.h:61
OwnPtr< T > make_ptr(Args &&... args)
Definition OwnPtr.h:64