The Gaudi Framework  v38r1p1 (ae26267b)
Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock > Class Template Reference

#include </builds/gaudi/Gaudi/GaudiKernel/include/Gaudi/cxx/SynchronizedValue.h>

Collaboration diagram for Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >:

Public Member Functions

template<typename... Args, typename = details::require_constructible_t<Value, Args...>>
 SynchronizedValue (Args &&... args)
 
 SynchronizedValue (const SynchronizedValue &rhs)
 
SynchronizedValueoperator= (const SynchronizedValue &rhs)
 
 SynchronizedValue (SynchronizedValue &&rhs)
 
SynchronizedValueoperator= (SynchronizedValue &&rhs)
 

Private Attributes

Value m_obj
 
Mutex m_mtx
 

Detailed Description

template<typename Value, typename Mutex = std::mutex, typename ReadLock = std::conditional_t<std::is_same_v<std::shared_mutex, Mutex>, std::shared_lock<Mutex>, std::lock_guard<Mutex>>, typename WriteLock = std::lock_guard<Mutex>>
class Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >

Definition at line 35 of file SynchronizedValue.h.

Constructor & Destructor Documentation

◆ SynchronizedValue() [1/3]

template<typename Value , typename Mutex = std::mutex, typename ReadLock = std::conditional_t<std::is_same_v<std::shared_mutex, Mutex>, std::shared_lock<Mutex>, std::lock_guard<Mutex>>, typename WriteLock = std::lock_guard<Mutex>>
template<typename... Args, typename = details::require_constructible_t<Value, Args...>>
Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >::SynchronizedValue ( Args &&...  args)
inline

Definition at line 42 of file SynchronizedValue.h.

42 : m_obj{ std::forward<Args>( args )... } {}

◆ SynchronizedValue() [2/3]

template<typename Value , typename Mutex = std::mutex, typename ReadLock = std::conditional_t<std::is_same_v<std::shared_mutex, Mutex>, std::shared_lock<Mutex>, std::lock_guard<Mutex>>, typename WriteLock = std::lock_guard<Mutex>>
Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >::SynchronizedValue ( const SynchronizedValue< Value, Mutex, ReadLock, WriteLock > &  rhs)
inline

Definition at line 44 of file SynchronizedValue.h.

44  {
45  static_assert( std::is_default_constructible_v<Value> ); // bound to hold, as otherwise we wouldn't get this
46  // far... so for 'documnentation purpose' really (C++20:
47  // turn into a `requires` clause )...
48  static_assert( std::is_copy_assignable_v<Value> );
49  auto lock = std::scoped_lock{ rhs.m_mtx, m_mtx };
50  m_obj = rhs.m_obj;
51  }

◆ SynchronizedValue() [3/3]

template<typename Value , typename Mutex = std::mutex, typename ReadLock = std::conditional_t<std::is_same_v<std::shared_mutex, Mutex>, std::shared_lock<Mutex>, std::lock_guard<Mutex>>, typename WriteLock = std::lock_guard<Mutex>>
Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >::SynchronizedValue ( SynchronizedValue< Value, Mutex, ReadLock, WriteLock > &&  rhs)
inline

Definition at line 62 of file SynchronizedValue.h.

62  {
63  static_assert( std::is_default_constructible_v<Value> ); // bound to hold, as otherwise we wouldn't get this
64  // far... so for 'documnentation purpose' really (C++20:
65  // turn into a `requires` clause )...
66  static_assert( std::is_move_assignable_v<Value> );
67  auto lock = std::scoped_lock{ rhs.m_mtx, m_mtx };
68  m_obj = std::move( rhs.m_obj );
69  }

Member Function Documentation

◆ operator=() [1/2]

template<typename Value , typename Mutex = std::mutex, typename ReadLock = std::conditional_t<std::is_same_v<std::shared_mutex, Mutex>, std::shared_lock<Mutex>, std::lock_guard<Mutex>>, typename WriteLock = std::lock_guard<Mutex>>
SynchronizedValue& Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >::operator= ( const SynchronizedValue< Value, Mutex, ReadLock, WriteLock > &  rhs)
inline

Definition at line 53 of file SynchronizedValue.h.

53  {
54  static_assert( std::is_copy_assignable_v<Value> );
55  if ( this != &rhs ) {
56  auto lock = std::scoped_lock{ rhs.m_mtx, m_mtx };
57  m_obj = rhs.m_obj;
58  }
59  return *this;
60  }

◆ operator=() [2/2]

template<typename Value , typename Mutex = std::mutex, typename ReadLock = std::conditional_t<std::is_same_v<std::shared_mutex, Mutex>, std::shared_lock<Mutex>, std::lock_guard<Mutex>>, typename WriteLock = std::lock_guard<Mutex>>
SynchronizedValue& Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >::operator= ( SynchronizedValue< Value, Mutex, ReadLock, WriteLock > &&  rhs)
inline

Definition at line 71 of file SynchronizedValue.h.

71  {
72  static_assert( std::is_move_assignable_v<Value> );
73  if ( this != &rhs ) {
74  auto lock = std::scoped_lock{ rhs.m_mtx, m_mtx };
75  m_obj = std::move( rhs.m_obj );
76  }
77  return *this;
78  }

Member Data Documentation

◆ m_mtx

template<typename Value , typename Mutex = std::mutex, typename ReadLock = std::conditional_t<std::is_same_v<std::shared_mutex, Mutex>, std::shared_lock<Mutex>, std::lock_guard<Mutex>>, typename WriteLock = std::lock_guard<Mutex>>
Mutex Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >::m_mtx
mutableprivate

Definition at line 38 of file SynchronizedValue.h.

◆ m_obj

template<typename Value , typename Mutex = std::mutex, typename ReadLock = std::conditional_t<std::is_same_v<std::shared_mutex, Mutex>, std::shared_lock<Mutex>, std::lock_guard<Mutex>>, typename WriteLock = std::lock_guard<Mutex>>
Value Gaudi::cxx::SynchronizedValue< Value, Mutex, ReadLock, WriteLock >::m_obj
private

Definition at line 37 of file SynchronizedValue.h.


The documentation for this class was generated from the following file:
std::lock
T lock(T... args)
std::move
T move(T... args)
Gaudi::cxx::SynchronizedValue::m_mtx
Mutex m_mtx
Definition: SynchronizedValue.h:38
Gaudi::cxx::SynchronizedValue::m_obj
Value m_obj
Definition: SynchronizedValue.h:36
gaudirun.args
args
Definition: gaudirun.py:336