Blender  V3.3
Public Member Functions | Static Public Attributes | List of all members
blender::Any< ExtraInfo, InlineBufferCapacity, Alignment > Class Template Reference

#include <BLI_any.hh>

Public Member Functions

 Any ()=default
 
 Any (const Any &other)
 
 Any (Any &&other) noexcept
 
template<typename T , typename... Args>
 Any (std::in_place_type_t< T >, Args &&...args)
 
template<typename T , BLI_ENABLE_IF((!is_same_any_v< T >)) >
 Any (T &&value)
 
 ~Any ()
 
Anyoperator= (const Any &other)
 
template<typename T >
Anyoperator= (T &&other)
 
void reset ()
 
 operator bool () const
 
bool has_value () const
 
template<typename T , typename... Args>
std::decay_t< T > & emplace (Args &&...args)
 
template<typename T , typename... Args>
std::decay_t< T > & emplace_on_empty (Args &&...args)
 
template<typename T >
bool is () const
 
voidget ()
 
const voidget () const
 
template<typename T >
std::decay_t< T > & get ()
 
template<typename T >
const std::decay_t< T > & get () const
 
const RealExtraInfo & extra_info () const
 

Static Public Attributes

template<typename T >
static constexpr bool is_allowed_v = std::is_copy_constructible_v<T>
 
template<typename T >
static constexpr bool is_inline_v
 
template<typename T >
static constexpr bool is_same_any_v = std::is_same_v<std::decay_t<T>, Any>
 

Detailed Description

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
class blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >

Definition at line 96 of file BLI_any.hh.

Constructor & Destructor Documentation

◆ Any() [1/5]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::Any ( )
default

◆ Any() [2/5]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::Any ( const Any< ExtraInfo, InlineBufferCapacity, Alignment > &  other)
inline

◆ Any() [3/5]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::Any ( Any< ExtraInfo, InlineBufferCapacity, Alignment > &&  other)
inlinenoexcept
Note
The #other Any will not be empty afterwards if it was not before. Just its value is in a moved-from state.

Definition at line 169 of file BLI_any.hh.

References blender::detail::AnyTypeInfo< ExtraInfo >::move_construct.

◆ Any() [4/5]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T , typename... Args>
blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::Any ( std::in_place_type_t< T ,
Args &&...  args 
)
inlineexplicit

Constructs a new Any that contains the given type T from #args. The #std::in_place_type_t is used to disambiguate this and the copy/move constructors.

Definition at line 185 of file BLI_any.hh.

◆ Any() [5/5]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T , BLI_ENABLE_IF((!is_same_any_v< T >)) >
blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::Any ( T &&  value)
inline

Constructs a new Any that contains the given value.

Definition at line 194 of file BLI_any.hh.

◆ ~Any()

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::~Any ( )
inline

Member Function Documentation

◆ emplace()

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T , typename... Args>
std::decay_t<T>& blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::emplace ( Args &&...  args)
inline

◆ emplace_on_empty()

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T , typename... Args>
std::decay_t<T>& blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::emplace_on_empty ( Args &&...  args)
inline

◆ extra_info()

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
const RealExtraInfo& blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::extra_info ( ) const
inline

Get extra information that has been stored for the contained type.

Definition at line 330 of file BLI_any.hh.

References BLI_assert, and blender::detail::AnyTypeInfo< ExtraInfo >::extra_info.

Referenced by blender::GVArrayCommon::impl_from_storage(), and blender::VArrayCommon< T >::impl_from_storage().

◆ get() [1/4]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
void* blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::get ( )
inline

◆ get() [2/4]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T >
std::decay_t<T>& blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::get ( )
inline

Get a reference to the stored value. This invokes undefined behavior when T does not have the correct type.

Definition at line 311 of file BLI_any.hh.

References BLI_assert, and blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::get().

◆ get() [3/4]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
const void* blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::get ( ) const
inline

Get a pointer to the stored value.

Definition at line 298 of file BLI_any.hh.

References BLI_assert, and blender::detail::AnyTypeInfo< ExtraInfo >::get.

◆ get() [4/4]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T >
const std::decay_t<T>& blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::get ( ) const
inline

Get a reference to the stored value. This invokes undefined behavior when T does not have the correct type.

Definition at line 321 of file BLI_any.hh.

References BLI_assert, and blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::get().

◆ has_value()

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
bool blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::has_value ( ) const
inline

◆ is()

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T >
bool blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::is ( ) const
inline

Return true when the value that is currently stored is a T.

Definition at line 282 of file BLI_any.hh.

◆ operator bool()

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::operator bool ( ) const
inline

◆ operator=() [1/2]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
Any& blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::operator= ( const Any< ExtraInfo, InlineBufferCapacity, Alignment > &  other)
inline
Note
Only needed because the template below does not count as copy assignment operator.

Definition at line 210 of file BLI_any.hh.

References blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::Any(), and blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::~Any().

◆ operator=() [2/2]

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T >
Any& blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::operator= ( T &&  other)
inline

◆ reset()

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
void blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::reset ( )
inline

Destruct any existing value to make it empty.

Definition at line 234 of file BLI_any.hh.

References blender::detail::AnyTypeInfo< ExtraInfo >::destruct.

Member Data Documentation

◆ is_allowed_v

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T >
constexpr bool blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::is_allowed_v = std::is_copy_constructible_v<T>
inlinestaticconstexpr

Only copy constructible types can be stored in Any.

Definition at line 119 of file BLI_any.hh.

◆ is_inline_v

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T >
constexpr bool blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::is_inline_v
inlinestaticconstexpr
Initial value:
= std::is_nothrow_move_constructible_v<T> &&
sizeof(T) <= InlineBufferCapacity &&
alignof(T) <= Alignment
#define T

Checks if the type will be stored in the inline buffer or if it requires a separate allocation.

Definition at line 126 of file BLI_any.hh.

◆ is_same_any_v

template<typename ExtraInfo = void, size_t InlineBufferCapacity = 8, size_t Alignment = 8>
template<typename T >
constexpr bool blender::Any< ExtraInfo, InlineBufferCapacity, Alignment >::is_same_any_v = std::is_same_v<std::decay_t<T>, Any>
inlinestaticconstexpr

Checks if T is the same type as this Any, because in this case the behavior of e.g. the assignment operator is different.

Definition at line 135 of file BLI_any.hh.


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