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 >::RefHelper< 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 reference = T &
 Reference type of element. More...
 
using const_reference = const T &
 Const eference type of element. More...
 

Public Member Functions

 RefHelper (const SafeSharedPtr &p)
 Constructor a constant RefHelper to gain access to underlying object of SafeSharedPtr. More...
 
 RefHelper (RefHelper &&other) noexcept
 Move constructor, transport ownership to another RefHelper, keep existing lock state. More...
 
 ~RefHelper ()
 Destructor, release Lock if exists. More...
 
RefHelperoperator= (RefHelper &&other)
 Move assigment, transport ownership to another RefHelper, keep existing lock state. More...
 
 operator reference ()
 Operator overload to act as T&. More...
 
 operator const_reference () const
 Operator overload to act as const T&. More...
 
template<typename X >
RefHelperoperator= (const X &other)
 Assign operator to assign from another value. 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 >::RefHelper< 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&.
Because operator. cannot be overloaded, *pPoint.x cannot compile, use pPoint->x instead. Sorry for that.
See also
SafeSharedPtr

Member Typedef Documentation

◆ 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 >::RefHelper< 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 >::RefHelper< Lock >::const_reference = const T&

Const eference type of element.

Constructor & Destructor Documentation

◆ RefHelper() [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 >::RefHelper< Lock >::RefHelper ( const SafeSharedPtr p)
inlineexplicit

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

Will construct Lock object to guard the pointer.

Parameters
pSafeSharedPtr to access from.

◆ RefHelper() [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 >::RefHelper< Lock >::RefHelper ( RefHelper< Lock > &&  other)
inlinenoexcept

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

Parameters
otherAnother RefHelper to move to.

◆ ~RefHelper()

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 >::RefHelper< Lock >::~RefHelper ( )
inline

Destructor, release Lock if exists.

Member Function Documentation

◆ 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 >
RefHelper & Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::RefHelper< Lock >::operator= ( RefHelper< Lock > &&  other)
inline

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

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

◆ operator 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 >
Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::RefHelper< Lock >::operator reference ( )
inline

Operator overload to act as T&.

Returns
T&.

◆ operator 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 >
Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::RefHelper< Lock >::operator const_reference ( ) const
inline

Operator overload to act as const T&.

Returns
const 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 >
template<typename X >
RefHelper & Memory::SafeSharedPtr< T, mutex_t, read_lock_t, write_lock_t >::RefHelper< Lock >::operator= ( const X &  other)
inline

Assign operator to assign from another value.

Template Parameters
XType of input, X& must be implicitly convertible to T&.
Parameters
otherInput value to be assigned from.

Used for situations like:

auto ptr = Memory::make_shared<int>(0);
*ptr = 42;

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