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