ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Control
AthAllocators
src
ArenaHeader.cxx
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3
*/
11
12
#include "
AthAllocators/ArenaHeader.h
"
13
#include "
AthAllocators/ArenaAllocatorRegistry.h
"
14
#include "
AthAllocators/ArenaAllocatorBase.h
"
15
#include "
AthAllocators/ArenaBase.h
"
16
#include "
CxxUtils/checker_macros.h
"
17
#include <algorithm>
18
#include <ostream>
19
#include <sstream>
20
#include <print>
21
#include <cassert>
22
23
24
namespace
SG
{
25
26
27
void
null_arena_deleter
(
ArenaBase
*) {}
28
29
33
ArenaHeader::ArenaHeader
()
34
// m_arena doesn't own the objects to which it points.
35
// Need to pass in a dummy deleter to prevent them from being deleted.
36
:
m_arena
(
null_arena_deleter
)
37
{
38
}
39
40
46
ArenaHeader::~ArenaHeader
()
47
{
48
// We don't own this.
49
m_arena
.release();
50
}
51
52
58
ArenaBase
*
ArenaHeader::setArena
(
ArenaBase
* arena)
59
{
60
ArenaBase
* ret =
m_arena
.get();
61
m_arena
.release();
62
m_arena
.reset (arena);
63
return
ret;
64
}
65
66
71
void
ArenaHeader::addArena
(
ArenaBase
*
a
)
72
{
73
std::lock_guard<std::mutex>
lock
(
m_mutex
);
74
m_arenas
.push_back (
a
);
75
}
76
77
83
void
ArenaHeader::setArenaForSlot
(
int
slot,
ArenaBase
*
a
)
84
{
85
if
(slot < 0)
return
;
86
std::lock_guard<std::mutex>
lock
(
m_mutex
);
87
if
(slot >=
static_cast<
int
>
(
m_slots
.size())) {
88
m_slots
.resize (slot+1);
89
}
90
m_slots
[slot] =
a
;
91
}
92
93
100
void
ArenaHeader::delArena
(
ArenaBase
*
a
)
101
{
102
std::lock_guard<std::mutex>
lock
(
m_mutex
);
103
std::vector<ArenaBase*>::iterator it =
104
std::find (
m_arenas
.begin(),
m_arenas
.end(),
a
);
105
assert (it !=
m_arenas
.end());
106
m_arenas
.erase (it);
107
}
108
109
114
void
ArenaHeader::report
(std::ostream& os)
const
115
{
116
std::lock_guard<std::mutex>
lock
(
m_mutex
);
117
// All Allocators in the group.
118
for
(
ArenaBase
* arena :
m_arenas
) {
119
std::println (os,
"=== {} ==="
, arena->name());
120
arena->report (os);
121
}
122
123
// The default Arena.
124
std::println (os,
"=== default ==="
);
125
m_defaultArena
.report (os);
126
}
127
128
136
std::string
ArenaHeader::reportStr
()
const
137
{
138
std::ostringstream s;
139
report
(s);
140
return
s.str();
141
}
142
143
152
void
ArenaHeader::reset
()
153
{
154
if
(
m_arena
.get()) {
155
m_arena
->reset();
156
}
157
}
158
159
163
ArenaHeader
*
ArenaHeader::defaultHeader
()
164
{
165
static
ArenaHeader
head
ATLAS_THREAD_SAFE
;
166
return
&
head
;
167
}
168
169
170
}
// namespace SG
ArenaAllocatorBase.h
Common base class for arena allocator classes. See Arena.h for an overview of the arena-based memory ...
ArenaAllocatorRegistry.h
Registry of allocator factories. See Arena.h for an overview of the arena-based memory allocators.
ArenaBase.h
Part of Arena dealing with the list of allocators. Broken out from Arena to avoid a dependency loop w...
ArenaHeader.h
Proxy for a group of Arenas. See Arena.h for an overview of the arena-based memory allocators.
a
static Double_t a
Definition
LArPhysWaveHECTool.cxx:38
checker_macros.h
Define macros for attributes used to control the static checker.
ATLAS_THREAD_SAFE
#define ATLAS_THREAD_SAFE
Definition
checker_macros.h:211
SG::ArenaBase
Part of Arena dealing with the list of allocators.
Definition
ArenaBase.h:42
SG::ArenaHeader::setArena
ArenaBase * setArena(ArenaBase *arena)
Set the current Arena for the current thread.
Definition
ArenaHeader.cxx:58
SG::ArenaHeader::addArena
void addArena(ArenaBase *a)
Add a new Arena to the group.
Definition
ArenaHeader.cxx:71
SG::ArenaHeader::reportStr
std::string reportStr() const
Generate a report of all Arenas in the group, and return the result as a string.
Definition
ArenaHeader.cxx:136
SG::ArenaHeader::delArena
void delArena(ArenaBase *a)
Remove an Arena from the group.
Definition
ArenaHeader.cxx:100
SG::ArenaHeader::m_arenas
std::vector< ArenaBase * > m_arenas
List of all Arenas in our group.
Definition
ArenaHeader.h:165
SG::ArenaHeader::reset
void reset()
Call reset on all Allocators in the current Arena.
Definition
ArenaHeader.cxx:152
SG::ArenaHeader::m_arena
boost::thread_specific_ptr< ArenaBase > m_arena
Current Arena.
Definition
ArenaHeader.h:159
SG::ArenaHeader::report
void report(std::ostream &os) const
Generate a report of all Arenas in the group.
Definition
ArenaHeader.cxx:114
SG::ArenaHeader::~ArenaHeader
~ArenaHeader()
Destructor.
Definition
ArenaHeader.cxx:46
SG::ArenaHeader::m_slots
std::vector< ArenaBase * > m_slots
Arenas indexed by event slot.
Definition
ArenaHeader.h:168
SG::ArenaHeader::ArenaHeader
ArenaHeader()
Constructor.
Definition
ArenaHeader.cxx:33
SG::ArenaHeader::defaultHeader
static ArenaHeader * defaultHeader()
Return the global default Header instance.
Definition
ArenaHeader.cxx:163
SG::ArenaHeader::m_defaultArena
ArenaBase m_defaultArena
The default Arena.
Definition
ArenaHeader.h:162
SG::ArenaHeader::setArenaForSlot
void setArenaForSlot(int slot, ArenaBase *a)
Record the arena associated with an event slot.
Definition
ArenaHeader.cxx:83
SG::ArenaHeader::m_mutex
std::mutex m_mutex
Mutex to protect access to m_defaultArena, m_arenas, and m_slots.
Definition
ArenaHeader.h:171
head
std::string head(std::string s, const std::string &pattern)
head of a string
Definition
computils.cxx:471
SG
Forward declaration.
Definition
CaloCellPacker_400_500.h:32
SG::null_arena_deleter
void null_arena_deleter(ArenaBase *)
Definition
ArenaHeader.cxx:27
SG::lock
virtual void lock() override
Lock the container.
Generated on
for ATLAS Offline Software by
1.17.0