From 16b082f00db2a610546fe76e39744a6faeb48849 Mon Sep 17 00:00:00 2001 From: Deukhoofd Date: Mon, 30 Mar 2020 17:58:11 +0200 Subject: [PATCH] Allow borrowing as nonnull or optional pointers. --- src/Memory/NonNullOwnPtr.hpp | 11 +++++------ src/Memory/OwnPtr.hpp | 3 +++ 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/src/Memory/NonNullOwnPtr.hpp b/src/Memory/NonNullOwnPtr.hpp index d62bc2e..2e9bf6c 100644 --- a/src/Memory/NonNullOwnPtr.hpp +++ b/src/Memory/NonNullOwnPtr.hpp @@ -3,14 +3,14 @@ #include "../Assert.hpp" #include "NonNullBorrowedPtr.hpp" -#include "OwnPtr.hpp" +#include "BorrowedPtr.hpp" namespace Arbutils::Memory { template class NonNullOwnPtr { T* _ptr; public: - inline NonNullOwnPtr() {}; + inline NonNullOwnPtr(){}; inline NonNullOwnPtr(T* ptr) : _ptr(ptr) { AssertNotNull(ptr); }; NonNullOwnPtr(const NonNullOwnPtr&) = delete; @@ -21,10 +21,9 @@ namespace Arbutils::Memory { inline constexpr const T* GetUnsafe() const noexcept { return _ptr; } inline NonNullBorrowedPtr Borrow() { return NonNullBorrowedPtr(_ptr); } - - inline const NonNullBorrowedPtr Borrow() const{ - return NonNullBorrowedPtr(_ptr); - } + inline const NonNullBorrowedPtr Borrow() const { return NonNullBorrowedPtr(_ptr); } + inline BorrowedPtr BorrowOptional() { return BorrowedPtr(_ptr); } + inline const BorrowedPtr BorrowOptional() const { return BorrowedPtr(_ptr); } T* operator->() noexcept { return _ptr; } const T* operator->() const noexcept { return _ptr; } diff --git a/src/Memory/OwnPtr.hpp b/src/Memory/OwnPtr.hpp index 93594ac..4d6994a 100644 --- a/src/Memory/OwnPtr.hpp +++ b/src/Memory/OwnPtr.hpp @@ -3,6 +3,7 @@ #include #include "BorrowedPtr.hpp" +#include "NonNullBorrowedPtr.hpp" namespace Arbutils::Memory { template class OwnPtr { @@ -22,6 +23,8 @@ namespace Arbutils::Memory { inline BorrowedPtr Borrow() { return BorrowedPtr(_ptr); } inline const BorrowedPtr Borrow() const { return BorrowedPtr(_ptr); } + inline BorrowedPtr BorrowNonNull() { return NonNullBorrowedPtr(_ptr); } + inline const BorrowedPtr BorrowNonNull() const { return NonNullBorrowedPtr(_ptr); } T* operator->() noexcept { return _ptr; } const T* operator->() const noexcept { return _ptr; }