Iros
 
Loading...
Searching...
No Matches
di::any::HybridStorage< category, inline_size, inline_align, Alloc > Struct Template Reference

#include <di/any/storage/hybrid_storage.h>

Public Types

using Manage = meta::Type<detail::HybridStorageManage<HybridStorage, Alloc>>
 
using Interface = meta::List<Manage>
 
template<typename T>
using CreationResult
 

Public Member Functions

 HybridStorage ()=default
 
 HybridStorage (HybridStorage const &)=delete
 
auto operator= (HybridStorage const &) -> HybridStorage &=delete
 
 ~HybridStorage ()=default
 
template<typename T>
constexpr auto down_cast () -> T *
 
template<typename T>
constexpr auto down_cast () const -> T const *
 

Static Public Member Functions

static constexpr auto storage_category () -> StorageCategory
 
template<typename T>
static constexpr auto creation_is_inline (InPlaceType< T >) -> bool
 
template<typename T>
static constexpr auto creation_is_fallible (InPlaceType< T >) -> bool
 
template<typename Any, typename T, typename... Args>
requires (concepts::ConstructibleFrom<T, Args...> && creation_is_fallible(in_place_type<T>))
static constexpr void create (InPlaceType< Any >, meta::LikeExpected< CreationResult< T >, Any > &self, InPlaceType< T >, Args &&... args)
 
template<typename T, typename... Args>
requires (concepts::ConstructibleFrom<T, Args...>)
static constexpr auto init (HybridStorage *self, InPlaceType< T >, Args &&... args)
 
static constexpr void move_construct (concepts::VTableFor< Interface > auto &vtable, HybridStorage *dest, HybridStorage *source)
 
template<concepts::VTableFor< Interface > VTable>
requires (category == StorageCategory::MoveOnly)
static constexpr void move_assign (VTable &dest_vtable, HybridStorage *dest, VTable &source_vtable, HybridStorage *source)
 
static constexpr void destroy (concepts::VTableFor< Interface > auto &vtable, HybridStorage *self)
 

Friends

template<typename, concepts::Allocator>
struct detail::HybridStorageManage
 

Member Typedef Documentation

◆ CreationResult

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<typename T>
using di::any::HybridStorage< category, inline_size, inline_align, Alloc >::CreationResult
Initial value:
detail::ConditionalHelper< value, T, U >::Type Conditional
Definition core.h:88
meta::LikeExpected< decltype(di::allocate(util::declval< Alloc & >(), 0, 0)), T > AllocatorResult
Definition allocator.h:25
constexpr auto in_place_type
Definition in_place_type.h:12
static constexpr auto creation_is_fallible(InPlaceType< T >) -> bool
Definition hybrid_storage.h:60

◆ Interface

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
using di::any::HybridStorage< category, inline_size, inline_align, Alloc >::Interface = meta::List<Manage>

◆ Manage

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
using di::any::HybridStorage< category, inline_size, inline_align, Alloc >::Manage = meta::Type<detail::HybridStorageManage<HybridStorage, Alloc>>

Constructor & Destructor Documentation

◆ HybridStorage() [1/2]

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
di::any::HybridStorage< category, inline_size, inline_align, Alloc >::HybridStorage ( )
default

◆ HybridStorage() [2/2]

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
di::any::HybridStorage< category, inline_size, inline_align, Alloc >::HybridStorage ( HybridStorage< category, inline_size, inline_align, Alloc > const & )
delete

◆ ~HybridStorage()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
di::any::HybridStorage< category, inline_size, inline_align, Alloc >::~HybridStorage ( )
default

Member Function Documentation

◆ create()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<typename Any, typename T, typename... Args>
requires (concepts::ConstructibleFrom<T, Args...> && creation_is_fallible(in_place_type<T>))
static constexpr void di::any::HybridStorage< category, inline_size, inline_align, Alloc >::create ( InPlaceType< Any > ,
meta::LikeExpected< CreationResult< T >, Any > & self,
InPlaceType< T > ,
Args &&... args )
inlinestaticconstexpr

◆ creation_is_fallible()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<typename T>
static constexpr auto di::any::HybridStorage< category, inline_size, inline_align, Alloc >::creation_is_fallible ( InPlaceType< T > ) -> bool
inlinestaticconstexpr

◆ creation_is_inline()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<typename T>
static constexpr auto di::any::HybridStorage< category, inline_size, inline_align, Alloc >::creation_is_inline ( InPlaceType< T > ) -> bool
inlinestaticconstexpr

◆ destroy()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
static constexpr void di::any::HybridStorage< category, inline_size, inline_align, Alloc >::destroy ( concepts::VTableFor< Interface > auto & vtable,
HybridStorage< category, inline_size, inline_align, Alloc > * self )
inlinestaticconstexpr

◆ down_cast() [1/2]

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<typename T>
auto di::any::HybridStorage< category, inline_size, inline_align, Alloc >::down_cast ( ) -> T*
inlineconstexpr

◆ down_cast() [2/2]

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<typename T>
auto di::any::HybridStorage< category, inline_size, inline_align, Alloc >::down_cast ( ) const -> T const*
inlineconstexpr

◆ init()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<typename T, typename... Args>
requires (concepts::ConstructibleFrom<T, Args...>)
static constexpr auto di::any::HybridStorage< category, inline_size, inline_align, Alloc >::init ( HybridStorage< category, inline_size, inline_align, Alloc > * self,
InPlaceType< T > ,
Args &&... args )
inlinestaticconstexpr

◆ move_assign()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<concepts::VTableFor< Interface > VTable>
requires (category == StorageCategory::MoveOnly)
static constexpr void di::any::HybridStorage< category, inline_size, inline_align, Alloc >::move_assign ( VTable & dest_vtable,
HybridStorage< category, inline_size, inline_align, Alloc > * dest,
VTable & source_vtable,
HybridStorage< category, inline_size, inline_align, Alloc > * source )
inlinestaticconstexpr

◆ move_construct()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
static constexpr void di::any::HybridStorage< category, inline_size, inline_align, Alloc >::move_construct ( concepts::VTableFor< Interface > auto & vtable,
HybridStorage< category, inline_size, inline_align, Alloc > * dest,
HybridStorage< category, inline_size, inline_align, Alloc > * source )
inlinestaticconstexpr

◆ operator=()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
auto di::any::HybridStorage< category, inline_size, inline_align, Alloc >::operator= ( HybridStorage< category, inline_size, inline_align, Alloc > const & ) -> HybridStorage &=delete
delete

◆ storage_category()

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
static constexpr auto di::any::HybridStorage< category, inline_size, inline_align, Alloc >::storage_category ( ) -> StorageCategory
inlinestaticconstexpr

Friends And Related Symbol Documentation

◆ detail::HybridStorageManage

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
template<typename, concepts::Allocator>
friend struct detail::HybridStorageManage
friend

Member Data Documentation

◆ m_pointer

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
void* di::any::HybridStorage< category, inline_size, inline_align, Alloc >::m_pointer { nullptr }

◆ m_storage

template<StorageCategory category = StorageCategory::MoveOnly, size_t inline_size = 2 * sizeof(void*), size_t inline_align = alignof(void*), concepts::Allocator Alloc = platform::DefaultAllocator>
byte di::any::HybridStorage< category, inline_size, inline_align, Alloc >::m_storage[inline_size]

The documentation for this struct was generated from the following file: