The Gaudi Framework
master (57817a18)
Toggle main menu visibility
Loading...
Searching...
No Matches
ConditionAccessorHolder.h
Go to the documentation of this file.
1
/***********************************************************************************\
2
* (c) Copyright 1998-2019 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 <
Gaudi/Property.h
>
14
#include <
GaudiKernel/EventContext.h
>
15
#include <
GaudiKernel/StateMachine.h
>
16
#include <
GaudiKernel/StatusCode.h
>
17
#include <any>
18
#include <mutex>
19
#include <string>
20
21
namespace
Gaudi::TestSuite::Conditions
{
22
namespace
details
{
24
class
ConditionsStore
{
25
public
:
26
using
ConditionContext
= int;
27
using
ConditionKey
= std::string;
28
29
static
ConditionsStore
&
instance
();
30
31
void
declareKey
(
const
ConditionKey
& key );
32
33
const
ConditionContext
&
getConditionContext
(
const
EventContext
& ctx )
const
;
34
35
template
<
typename
T>
36
const
T&
getCondition
(
const
ConditionKey
& key,
const
ConditionContext
& ctx )
const
{
37
return
*std::any_cast<T>(
getConditionAny
( key, ctx ) );
38
}
39
40
private
:
41
ConditionsStore
() =
default
;
42
const
std::any*
getConditionAny
(
const
ConditionKey
& key,
const
ConditionContext
& ctx )
const
;
43
44
using
IOVSlot
= std::map<ConditionKey, std::any>;
45
using
IOVSlots
= std::map<ConditionContext, IOVSlot>;
46
47
mutable
std::mutex
m_storageMtx
;
48
mutable
IOVSlots
m_storage
;
49
std::set<ConditionKey>
m_requestedKeys
;
50
};
51
}
// namespace details
52
76
template
<
typename
Base>
77
class
ConditionAccessorHolder
:
public
Base {
78
public
:
80
using
Base::Base;
81
84
using
base_class
=
ConditionAccessorHolder<Base>
;
85
89
using
ConditionContext
=
details::ConditionsStore::ConditionContext
;
90
94
using
ConditionKey
=
details::ConditionsStore::ConditionKey
;
95
102
template
<
typename
T>
103
class
ConditionAccessor
{
104
public
:
106
ConditionAccessor
(
base_class
* owner,
const
std::string& keyName,
const
ConditionKey
& keyDefault,
107
const
std::string& keyDoc =
""
)
108
:
m_key
{ owner, keyName, keyDefault, keyDoc } {
109
owner->
registerConditionAccessor
( *
this
);
110
}
111
115
const
ConditionKey
&
key
()
const
{
return
m_key
; }
116
118
const
T&
get
(
const
ConditionContext
& ctx )
const
{
119
return
details::ConditionsStore::instance
().
getCondition
<T>(
key
(), ctx );
120
}
121
122
private
:
124
Gaudi::Property<ConditionKey>
m_key
;
125
};
126
127
StatusCode
initialize
()
override
{
128
auto
sc = Base::initialize();
129
if
( !sc )
return
sc;
130
131
// backend-specific initialization
132
133
// trigger delayed registrations
134
for
(
auto
& action :
m_delayedRegistrations
) { action(); }
135
m_delayedRegistrations
.clear();
136
137
return
sc;
138
}
139
141
const
ConditionContext
&
getConditionContext
(
const
EventContext
& ctx )
const
{
142
return
details::ConditionsStore::instance
().
getConditionContext
( ctx );
143
}
144
145
private
:
146
template
<
typename
T>
147
friend
class
ConditionAccessor
;
148
150
template
<
typename
T>
151
void
registerConditionAccessor
(
ConditionAccessor<T>
& accessor ) {
152
if
( this->targetFSMState() ==
Gaudi::StateMachine::INITIALIZED
) {
153
details::ConditionsStore::instance
().
declareKey
( accessor.
key
() );
154
}
else
{
155
m_delayedRegistrations
.push_back( [
this
, &accessor]() {
registerConditionAccessor
( accessor ); } );
156
}
157
}
158
163
std::list<std::function<void()>>
m_delayedRegistrations
;
164
};
165
}
// namespace Gaudi::TestSuite::Conditions
EventContext.h
Property.h
StateMachine.h
StatusCode.h
EventContext
This class represents an entry point to all the event specific data.
Definition
EventContext.h:35
Gaudi::Property
Implementation of property with value of concrete type.
Definition
Property.h:35
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::ConditionAccessor
Class wrapping the communication between condition users and conditions backend.
Definition
ConditionAccessorHolder.h:103
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::ConditionAccessor::get
const T & get(const ConditionContext &ctx) const
Get the condition value for the requested condition slot.
Definition
ConditionAccessorHolder.h:118
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::ConditionAccessor::key
const ConditionKey & key() const
Helper to access the key of the current accessor.
Definition
ConditionAccessorHolder.h:115
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::ConditionAccessor::ConditionAccessor
ConditionAccessor(base_class *owner, const std::string &keyName, const ConditionKey &keyDefault, const std::string &keyDoc="")
Constructor a ConditionAccessor instance registering it to the current holder.
Definition
ConditionAccessorHolder.h:106
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::ConditionAccessor::m_key
Gaudi::Property< ConditionKey > m_key
Internal property object for the condition key.
Definition
ConditionAccessorHolder.h:124
Gaudi::TestSuite::Conditions::ConditionAccessorHolder
Example of a ConditionAccessorHolder implementation.
Definition
ConditionAccessorHolder.h:77
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::ConditionContext
details::ConditionsStore::ConditionContext ConditionContext
Forward backend specific ConditionContext to specializations.
Definition
ConditionAccessorHolder.h:89
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::base_class
ConditionAccessorHolder< Base > base_class
Helper to expose this class to specializations without having to spell the whole name (see Gaudi::Tes...
Definition
ConditionAccessorHolder.h:84
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::registerConditionAccessor
void registerConditionAccessor(ConditionAccessor< T > &accessor)
Register a ConditionAccessor instance to internal bookkeeping.
Definition
ConditionAccessorHolder.h:151
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::getConditionContext
const ConditionContext & getConditionContext(const EventContext &ctx) const
Helper to map the event being processed to the corresponding conditions slot.
Definition
ConditionAccessorHolder.h:141
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::m_delayedRegistrations
std::list< std::function< void()> > m_delayedRegistrations
Helper to postpone the registration to the backend.
Definition
ConditionAccessorHolder.h:163
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::ConditionKey
details::ConditionsStore::ConditionKey ConditionKey
Forward backend specific ConditionKey to specializations.
Definition
ConditionAccessorHolder.h:94
Gaudi::TestSuite::Conditions::ConditionAccessorHolder::initialize
StatusCode initialize() override
Definition
ConditionAccessorHolder.h:127
Gaudi::TestSuite::Conditions::details::ConditionsStore::declareKey
void declareKey(const ConditionKey &key)
Definition
Backend.cpp:20
Gaudi::TestSuite::Conditions::details::ConditionsStore::ConditionKey
std::string ConditionKey
Definition
ConditionAccessorHolder.h:27
Gaudi::TestSuite::Conditions::details::ConditionsStore::m_storageMtx
std::mutex m_storageMtx
Definition
ConditionAccessorHolder.h:47
Gaudi::TestSuite::Conditions::details::ConditionsStore::IOVSlots
std::map< ConditionContext, IOVSlot > IOVSlots
Definition
ConditionAccessorHolder.h:45
Gaudi::TestSuite::Conditions::details::ConditionsStore::getConditionContext
const ConditionContext & getConditionContext(const EventContext &ctx) const
Definition
Backend.cpp:26
Gaudi::TestSuite::Conditions::details::ConditionsStore::instance
static ConditionsStore & instance()
Definition
Backend.cpp:15
Gaudi::TestSuite::Conditions::details::ConditionsStore::getCondition
const T & getCondition(const ConditionKey &key, const ConditionContext &ctx) const
Definition
ConditionAccessorHolder.h:36
Gaudi::TestSuite::Conditions::details::ConditionsStore::m_requestedKeys
std::set< ConditionKey > m_requestedKeys
Definition
ConditionAccessorHolder.h:49
Gaudi::TestSuite::Conditions::details::ConditionsStore::ConditionContext
int ConditionContext
Definition
ConditionAccessorHolder.h:26
Gaudi::TestSuite::Conditions::details::ConditionsStore::ConditionsStore
ConditionsStore()=default
Gaudi::TestSuite::Conditions::details::ConditionsStore::getConditionAny
const std::any * getConditionAny(const ConditionKey &key, const ConditionContext &ctx) const
Definition
Backend.cpp:33
Gaudi::TestSuite::Conditions::details::ConditionsStore::m_storage
IOVSlots m_storage
Definition
ConditionAccessorHolder.h:48
Gaudi::TestSuite::Conditions::details::ConditionsStore::IOVSlot
std::map< ConditionKey, std::any > IOVSlot
Definition
ConditionAccessorHolder.h:44
StatusCode
This class is used for returning status codes from appropriate routines.
Definition
StatusCode.h:64
Gaudi::StateMachine::INITIALIZED
@ INITIALIZED
Definition
StateMachine.h:24
Gaudi::TestSuite::Conditions
Definition
ConditionAccessorHolder.h:21
details
Definition
AnyDataWrapper.h:19
GaudiTestSuite
include
Gaudi
TestSuite
Conditions
ConditionAccessorHolder.h
Generated on
for The Gaudi Framework by
1.17.0