The Gaudi Framework
master (53dee381)
Toggle main menu visibility
Loading...
Searching...
No Matches
LockedHandle.h
Go to the documentation of this file.
1
/***********************************************************************************\
2
* (c) Copyright 1998-2025 CERN for the benefit of the LHCb and ATLAS collaborations *
3
* *
4
* This software is distributed under the terms of the Apache version 2 licence, *
5
* copied verbatim in the file "LICENSE". *
6
* *
7
* In applying this licence, CERN does not waive the privileges and immunities *
8
* granted to it by virtue of its status as an Intergovernmental Organization *
9
* or submit itself to any jurisdiction. *
10
\***********************************************************************************/
11
#pragma once
12
13
#include <mutex>
14
34
35
template
<
class
T,
class
MutexType = std::mutex>
36
class
LockedHandle
{
37
public
:
38
LockedHandle
( T* ptr, MutexType& mut ) :
m_ptr
( ptr ),
m_mutex
( &mut ) {}
39
LockedHandle
( T* ptr, MutexType* mut ) :
m_ptr
( ptr ),
m_mutex
( mut ) {}
40
LockedHandle
( T* ptr ) :
m_ptr
( ptr ),
m_mutex
( 0 ) {}
41
LockedHandle
() :
m_ptr
( nullptr ),
m_mutex
( nullptr ) {}
42
43
void
set
( T* ptr, MutexType* mut ) {
44
m_ptr
= ptr;
45
m_mutex
= mut;
46
}
47
48
void
setMutex
( MutexType* mut ) {
m_mutex
= mut; }
49
50
T*
get
()
const
{
return
m_ptr
; }
51
52
class
Guard
{
53
Guard
(
const
Guard
& a ) =
delete
;
54
55
public
:
56
Guard
(
Guard
&& a ) :
m_ptr
( a.
m_ptr
),
m_mutex
( a.
m_mutex
) { a.m_mutex =
nullptr
; }
57
58
Guard
( T* ptr, MutexType& mutex ) :
m_ptr
( ptr ),
m_mutex
( &mutex ) {
m_mutex
->lock(); }
59
~Guard
() {
m_mutex
->unlock(); }
60
T&
operator*
() {
return
*
m_ptr
; }
61
T*
operator->
() {
return
m_ptr
; }
62
63
operator
T&() {
return
*
m_ptr
; }
64
65
private
:
66
T*
m_ptr
{
nullptr
};
67
MutexType*
m_mutex
{
nullptr
};
68
};
69
70
class
ConstGuard
{
71
ConstGuard
(
const
ConstGuard
& a ) =
delete
;
72
73
public
:
74
ConstGuard
(
ConstGuard
&& a ) :
m_ptr
( a.
m_ptr
),
m_mutex
( a.
m_mutex
) { a.m_mutex =
nullptr
; }
75
76
ConstGuard
(
const
T* ptr, MutexType& mutex ) :
m_ptr
( ptr ),
m_mutex
( &mutex ) {
m_mutex
->lock(); }
77
~ConstGuard
() {
m_mutex
->unlock(); }
78
const
T&
operator*
()
const
{
return
*
m_ptr
; }
79
const
T*
operator->
()
const
{
return
m_ptr
; }
80
81
operator
const
T&()
const
{
return
*
m_ptr
; }
82
83
private
:
84
const
T*
m_ptr
;
85
MutexType*
m_mutex
;
86
};
87
89
Guard
operator*
() {
return
Guard
(
m_ptr
, *
m_mutex
); }
90
92
Guard
operator->
() {
return
Guard
(
m_ptr
, *
m_mutex
); }
93
95
ConstGuard
operator*
()
const
{
return
ConstGuard
(
m_ptr
, *
m_mutex
); }
96
98
ConstGuard
operator->
()
const
{
return
ConstGuard
(
m_ptr
, *
m_mutex
); }
99
100
operator
bool()
const
{
return
m_ptr
; }
101
102
private
:
103
T*
m_ptr
;
104
mutable
MutexType*
m_mutex
;
105
};
LockedHandle::ConstGuard
Definition
LockedHandle.h:70
LockedHandle::ConstGuard::ConstGuard
ConstGuard(ConstGuard &&a)
Definition
LockedHandle.h:74
LockedHandle::ConstGuard::operator->
const T * operator->() const
Definition
LockedHandle.h:79
LockedHandle::ConstGuard::m_ptr
const T * m_ptr
Definition
LockedHandle.h:84
LockedHandle::ConstGuard::~ConstGuard
~ConstGuard()
Definition
LockedHandle.h:77
LockedHandle::ConstGuard::ConstGuard
ConstGuard(const ConstGuard &a)=delete
LockedHandle::ConstGuard::operator*
const T & operator*() const
Definition
LockedHandle.h:78
LockedHandle::ConstGuard::ConstGuard
ConstGuard(const T *ptr, MutexType &mutex)
Definition
LockedHandle.h:76
LockedHandle::ConstGuard::m_mutex
MutexType * m_mutex
Definition
LockedHandle.h:85
LockedHandle::Guard
Definition
LockedHandle.h:52
LockedHandle::Guard::Guard
Guard(Guard &&a)
Definition
LockedHandle.h:56
LockedHandle::Guard::m_mutex
MutexType * m_mutex
Definition
LockedHandle.h:67
LockedHandle::Guard::operator->
T * operator->()
Definition
LockedHandle.h:61
LockedHandle::Guard::operator*
T & operator*()
Definition
LockedHandle.h:60
LockedHandle::Guard::m_ptr
T * m_ptr
Definition
LockedHandle.h:66
LockedHandle::Guard::~Guard
~Guard()
Definition
LockedHandle.h:59
LockedHandle::Guard::Guard
Guard(T *ptr, MutexType &mutex)
Definition
LockedHandle.h:58
LockedHandle::Guard::Guard
Guard(const Guard &a)=delete
LockedHandle::LockedHandle
LockedHandle(T *ptr, MutexType &mut)
Definition
LockedHandle.h:38
LockedHandle::get
T * get() const
Definition
LockedHandle.h:50
LockedHandle::operator->
ConstGuard operator->() const
Aquire and release the lock before and after the const object is accessed.
Definition
LockedHandle.h:98
LockedHandle::operator*
ConstGuard operator*() const
Aquire and release the lock before and after the const object is accessed.
Definition
LockedHandle.h:95
LockedHandle::LockedHandle
LockedHandle(T *ptr)
Definition
LockedHandle.h:40
LockedHandle::set
void set(T *ptr, MutexType *mut)
Definition
LockedHandle.h:43
LockedHandle::LockedHandle
LockedHandle(T *ptr, MutexType *mut)
Definition
LockedHandle.h:39
LockedHandle::m_mutex
MutexType * m_mutex
Definition
LockedHandle.h:104
LockedHandle::m_ptr
T * m_ptr
Definition
LockedHandle.h:103
LockedHandle::LockedHandle
LockedHandle()
Definition
LockedHandle.h:41
LockedHandle::operator->
Guard operator->()
Aquire and release the lock before and after the object is accessed.
Definition
LockedHandle.h:92
LockedHandle::setMutex
void setMutex(MutexType *mut)
Definition
LockedHandle.h:48
LockedHandle::operator*
Guard operator*()
Aquire and release the lock before and after the object is accessed.
Definition
LockedHandle.h:89
GaudiKernel
include
GaudiKernel
LockedHandle.h
Generated on
for The Gaudi Framework by
1.17.0