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-2017 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
// $Id: ArenaHeader.cxx 470529 2011-11-24 23:54:22Z ssnyder $
13
14
#include "
AthAllocators/ArenaHeader.h
"
15
#include "
AthAllocators/ArenaAllocatorRegistry.h
"
16
#include "
AthAllocators/ArenaAllocatorBase.h
"
17
#include "
AthAllocators/ArenaBase.h
"
18
#include "
CxxUtils/checker_macros.h
"
19
#include <algorithm>
20
#include <ostream>
21
#include <sstream>
22
#include <cassert>
23
24
25
namespace
SG
{
26
27
28
void
null_arena_deleter
(
ArenaBase
*) {}
29
30
34
ArenaHeader::ArenaHeader
()
35
// m_arena doesn't own the objects to which it points.
36
// Need to pass in a dummy deleter to prevent them from being deleted.
37
:
m_arena
(
null_arena_deleter
)
38
{
39
}
40
41
47
ArenaHeader::~ArenaHeader
()
48
{
49
// We don't own this.
50
m_arena
.release();
51
}
52
53
59
ArenaBase
*
ArenaHeader::setArena
(
ArenaBase
* arena)
60
{
61
ArenaBase
* ret =
m_arena
.get();
62
m_arena
.release();
63
m_arena
.reset (arena);
64
return
ret;
65
}
66
67
72
void
ArenaHeader::addArena
(
ArenaBase
*
a
)
73
{
74
std::lock_guard<std::mutex>
lock
(
m_mutex
);
75
m_arenas
.push_back (
a
);
76
}
77
78
84
void
ArenaHeader::setArenaForSlot
(
int
slot,
ArenaBase
*
a
)
85
{
86
if
(slot < 0)
return
;
87
std::lock_guard<std::mutex>
lock
(
m_mutex
);
88
if
(slot >=
static_cast<
int
>
(
m_slots
.size())) {
89
m_slots
.resize (slot+1);
90
}
91
m_slots
[slot] =
a
;
92
}
93
94
101
void
ArenaHeader::delArena
(
ArenaBase
*
a
)
102
{
103
std::lock_guard<std::mutex>
lock
(
m_mutex
);
104
std::vector<ArenaBase*>::iterator it =
105
std::find (
m_arenas
.begin(),
m_arenas
.end(),
a
);
106
assert (it !=
m_arenas
.end());
107
m_arenas
.erase (it);
108
}
109
110
115
void
ArenaHeader::report
(std::ostream& os)
const
116
{
117
std::lock_guard<std::mutex>
lock
(
m_mutex
);
118
// All Allocators in the group.
119
for
(
ArenaBase
* arena :
m_arenas
) {
120
os <<
"=== "
<< arena->name() <<
" ==="
<< std::endl;
121
arena->report (os);
122
}
123
124
// The default Arena.
125
os <<
"=== default ==="
<< std::endl;
126
m_defaultArena
.report (os);
127
}
128
129
137
std::string
ArenaHeader::reportStr
()
const
138
{
139
std::ostringstream s;
140
report
(s);
141
return
s.str();
142
}
143
144
153
void
ArenaHeader::reset
()
154
{
155
if
(
m_arena
.get()) {
156
m_arena
->reset();
157
}
158
}
159
160
164
ArenaHeader
*
ArenaHeader::defaultHeader
()
165
{
166
static
ArenaHeader
head
ATLAS_THREAD_SAFE
;
167
return
&
head
;
168
}
169
170
171
}
// 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:59
SG::ArenaHeader::addArena
void addArena(ArenaBase *a)
Add a new Arena to the group.
Definition
ArenaHeader.cxx:72
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:137
SG::ArenaHeader::delArena
void delArena(ArenaBase *a)
Remove an Arena from the group.
Definition
ArenaHeader.cxx:101
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:153
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:115
SG::ArenaHeader::~ArenaHeader
~ArenaHeader()
Destructor.
Definition
ArenaHeader.cxx:47
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:34
SG::ArenaHeader::defaultHeader
static ArenaHeader * defaultHeader()
Return the global default Header instance.
Definition
ArenaHeader.cxx:164
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:84
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:312
SG
Forward declaration.
Definition
CaloCellPacker_400_500.h:32
SG::null_arena_deleter
void null_arena_deleter(ArenaBase *)
Definition
ArenaHeader.cxx:28
SG::lock
virtual void lock() override
Lock the container.
Generated on
for ATLAS Offline Software by
1.17.0