27 template<
typename UniqueStorage, concepts::Allocator Alloc>
35 template<
typename UniqueStorage, concepts::Allocator Alloc>
39template<concepts::Allocator Alloc = platform::DefaultAllocator>
55 template<
typename Any,
typename T,
typename... Args>
65 auto* pointer = *result;
68 self->m_pointer = pointer;
71 template<
typename T,
typename... Args>
76 self->m_pointer = pointer;
93 template<concepts::VTableFor<Interface> VTable>
97 dest_vtable = source_vtable;
102 if (self->m_pointer) {
103 auto const fp = vtable[
Manage {}];
104 fp(self, self->m_allocator);
105 self->m_pointer =
nullptr;
111 return static_cast<T*
>(m_pointer);
116 return static_cast<T const*
>(m_pointer);
120 constexpr explicit UniqueStorage(
void* pointer) : m_pointer(pointer) {}
122 void* m_pointer {
nullptr };
123 [[no_unique_address]] Alloc m_allocator {};
127 template<
typename UniqueStorage, concepts::Allocator Alloc>
130 auto* pointer = util::addressof(a);
Definition operations.h:11
Definition allocator.h:20
Definition vtable_for.h:17
constexpr auto unique_storage_manage
Definition unique_storage.h:36
StorageCategory
Definition storage_category.h:4
@ TriviallyRelocatable
Definition storage_category.h:7
meta::Type< AnyT< UserInterface, Storage, VTablePolicy > > Any
Definition any.h:294
constexpr auto exchange(T &object, U &&new_value) -> T
Definition exchange.h:8
constexpr auto destroy_at
Definition destroy_at.h:24
constexpr auto construct_at
Definition construct_at.h:27
constexpr auto as_fallible
Definition as_fallible.h:26
Unexpected(E &&) -> Unexpected< meta::UnwrapRefDecay< E > >
constexpr auto allocate_one
Definition allocate_one.h:29
constexpr auto destroy
Definition destroy.h:35
constexpr auto in_place_type
Definition in_place_type.h:12
constexpr auto deallocate_one
Definition deallocate_one.h:27
static constexpr auto storage_category() -> StorageCategory
Definition unique_storage.h:45
static constexpr void move_assign(VTable &dest_vtable, UniqueStorage *dest, VTable &source_vtable, UniqueStorage *source)
Definition unique_storage.h:94
static constexpr auto creation_is_fallible(InPlaceType< T >) -> bool
Definition unique_storage.h:48
static constexpr void create(InPlaceType< Any >, meta::LikeExpected< CreationResult< T >, Any > &self, InPlaceType< T >, Args &&... args)
Definition unique_storage.h:57
auto operator=(UniqueStorage const &) -> UniqueStorage &=default
meta::Type< detail::UniqueStorageManage< UniqueStorage, Alloc > > Manage
Definition unique_storage.h:42
static constexpr void move_construct(concepts::VTableFor< Interface > auto &vtable, UniqueStorage *dest, UniqueStorage *source)
Definition unique_storage.h:87
static constexpr auto init(UniqueStorage *self, InPlaceType< T >, Args &&... args)
Definition unique_storage.h:73
constexpr auto down_cast() -> T *
Definition unique_storage.h:110
meta::AllocatorResult< Alloc > CreationResult
Definition unique_storage.h:53
meta::List< Manage > Interface
Definition unique_storage.h:43
UniqueStorage(UniqueStorage const &)=default
constexpr auto down_cast() const -> T const *
Definition unique_storage.h:115
static constexpr void destroy(concepts::VTableFor< Interface > auto &vtable, UniqueStorage *self)
Definition unique_storage.h:101
Definition unique_storage.h:28
Method< UniqueStorageManage, void(This &, Alloc &)> Type
Definition unique_storage.h:29
constexpr void operator()(T &, Alloc &) const
Definition unique_storage.h:129
Definition in_place_type.h:5