Adds helper functions for ScopedPtr
continuous-integration/drone/push Build is passing
Details
continuous-integration/drone/push Build is passing
Details
This commit is contained in:
parent
b58b8537b5
commit
54c5422cda
|
@ -43,15 +43,14 @@ namespace ArbUt {
|
||||||
/// @brief Return whether the pointer is null or not.
|
/// @brief Return whether the pointer is null or not.
|
||||||
[[nodiscard]] inline bool HasValue() const noexcept { return _raw != nullptr; }
|
[[nodiscard]] inline bool HasValue() const noexcept { return _raw != nullptr; }
|
||||||
|
|
||||||
/// @brief Get the raw underlying pointer.
|
/// @brief Get the raw underlying pointer, and take ownership of it. This removes the existing pointer in here.
|
||||||
inline T* GetValue() const noexcept { return _raw; }
|
|
||||||
|
|
||||||
/// @brief Get the raw underlying pointer.
|
|
||||||
inline T* TakeOwnership() noexcept {
|
inline T* TakeOwnership() noexcept {
|
||||||
auto raw = _raw;
|
auto raw = _raw;
|
||||||
_raw = nullptr;
|
_raw = nullptr;
|
||||||
return raw;
|
return raw;
|
||||||
}
|
}
|
||||||
|
/// @brief Get the raw underlying pointer, without taking ownership of it.
|
||||||
|
inline T* GetValue() noexcept { return _raw; }
|
||||||
|
|
||||||
/// @brief Check equality of two ScopedPtr objects
|
/// @brief Check equality of two ScopedPtr objects
|
||||||
inline bool operator==(const OptionalScopedPtr& rhs) const noexcept { return _raw == rhs._raw; }
|
inline bool operator==(const OptionalScopedPtr& rhs) const noexcept { return _raw == rhs._raw; }
|
||||||
|
@ -61,6 +60,8 @@ namespace ArbUt {
|
||||||
inline bool operator!=(const OptionalScopedPtr& rhs) const noexcept { return _raw != rhs._raw; }
|
inline bool operator!=(const OptionalScopedPtr& rhs) const noexcept { return _raw != rhs._raw; }
|
||||||
/// @brief Check equality of pointers
|
/// @brief Check equality of pointers
|
||||||
inline bool operator!=(T* rhs) const noexcept { return _raw != rhs; }
|
inline bool operator!=(T* rhs) const noexcept { return _raw != rhs; }
|
||||||
|
/// @brief Implicit cast to retrieve optional borrowed pointer.
|
||||||
|
inline operator OptionalBorrowedPtr<T>() const noexcept { return _raw; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -48,12 +48,14 @@ namespace ArbUt {
|
||||||
/// @brief Operator for access into underlying pointer.
|
/// @brief Operator for access into underlying pointer.
|
||||||
inline T* operator->() const noexcept { return _raw; }
|
inline T* operator->() const noexcept { return _raw; }
|
||||||
|
|
||||||
/// @brief Get the raw underlying pointer.
|
/// @brief Get the raw underlying pointer, and take ownership of it. This removes the existing pointer in here.
|
||||||
inline T* TakeOwnership() noexcept {
|
inline T* TakeOwnership() noexcept {
|
||||||
auto raw = _raw;
|
auto raw = _raw;
|
||||||
_raw = nullptr;
|
_raw = nullptr;
|
||||||
return raw;
|
return raw;
|
||||||
}
|
}
|
||||||
|
/// @brief Get the raw underlying pointer, without taking ownership of it.
|
||||||
|
inline T* GetValue() noexcept { return _raw; }
|
||||||
|
|
||||||
/// @brief Delete comparison with nullptr, ScopedPtr can't be null
|
/// @brief Delete comparison with nullptr, ScopedPtr can't be null
|
||||||
inline bool operator==(std::nullptr_t) const = delete;
|
inline bool operator==(std::nullptr_t) const = delete;
|
||||||
|
@ -68,6 +70,10 @@ namespace ArbUt {
|
||||||
|
|
||||||
/// @brief Implicit cast to retrieve raw pointer.
|
/// @brief Implicit cast to retrieve raw pointer.
|
||||||
inline operator T*() const noexcept { return _raw; }
|
inline operator T*() const noexcept { return _raw; }
|
||||||
|
/// @brief Implicit cast to retrieve borrowed ptr.
|
||||||
|
inline operator BorrowedPtr<T>() const noexcept { return _raw; }
|
||||||
|
/// @brief Implicit cast to retrieve optional borrowed pointer.
|
||||||
|
inline operator OptionalBorrowedPtr<T>() const noexcept { return _raw; }
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,11 @@
|
||||||
|
#ifdef TESTS_BUILD
|
||||||
|
#include "../extern/doctest.hpp"
|
||||||
|
#include "../src/Memory/Memory.hpp"
|
||||||
|
using namespace ArbUt;
|
||||||
|
|
||||||
|
TEST_CASE("Scoped Pointer deletes child after out of scope") {
|
||||||
|
auto a = ScopedPtr<uint32_t>(new uint32_t(100));
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue