19#ifndef FENNEC_MEMORY_POINTERS_H
20#define FENNEC_MEMORY_POINTERS_H
31template<
typename TypeT>
48 static_assert(not is_void_v<TypeT>,
"cannot delete a pointer to an incomplete type");
49 static_assert(is_complete_v<TypeT>,
"cannot delete a pointer to an incomplete type");
55template<
typename TypeT>
56struct default_delete<TypeT[]>
65 template<class ConvT> requires requires { is_convertible_v<ConvT(*)[], TypeT(*)[]> ==
true; }
71 template<
class ArrT>
requires requires {
is_convertible_v<ArrT(*)[], TypeT(*)[]> ==
true; }
72 constexpr void operator()(TypeT* ptr)
const noexcept {
73 static_assert(not is_void_v<TypeT>,
"cannot delete a pointer to an incomplete type");
74 static_assert(is_complete_v<TypeT>,
"cannot delete a pointer to an incomplete type");
85template<
typename TypeT,
class DeleteT = default_delete<TypeT>>
122 : _handle(other._handle) {
123 other._handle =
nullptr;
151 void reset(nullptr_t =
nullptr) {
169 return _handle ==
nullptr;
180 operator bool()
const {
181 return _handle !=
nullptr;
196template<
typename TypeT,
typename...ArgsT>
197unique_ptr<TypeT> make_unique(ArgsT&&...args) {
198 return unique_ptr<TypeT>(
new TypeT(fennec::forward<ArgsT>(args)...));
constexpr unique_ptr(nullptr_t) noexcept
Nullptr Constructor, creates a unique_ptr that owns nothing.
Definition pointers.h:107
DeleteT delete_t
the deleter
Definition pointers.h:99
constexpr unique_ptr(unique_ptr &&other)
Move Constructor, transfers ownership from other
Definition pointers.h:121
TypeT element_t
the element type
Definition pointers.h:90
const element_t * const_pointer_t
pointer to element type
Definition pointers.h:96
constexpr ~unique_ptr()
Default Constructor, if it owns a resource, it deletes it using delete_t
Definition pointers.h:131
constexpr unique_ptr()
Default Constructor, creates a unique_ptr that owns nothing.
Definition pointers.h:103
element_t * pointer_t
pointer to element type
Definition pointers.h:93
constexpr unique_ptr(pointer_t ptr, const delete_t &del=delete_t())
Pointer Constructor, creates a unique_ptr that owns ptr with deleter del
Definition pointers.h:113
Struct for wrapping C++ delete
Definition pointers.h:33
constexpr void operator()(TypeT *ptr) const noexcept
Function Call Operator, calls delete on ptr
Definition pointers.h:47
constexpr default_delete() noexcept=default
Default constructor.
constexpr default_delete(const default_delete< ConvT > &) noexcept
Conversion Constructor.
Definition pointers.h:42
static constexpr IntT value
value of the constant
Definition constants.h:79
Check if type T0 can be converted T1
Definition type_traits.h:1064
constexpr bool_t is_convertible_v
Shorthand for can_convert<TypeT0, TypeT1>::value
Definition type_traits.h:1070
decltype(nullptr) nullptr_t
Null Pointer Type.
Definition types.h:245