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
35template <typename T>
41 constexpr delay_delete() noexcept = default;
42
48 template <typename U>
49 requires std::convertible_to<U*, T*>
50 delay_delete(const delay_delete<U>&) noexcept {}
51
60 void operator()(T* p) const noexcept {
61 request_delete(&delay_deleter, static_cast<void*>(p));
62 }
63
64private:
65 static void delay_deleter(void* p) {
66 T* target = reinterpret_cast<T*>(p);
67 auto allocator = get_allocator_of(target);
68 using altraits = std::allocator_traits<decltype(allocator)>;
69 altraits::destroy(allocator, target);
70 altraits::deallocate(allocator, target, 1);
71 }
72};
73} // namespace from
The main libER stand-in for ER allocator proxies.
Definition from_allocator.hpp:308
ELDEN RING allocation interface and from::allocator.
from::allocator< T > get_allocator_of(const T *p) noexcept
Get the allocator of an object allocated by ELDEN RING.
Definition from_allocator.hpp:426
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.
Delay deleter that models std::default_delete.
Definition from_delay_delete.hpp:36
void operator()(T *p) const noexcept
Request object deletion.
Definition from_delay_delete.hpp:60
constexpr delay_delete() noexcept=default
Default constructor.