diff options
| author | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-05 11:12:42 +0100 |
|---|---|---|
| committer | Amlal El Mahrouss <amlalelmahrouss@icloud.com> | 2024-02-05 11:12:42 +0100 |
| commit | 81144dd05a7c01701c3bf7b04e345dccfef2bf82 (patch) | |
| tree | 163bd79816e97ca31484df86c008af3f9a803ffd /Private/NewKit | |
| parent | f8c9b81ff120160af60af6e9d44cba338aceb65a (diff) | |
HCR-11:
Kernel: Improvements and more.
Bootloader: Now works on real hardware (previous commit.)
Signed-off-by: Amlal El Mahrouss <amlalelmahrouss@icloud.com>
Diffstat (limited to 'Private/NewKit')
| -rw-r--r-- | Private/NewKit/OwnPtr.hpp | 77 |
1 files changed, 40 insertions, 37 deletions
diff --git a/Private/NewKit/OwnPtr.hpp b/Private/NewKit/OwnPtr.hpp index 72a37244..e24eba3e 100644 --- a/Private/NewKit/OwnPtr.hpp +++ b/Private/NewKit/OwnPtr.hpp @@ -11,57 +11,60 @@ #pragma once #include <NewKit/Defines.hpp> -#include <NewKit/RuntimeCheck.hpp> #include <NewKit/Ref.hpp> +#include <NewKit/RuntimeCheck.hpp> -namespace HCore -{ -template <typename T> class OwnPtr; +namespace HCore { +template <typename T> +class OwnPtr; -template <typename T> class NonNullRefPtr; +template <typename T> +class NonNullRefPtr; -template <typename T> class OwnPtr final -{ - public: - OwnPtr() {} - ~OwnPtr() { this->Delete(); } +template <typename T> +class OwnPtr final { + public: + OwnPtr() {} + ~OwnPtr() { this->Delete(); } - OwnPtr &operator=(const OwnPtr &) = default; - OwnPtr(const OwnPtr &) = default; + OwnPtr &operator=(const OwnPtr &) = default; + OwnPtr(const OwnPtr &) = default; - public: - template <typename... Args> bool New(Args &&...arg) - { - m_Cls = new T(arg...); - return m_Cls; + public: + template <typename... Args> + bool New(Args &&...arg) { + if (m_Cls) { + return false; } - void Delete() - { - if (m_Cls) - delete m_Cls; + m_Cls = new T(arg...); + return m_Cls; + } - m_Cls = nullptr; - } + void Delete() { + if (m_Cls) delete m_Cls; + + m_Cls = nullptr; + } - T *operator->() const { return m_Cls; }; - T *Raw() { return m_Cls; } + T *operator->() const { return m_Cls; }; + T *Raw() { return m_Cls; } - Ref<T> AsRef() { return Ref<T>(m_Cls); } + Ref<T> AsRef() { return Ref<T>(m_Cls); } - operator bool() { return m_Cls; } - bool operator!() { return !m_Cls; } + operator bool() { return m_Cls; } + bool operator!() { return !m_Cls; } - private: - T *m_Cls; + private: + T *m_Cls; }; -template <typename T, typename... Args> OwnPtr<T> make_ptr(Args... args) -{ - OwnPtr<T> ret; - ret.template New<Args...>(forward(args)...); - MUST_PASS(ret); +template <typename T, typename... Args> +OwnPtr<T> make_ptr(Args... args) { + OwnPtr<T> ret; + ret.template New<Args...>(forward(args)...); + MUST_PASS(ret); - return ret; + return ret; } -} // namespace HCore +} // namespace HCore |
