- Fixed some circular includes
- Documentation - File Declaration, TODO: Implementation
This commit is contained in:
@@ -24,6 +24,9 @@
|
||||
namespace fennec
|
||||
{
|
||||
|
||||
///
|
||||
/// \brief Struct for wrapping C++ `delete`
|
||||
/// \tparam TypeT The type of the buffer to be deleted
|
||||
template<typename TypeT>
|
||||
struct default_delete
|
||||
{
|
||||
@@ -48,6 +51,7 @@ struct default_delete
|
||||
}
|
||||
};
|
||||
|
||||
// Overload for Arrays
|
||||
template<typename TypeT>
|
||||
struct default_delete<TypeT[]>
|
||||
{
|
||||
@@ -58,13 +62,13 @@ struct default_delete<TypeT[]>
|
||||
///
|
||||
/// \brief Conversion Constructor
|
||||
/// \tparam ConvT of other deleter
|
||||
template<class ConvT> requires requires { is_convertible<ConvT(*)[], TypeT(*)[]>{}.value == true; }
|
||||
template<class ConvT> requires requires { is_convertible_v<ConvT(*)[], TypeT(*)[]> == true; }
|
||||
constexpr default_delete(const default_delete<ConvT(*)[]>&) noexcept {}
|
||||
|
||||
///
|
||||
/// \brief Function Call Operator, calls `delete` on `ptr`
|
||||
/// \param ptr Memory resource to delete
|
||||
template<class ArrT> requires requires { is_convertible<ArrT(*)[], TypeT(*)[]>{}.value == true; }
|
||||
template<class ArrT> requires requires { is_convertible_v<ArrT(*)[], TypeT(*)[]> == true; }
|
||||
constexpr void operator()(TypeT* ptr) const noexcept
|
||||
{
|
||||
static_assert(not is_void_v<TypeT>, "cannot delete a pointer to an incomplete type");
|
||||
@@ -73,6 +77,12 @@ struct default_delete<TypeT[]>
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
|
||||
///
|
||||
/// \brief
|
||||
/// \tparam TypeT
|
||||
/// \tparam DeleteT
|
||||
template<typename TypeT, class DeleteT = default_delete<TypeT>>
|
||||
class unique_ptr
|
||||
{
|
||||
@@ -118,11 +128,22 @@ public:
|
||||
/// \brief Default Constructor, if it owns a resource, it deletes it using `delete_t`
|
||||
constexpr ~unique_ptr() { if(_handle) _delete(_handle); }
|
||||
|
||||
constexpr unique_ptr& operator=(const unique_ptr&) = delete;
|
||||
|
||||
constexpr unique_ptr& operator=(unique_ptr&& r) noexcept
|
||||
{ _handle = r._handle; r._handle = nullptr; return *this; }
|
||||
{
|
||||
_delete = r._delete;
|
||||
_handle = r._handle;
|
||||
r._handle = nullptr;
|
||||
return *this;
|
||||
}
|
||||
|
||||
pointer_t release() { pointer_t retval = _handle; _handle = nullptr; return retval; }
|
||||
pointer_t release()
|
||||
{
|
||||
pointer_t retval = _handle;
|
||||
_handle = nullptr;
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
private:
|
||||
|
||||
Reference in New Issue
Block a user