ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Event
EventContainers
src
InternalOffline.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#include "
EventContainers/InternalOffline.h
"
6
#include <algorithm>
7
#include "
EventContainers/IDC_WriteHandleBase.h
"
8
#include "
CxxUtils/AthUnlikelyMacros.h
"
9
10
using namespace
EventContainers
;
11
typedef
I_InternalIDC::InternalConstItr
InternalConstItr
;
12
InternalOffline::InternalOffline
(
size_t
max
) :
m_maximumSize
(
max
) {
13
//Check optimization assumptions
14
static_assert
(std::is_trivially_copyable<hashPair>::value);
15
static_assert
(std::is_trivially_destructible<hashPair>::value);
16
static_assert
(std::is_trivially_copyable<IdentifierHash>::value);
17
static_assert
(std::is_trivially_destructible<IdentifierHash>::value);
18
}
19
20
21
bool
InternalOffline::tryAddFromCache
(
IdentifierHash
hash,
EventContainers::IDC_WriteHandleBase
&) {
22
return
indexFind
(hash) !=
m_map
.cend();
//No Cache in offline mode
23
}
24
25
bool
InternalOffline::tryAddFromCache
(
IdentifierHash
hash)
26
{
27
return
indexFind
(hash) !=
m_map
.cend();
//No Cache in offline mode
28
}
29
30
void
InternalOffline::wait
()
const
{
31
//No need to wait in offline, deliberately empty method
32
}
33
34
std::vector<IdentifierHash>
InternalOffline::getAllCurrentHashes
()
const
{
35
std::vector<IdentifierHash> ids;
36
ids.reserve(
m_map
.size());
37
for
(
auto
&
x
:
m_map
) {
38
ids.emplace_back(
x
.first);
39
}
40
return
ids;
41
}
42
43
InternalConstItr
44
InternalOffline::cend
()
const
{
45
return
m_map
.cend();
46
}
47
48
const
std::vector < I_InternalIDC::hashPair >&
InternalOffline::getAllHashPtrPair
()
const
{
return
m_map
; }
49
50
InternalConstItr
51
InternalOffline::cbegin
()
const
{
52
return
m_map
.cbegin();
53
}
54
55
InternalConstItr
InternalOffline::indexFind
(
IdentifierHash
hashId )
const
{
56
auto
itr = std::lower_bound(
m_map
.cbegin(),
m_map
.cend(), hashId.
value
(), [](
const
hashPair
&lhs,
IdentifierHash::value_type
rhs) ->
bool
{ return lhs.first < rhs; } );
57
if
(itr!=
m_map
.cend() && itr->first==hashId)
return
itr;
58
return
m_map
.cend();
59
// return std::find_if(m_map.begin(), m_map.end(), [hashId](const hashPair &lhs) -> bool { return lhs.first == hashId; });
60
}
61
62
size_t
InternalOffline::numberOfCollections
()
const
{
63
return
m_map
.size();
64
}
65
66
void
InternalOffline::cleanUp
(
deleter_f
* deleter)
noexcept
{
67
for
(
const
auto
&
x
:
m_map
) deleter(
x
.second);
68
m_map
.clear();
69
}
70
71
bool
InternalOffline::insert
(
IdentifierHash
hashId,
const
void
* ptr) {
72
if
(
m_map
.empty() ||
m_map
.back().first < hashId){
73
m_map
.emplace_back(hashId, ptr);
74
return
true
;
75
}
76
auto
itr = std::lower_bound(
m_map
.begin(),
m_map
.end(), hashId.
value
(), [](
const
hashPair
&lhs,
IdentifierHash::value_type
rhs) ->
bool
{ return lhs.first < rhs; } );
77
if
(itr == std::end(
m_map
) || itr->first != hashId)
78
{
79
m_map
.emplace(itr, hashId, ptr);
80
return
true
;
81
}
82
return
false
;
83
}
84
85
const
void
*
InternalOffline::findIndexPtr
(
IdentifierHash
hashId)
const
noexcept
{
86
auto
itr =
indexFind
(hashId);
87
if
(itr !=
m_map
.end())
return
itr->second;
88
return
nullptr
;
89
}
90
91
StatusCode
InternalOffline::addLock
(
IdentifierHash
hashId,
const
void
* ptr) {
92
bool
added =
insert
(hashId, ptr);
93
if
(
ATH_UNLIKELY
(!added)) {
94
throw
std::runtime_error(
"IDC WARNING Deletion shouldn't occur in addLock paradigm"
);
95
}
96
return
StatusCode::SUCCESS;
97
}
98
99
void
*
InternalOffline::removeCollection
(
IdentifierHash
hashId ) {
100
auto
itr = std::lower_bound(
m_map
.begin(),
m_map
.end(), hashId.
value
(), [](
hashPair
&lhs,
IdentifierHash::value_type
rhs) ->
bool
{ return lhs.first < rhs; } );
101
if
(itr==
m_map
.end() || itr->first!=hashId)
return
nullptr
;
102
void
* ptr =
const_cast<
void
*
>
(itr->second);
103
m_map
.erase(itr);
104
return
ptr;
105
}
106
107
StatusCode
InternalOffline::fetchOrCreate
(
IdentifierHash
) {
108
throw
std::runtime_error(
"Not implemented in offline mode"
);
109
}
110
StatusCode
InternalOffline::fetchOrCreate
(
const
std::vector<IdentifierHash>&)
111
{
112
throw
std::runtime_error(
"Not implemented in offline mode"
);
113
}
114
115
void
InternalOffline::destructor
(
deleter_f
* deleter)
noexcept
{
116
for
(
const
auto
&
x
:
m_map
) deleter(
x
.second);
117
}
AthUnlikelyMacros.h
ATH_UNLIKELY
#define ATH_UNLIKELY(x)
Definition
AthUnlikelyMacros.h:17
IDC_WriteHandleBase.h
InternalConstItr
I_InternalIDC::InternalConstItr InternalConstItr
Definition
InternalOffline.cxx:11
InternalOffline.h
x
#define x
max
#define max(a, b)
Definition
cfImp.cxx:41
EventContainers::IDC_WriteHandleBase
Definition
IDC_WriteHandleBase.h:13
EventContainers::I_InternalIDC::InternalConstItr
std::vector< hashPair >::const_iterator InternalConstItr
Definition
I_InternalIDC.h:38
EventContainers::I_InternalIDC::hashPair
EventContainers::hashPair< void > hashPair
Definition
I_InternalIDC.h:37
EventContainers::I_InternalIDC::deleter_f
void deleter_f(const void *p)
Definition
I_InternalIDC.h:14
EventContainers::InternalOffline::m_maximumSize
size_t m_maximumSize
Definition
InternalOffline.h:42
EventContainers::InternalOffline::destructor
virtual void destructor(deleter_f *) noexcept override
Definition
InternalOffline.cxx:115
EventContainers::InternalOffline::insert
virtual bool insert(IdentifierHash hashId, const void *ptr) override
Definition
InternalOffline.cxx:71
EventContainers::InternalOffline::indexFind
virtual InternalConstItr indexFind(IdentifierHash hashId) const override
Definition
InternalOffline.cxx:55
EventContainers::InternalOffline::findIndexPtr
virtual const void * findIndexPtr(IdentifierHash hashId) const noexcept override
Definition
InternalOffline.cxx:85
EventContainers::InternalOffline::numberOfCollections
virtual size_t numberOfCollections() const override
Definition
InternalOffline.cxx:62
EventContainers::InternalOffline::tryAddFromCache
virtual bool tryAddFromCache(IdentifierHash hashId, EventContainers::IDC_WriteHandleBase &lock) override
Definition
InternalOffline.cxx:21
EventContainers::InternalOffline::fetchOrCreate
virtual StatusCode fetchOrCreate(IdentifierHash hashId) override
Definition
InternalOffline.cxx:107
EventContainers::InternalOffline::cbegin
virtual InternalConstItr cbegin() const override
Definition
InternalOffline.cxx:51
EventContainers::InternalOffline::wait
virtual void wait() const override
Definition
InternalOffline.cxx:30
EventContainers::InternalOffline::getAllCurrentHashes
virtual std::vector< IdentifierHash > getAllCurrentHashes() const override
Definition
InternalOffline.cxx:34
EventContainers::InternalOffline::removeCollection
virtual void * removeCollection(IdentifierHash hashId) override
Definition
InternalOffline.cxx:99
EventContainers::InternalOffline::addLock
virtual StatusCode addLock(IdentifierHash hashId, const void *ptr) override
Definition
InternalOffline.cxx:91
EventContainers::InternalOffline::InternalOffline
InternalOffline(size_t max)
Definition
InternalOffline.cxx:12
EventContainers::InternalOffline::cleanUp
virtual void cleanUp(deleter_f *deleter) noexcept override
Definition
InternalOffline.cxx:66
EventContainers::InternalOffline::m_map
std::vector< I_InternalIDC::hashPair > m_map
Definition
InternalOffline.h:41
EventContainers::InternalOffline::getAllHashPtrPair
virtual const std::vector< hashPair > & getAllHashPtrPair() const override
Definition
InternalOffline.cxx:48
EventContainers::InternalOffline::cend
virtual InternalConstItr cend() const override
Definition
InternalOffline.cxx:44
IdentifierHash
This is a "hash" representation of an Identifier.
Definition
IdentifierHash.h:25
IdentifierHash::value
constexpr value_type value() const
IdentifierHash::value_type
unsigned int value_type
Definition
IdentifierHash.h:27
EventContainers
Definition
T_AthenaPoolCreateFuncs.h:33
Generated on
for ATLAS Offline Software by
1.17.0