libebml_ng
Public Member Functions | Protected Member Functions | Protected Attributes | Friends | List of all members
ebml::ebml_shared_ptr< T > Class Template Reference

A drop-in replacement for std::shared_ptr tailored for EBML objects. More...

#include <ptrs.h>

Public Member Functions

 ebml_shared_ptr ()
 
 ebml_shared_ptr (const std::nullptr_t &)
 
 ebml_shared_ptr (T *ptr)
 Constructs an ebml_shared_ptr that takes ownership of ptr. More...
 
 ebml_shared_ptr (const ebml_shared_ptr< T > &other)
 
template<class U >
 ebml_shared_ptr (const ebml_shared_ptr< U > &other)
 
 ebml_shared_ptr (ebml_shared_ptr< T > &&other)
 
 ~ebml_shared_ptr ()
 
ebml_shared_ptr< T > & operator= (const ebml_shared_ptr< T > &other)
 
ebml_shared_ptr< T > & operator= (ebml_shared_ptr< T > &&other)
 
ebml_shared_ptr< T > & operator= (const std::nullptr_t &)
 
bool operator== (const std::nullptr_t &) const
 
bool operator== (const ebml_shared_ptr< T > &other) const
 
template<typename U >
std::enable_if_t<!std::is_same< T, U >::value, ebml_shared_ptr< T > & > operator= (const ebml_shared_ptr< U > &other)
 
void swap (ebml_shared_ptr< T > &other)
 
T * get () const
 Retrieves the raw pointer to the managed object. More...
 
T & operator* () const
 
T * operator-> () const
 
 operator bool () const
 
int use_count () const
 

Protected Member Functions

 ebml_shared_ptr (control_block *ctl, T *ptr)
 
 ebml_shared_ptr (control_block *ctl, T *ptr, const std::unique_lock< std::mutex > &)
 

Protected Attributes

std::mutex mutex
 
control_blockctl = nullptr
 
T * ptr = nullptr
 

Friends

template<typename U >
class ebml_shared_ptr
 
template<typename U >
class ebml_weak_ptr
 
template<typename U , typename V >
ebml_shared_ptr< U > ebml_dynamic_pointer_cast (const ebml_shared_ptr< V > &)
 
template<typename U , typename V >
ebml_shared_ptr< U > ebml_dynamic_pointer_cast (ebml_shared_ptr< V > &&)
 
template<typename U , typename V >
ebml_shared_ptr< U > ebml_static_pointer_cast (const ebml_shared_ptr< V > &)
 
template<typename U , typename V >
ebml_shared_ptr< U > ebml_static_pointer_cast (ebml_shared_ptr< V > &&)
 
template<typename U , typename V >
ebml_shared_ptr< U > ebml_const_pointer_cast (const ebml_shared_ptr< V > &)
 
template<typename U , typename V >
ebml_shared_ptr< U > ebml_const_pointer_cast (ebml_shared_ptr< V > &&)
 

Detailed Description

template<typename T>
class ebml::ebml_shared_ptr< T >

A drop-in replacement for std::shared_ptr tailored for EBML objects.

This custom smart pointer, ebml_shared_ptr, is designed to mimic the behavior of std::shared_ptr while supporting a unique lifetime management scheme required by the EBML library.

Key Features and Usage Guidelines:

Note for Subclassing:

Template Parameters
TThe type of the object being managed.

Constructor & Destructor Documentation

◆ ebml_shared_ptr() [1/8]

template<typename T>
ebml::ebml_shared_ptr< T >::ebml_shared_ptr ( control_block ctl,
T *  ptr 
)
inlineexplicitprotected

◆ ebml_shared_ptr() [2/8]

template<typename T>
ebml::ebml_shared_ptr< T >::ebml_shared_ptr ( control_block ctl,
T *  ptr,
const std::unique_lock< std::mutex > &   
)
inlineexplicitprotected

◆ ebml_shared_ptr() [3/8]

template<typename T>
ebml::ebml_shared_ptr< T >::ebml_shared_ptr ( )
inline

◆ ebml_shared_ptr() [4/8]

template<typename T>
ebml::ebml_shared_ptr< T >::ebml_shared_ptr ( const std::nullptr_t &  )
inline

◆ ebml_shared_ptr() [5/8]

template<typename T>
ebml::ebml_shared_ptr< T >::ebml_shared_ptr ( T *  ptr)
inlineexplicit

Constructs an ebml_shared_ptr that takes ownership of ptr.

When the first ebml_shared_ptr for the object is created, the control block's valid member is set to true. It is then unsafe to modify the valid flag or create additional shared pointers from within the object's constructor.

Parameters
ptrPointer to the object to be managed.

◆ ebml_shared_ptr() [6/8]

template<typename T>
ebml::ebml_shared_ptr< T >::ebml_shared_ptr ( const ebml_shared_ptr< T > &  other)
inline

◆ ebml_shared_ptr() [7/8]

template<typename T>
template<class U >
ebml::ebml_shared_ptr< T >::ebml_shared_ptr ( const ebml_shared_ptr< U > &  other)
inline

◆ ebml_shared_ptr() [8/8]

template<typename T>
ebml::ebml_shared_ptr< T >::ebml_shared_ptr ( ebml_shared_ptr< T > &&  other)
inline

◆ ~ebml_shared_ptr()

template<typename T>
ebml::ebml_shared_ptr< T >::~ebml_shared_ptr ( )
inline

Member Function Documentation

◆ get()

template<typename T>
T* ebml::ebml_shared_ptr< T >::get ( ) const
inline

Retrieves the raw pointer to the managed object.

This function returns the pointer stored in the control block. It is expected that the control block's valid flag is already set to true (which happens when the first ebml_shared_ptr is constructed).

Returns
T* Pointer to the managed object.

◆ operator bool()

template<typename T>
ebml::ebml_shared_ptr< T >::operator bool ( ) const
inlineexplicit

◆ operator*()

template<typename T>
T& ebml::ebml_shared_ptr< T >::operator* ( ) const
inline

◆ operator->()

template<typename T>
T* ebml::ebml_shared_ptr< T >::operator-> ( ) const
inline

◆ operator=() [1/4]

template<typename T>
ebml_shared_ptr<T>& ebml::ebml_shared_ptr< T >::operator= ( const ebml_shared_ptr< T > &  other)
inline

◆ operator=() [2/4]

template<typename T>
ebml_shared_ptr<T>& ebml::ebml_shared_ptr< T >::operator= ( ebml_shared_ptr< T > &&  other)
inline

◆ operator=() [3/4]

template<typename T>
ebml_shared_ptr<T>& ebml::ebml_shared_ptr< T >::operator= ( const std::nullptr_t &  )
inline

◆ operator=() [4/4]

template<typename T>
template<typename U >
std::enable_if_t<!std::is_same<T, U>::value, ebml_shared_ptr<T>&> ebml::ebml_shared_ptr< T >::operator= ( const ebml_shared_ptr< U > &  other)
inline

◆ operator==() [1/2]

template<typename T>
bool ebml::ebml_shared_ptr< T >::operator== ( const std::nullptr_t &  ) const
inline

◆ operator==() [2/2]

template<typename T>
bool ebml::ebml_shared_ptr< T >::operator== ( const ebml_shared_ptr< T > &  other) const
inline

◆ swap()

template<typename T>
void ebml::ebml_shared_ptr< T >::swap ( ebml_shared_ptr< T > &  other)
inline

◆ use_count()

template<typename T>
int ebml::ebml_shared_ptr< T >::use_count ( ) const
inline

Friends And Related Function Documentation

◆ ebml_const_pointer_cast [1/2]

template<typename T>
template<typename U , typename V >
ebml_shared_ptr<U> ebml_const_pointer_cast ( const ebml_shared_ptr< V > &  )
friend

◆ ebml_const_pointer_cast [2/2]

template<typename T>
template<typename U , typename V >
ebml_shared_ptr<U> ebml_const_pointer_cast ( ebml_shared_ptr< V > &&  )
friend

◆ ebml_dynamic_pointer_cast [1/2]

template<typename T>
template<typename U , typename V >
ebml_shared_ptr<U> ebml_dynamic_pointer_cast ( const ebml_shared_ptr< V > &  )
friend

◆ ebml_dynamic_pointer_cast [2/2]

template<typename T>
template<typename U , typename V >
ebml_shared_ptr<U> ebml_dynamic_pointer_cast ( ebml_shared_ptr< V > &&  )
friend

◆ ebml_shared_ptr

template<typename T>
template<typename U >
friend class ebml_shared_ptr
friend

◆ ebml_static_pointer_cast [1/2]

template<typename T>
template<typename U , typename V >
ebml_shared_ptr<U> ebml_static_pointer_cast ( const ebml_shared_ptr< V > &  )
friend

◆ ebml_static_pointer_cast [2/2]

template<typename T>
template<typename U , typename V >
ebml_shared_ptr<U> ebml_static_pointer_cast ( ebml_shared_ptr< V > &&  )
friend

◆ ebml_weak_ptr

template<typename T>
template<typename U >
friend class ebml_weak_ptr
friend

Member Data Documentation

◆ ctl

template<typename T>
control_block* ebml::ebml_shared_ptr< T >::ctl = nullptr
mutableprotected

◆ mutex

template<typename T>
std::mutex ebml::ebml_shared_ptr< T >::mutex
mutableprotected

◆ ptr

template<typename T>
T* ebml::ebml_shared_ptr< T >::ptr = nullptr
protected

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