libER 0.1.4.2
ELDEN RING API library
Loading...
Searching...
No Matches
from_delay_delete.hpp
Go to the documentation of this file.
1
9#pragma once
10
11#include <concepts>
13#include <memory>
14
15namespace from {
20using delay_deleter = void (*)(void*);
21
28LIBERAPI void request_delete(delay_deleter deleter, void* p);
29
36template <typename T, typename AllocatorTag>
37class delay_delete : private from::allocator<T, AllocatorTag> {
39
40 const base_type& base() const noexcept {
41 return static_cast<const base_type&>(*this);
42 }
43
44public:
45 delay_delete() noexcept : base_type() {}
46
51 delay_delete(const delay_delete&) noexcept : base_type() {}
52
58
64 template <typename U>
65 requires std::convertible_to<U*, T*>
67
73 template <typename U>
74 requires std::convertible_to<U*, T*>
76
82 return *this;
83 }
84
90 template <typename U>
91 requires std::convertible_to<U*, T*>
93 return *this;
94 }
95
101 return *this;
102 }
103
109 template <typename U>
110 requires std::convertible_to<U*, T*>
112 return *this;
113 }
114
123 void operator()(T* p) const noexcept {
125 [](void* p) {
126 base_type proxy_allocator;
127 std::allocator_traits<base_type>::destroy(proxy_allocator,
128 reinterpret_cast<T*>(p));
129 proxy_allocator.deallocate(reinterpret_cast<T*>(p), 1);
130 },
131 p);
132 }
133};
134
135// TODO: implement
140template <typename T, typename AllocatorTag>
141class delay_delete<T[], AllocatorTag> {};
142} // namespace from
The main libER stand-in for ER allocator proxies.
Definition from_allocator.hpp:310
void deallocate(T *p, size_type n=0)
Deallocate previously allocated memory.
Definition from_allocator.hpp:399
Delay deleter that models std::default_delete.
Definition from_delay_delete.hpp:37
delay_delete(const delay_delete< U, AllocatorTag > &) noexcept
Copy template constructor.
Definition from_delay_delete.hpp:66
delay_delete & operator=(delay_delete< U, AllocatorTag > &&) noexcept
Move template assignment operator.
Definition from_delay_delete.hpp:111
delay_delete & operator=(const delay_delete &) noexcept
Copy assignment operator.
Definition from_delay_delete.hpp:81
delay_delete(const delay_delete &) noexcept
Copy constructor.
Definition from_delay_delete.hpp:51
delay_delete & operator=(delay_delete &&) noexcept
Move assignment operator.
Definition from_delay_delete.hpp:100
void operator()(T *p) const noexcept
Request object deletion.
Definition from_delay_delete.hpp:123
delay_delete & operator=(const delay_delete< U, AllocatorTag > &) noexcept
Copy template assignment operator.
Definition from_delay_delete.hpp:92
delay_delete(delay_delete &&) noexcept
Move constructor.
Definition from_delay_delete.hpp:57
delay_delete(delay_delete< U, AllocatorTag > &&) noexcept
Move template constructor.
Definition from_delay_delete.hpp:75
ELDEN RING allocation interface and from::allocator.
void(*)(void *) delay_deleter
Signature of the function called when an object is to be deleted.
Definition from_delay_delete.hpp:20
LIBERAPI void request_delete(delay_deleter deleter, void *p)
Request deletion of an object.