Cpp Utilities 1.2.3
Public Types | Public Member Functions | List of all members
Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock > Class Template Reference

Proxy class for operator-> in SafeSharedPtr, behave like underlying object, and provide RAII read-write lock for thread safety. More...

#include <SafeSharedPtr.hpp>

Public Types

using pointer = T *
 Pointer type of element. More...
 
using const_pointer = const T *
 Const pointer type of element. More...
 
using reference = T &
 Reference type of element. More...
 
using const_reference = const T &
 Const eference type of element. More...
 

Public Member Functions

 PtrHelper (const SafeSharedPtr &p)
 Constructor a constant PtrHelper to gain access to underlying object of SafeSharedPtr. More...
 
 PtrHelper (PtrHelper &&other) noexcept
 Move constructor, transport ownership to another PtrHelper, keep existing lock state. More...
 
 ~PtrHelper ()
 Destructor, release Lock if exists. More...
 
PtrHelperoperator= (PtrHelper &&other)
 Move assigment, transport ownership to another PtrHelper, keep existing lock state. More...
 
 operator pointer ()
 Operator overload to act as T*. More...
 
 operator const_pointer () const
 Operator overload to act as const T*. More...
 
pointer operator-> ()
 Operator overload to act as T*. More...
 
const_pointer operator-> () const
 Operator overload to act as const T*. More...
 

Detailed Description

template<typename T, typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock>
class Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >

Proxy class for operator-> in SafeSharedPtr, behave like underlying object, and provide RAII read-write lock for thread safety.

Template Parameters
LockLock type used for protect the object.
Note
Copy constructor and copy assignment are deleted to prevent multiply locks, use std::move with move constructor and move assignment to transport it's ownership, or simply use it like type T* or T&.
See also
SafeSharedPtr

Member Typedef Documentation

◆ pointer

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
using Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::pointer = T*

Pointer type of element.

◆ const_pointer

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
using Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::const_pointer = const T*

Const pointer type of element.

◆ reference

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
using Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::reference = T&

Reference type of element.

◆ const_reference

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
using Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::const_reference = const T&

Const eference type of element.

Constructor & Destructor Documentation

◆ PtrHelper() [1/2]

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::PtrHelper ( const SafeSharedPtr p)
inlineexplicit

Constructor a constant PtrHelper to gain access to underlying object of SafeSharedPtr.

Will construct Lock object to guard the pointer.

Parameters
pSafeSharedPtr to access from.

◆ PtrHelper() [2/2]

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::PtrHelper ( PtrHelper< Lock > &&  other)
inlinenoexcept

Move constructor, transport ownership to another PtrHelper, keep existing lock state.

Parameters
otherAnother PtrHelper to move to.

◆ ~PtrHelper()

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::~PtrHelper ( )
inline

Destructor, release Lock if exists.

Member Function Documentation

◆ operator=()

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
PtrHelper & Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::operator= ( PtrHelper< Lock > &&  other)
inline

Move assigment, transport ownership to another PtrHelper, keep existing lock state.

Parameters
otherAnother PtrHelper to move to.
Returns
*this with empty content.

◆ operator pointer()

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::operator pointer ( )
inline

Operator overload to act as T*.

Returns
T&.

◆ operator const_pointer()

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::operator const_pointer ( ) const
inline

Operator overload to act as const T*.

Returns
const T&.

◆ operator->() [1/2]

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
pointer Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::operator-> ( )
inline

Operator overload to act as T*.

Returns
T*.

◆ operator->() [2/2]

template<typename T , typename mutex_t = shared_mutex_t, typename read_lock_t = shared_lock_t, typename write_lock_t = unique_lock_t>
template<typename Lock >
const_pointer Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::PtrHelper< Lock >::operator-> ( ) const
inline

Operator overload to act as const T*.

Returns
const T*.

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