ATLAS Offline Software
Loading...
Searching...
No Matches
SG::ArenaBase Class Reference

Part of Arena dealing with the list of allocators. More...

#include <ArenaBase.h>

Inheritance diagram for SG::ArenaBase:
Collaboration diagram for SG::ArenaBase:

Classes

struct  AllocEntry
 Our allocator vector. More...

Public Member Functions

 ArenaBase (const std::string &name="")
 Constructor.
virtual ~ArenaBase ()
 Destructor.
 ArenaBase (const ArenaBase &)=delete
ArenaBaseoperator= (const ArenaBase &)=delete
LockedAllocator allocator (size_t i)
 Translate an integer index to an Allocator pointer.
void reset ()
 Reset all contained allocators.
void erase ()
 Erase all contained allocators.
void report (std::ostream &os) const
 Generate a report of the memory in use by this Arena.
ArenaAllocatorBase::Stats stats () const
 Return statistics summed over all allocators in this Arena.
const std::string & name () const
 Return this Arena's name.

Private Types

typedef std::lock_guard< std::mutex > lock_t

Private Member Functions

ArenaAllocatorBasemakeAllocator (size_t i)
 Make a new Allocator for index i.

Private Attributes

std::vector< AllocEntrym_allocs
std::string m_name
 Our name.
std::mutex m_mutex
 To guard access to m_allocs.

Detailed Description

Part of Arena dealing with the list of allocators.

Broken out from Arena to avoid a dependency loop with ArenaHeader. See Arena.h for an overview of the arena-based memory allocators.

Definition at line 41 of file ArenaBase.h.

Member Typedef Documentation

◆ lock_t

typedef std::lock_guard<std::mutex> SG::ArenaBase::lock_t
private

Definition at line 102 of file ArenaBase.h.

Constructor & Destructor Documentation

◆ ArenaBase() [1/2]

SG::ArenaBase::ArenaBase ( const std::string & name = "")

Constructor.

Parameters
nameThe name of this Arena; to use in reports.

Definition at line 27 of file ArenaBase.cxx.

28 : m_name (name)
29{
30}
const std::string & name() const
Return this Arena's name.
std::string m_name
Our name.
Definition ArenaBase.h:127

◆ ~ArenaBase()

SG::ArenaBase::~ArenaBase ( )
virtual

Destructor.

Definition at line 36 of file ArenaBase.cxx.

37{
38}

◆ ArenaBase() [2/2]

SG::ArenaBase::ArenaBase ( const ArenaBase & )
delete

Member Function Documentation

◆ allocator()

LockedAllocator SG::ArenaBase::allocator ( size_t i)

Translate an integer index to an Allocator pointer.

Parameters
iThe index to look up.

If the index isn't valid, an assertion will be tripped.

◆ erase()

void SG::ArenaBase::erase ( )

Erase all contained allocators.

All elements will be freed, and the memory returned to the system.

Definition at line 60 of file ArenaBase.cxx.

61{
63 for (AllocEntry& alloc : m_allocs) {
64 if (alloc.m_alloc) {
65 lock_t alloc_lock (*alloc.m_mutex);
66 alloc.m_alloc->erase();
67 }
68 }
69}
std::lock_guard< std::mutex > lock_t
Definition ArenaBase.h:102
std::mutex m_mutex
To guard access to m_allocs.
Definition ArenaBase.h:130
std::vector< AllocEntry > m_allocs
Definition ArenaBase.h:124
l
Printing final latex table to .tex output file.
Our allocator vector.
Definition ArenaBase.h:120

◆ makeAllocator()

ArenaAllocatorBase * SG::ArenaBase::makeAllocator ( size_t i)
private

Make a new Allocator for index i.

Parameters
iThe index of the Allocator.

The Allocator vector was empty for index i. Make an appropriate new Allocator, store it in the vector, and return it. Will trip an assertion if the index is not valid.

This should be called with m_mutex held.

Definition at line 130 of file ArenaBase.cxx.

131{
132 // We have to create a new Allocator.
133 // Make sure there's room in the vector.
134 if (m_allocs.size() <= i) {
135 m_allocs.resize (i+1);
136 }
137
138 // Create the Allocator, using the Registry.
139 std::unique_ptr<ArenaAllocatorBase> alloc =
141
142 // Install it in the vector.
143 m_allocs[i].m_alloc = std::move (alloc);
144 m_allocs[i].m_mutex = std::make_unique<std::mutex>();
145
146 return m_allocs[i].m_alloc.get();
147}
std::unique_ptr< ArenaAllocatorBase > create(size_t i)
Create a new instance of an allocator.
static ArenaAllocatorRegistry * instance()
Return a pointer to the global ArenaAllocatorRegistry instance.

◆ name()

const std::string & SG::ArenaBase::name ( ) const

Return this Arena's name.

Definition at line 114 of file ArenaBase.cxx.

115{
116 return m_name;
117}

◆ operator=()

ArenaBase & SG::ArenaBase::operator= ( const ArenaBase & )
delete

◆ report()

void SG::ArenaBase::report ( std::ostream & os) const

Generate a report of the memory in use by this Arena.

Parameters
osThe stream to which to write the report.

Definition at line 76 of file ArenaBase.cxx.

77{
79 bool first = true;
80 for (const AllocEntry& alloc : m_allocs) {
81 if (alloc.m_alloc) {
82 if (first) {
84 os << std::endl;
85 first = false;
86 }
87 lock_t alloc_lock (*alloc.m_mutex);
88 alloc.m_alloc->report (os);
89 }
90 }
91}
bool first
Definition DeMoScan.py:534
static void header(std::ostream &os)
Print report header.

◆ reset()

void SG::ArenaBase::reset ( )

Reset all contained allocators.

All elements will be freed.

Definition at line 44 of file ArenaBase.cxx.

45{
47 for (AllocEntry& alloc : m_allocs) {
48 if (alloc.m_alloc) {
49 lock_t alloc_lock (*alloc.m_mutex);
50 alloc.m_alloc->reset();
51 }
52 }
53}

◆ stats()

ArenaAllocatorBase::Stats SG::ArenaBase::stats ( ) const

Return statistics summed over all allocators in this Arena.

Definition at line 97 of file ArenaBase.cxx.

98{
99 ArenaAllocatorBase::Stats stats;
100 lock_t l (m_mutex);
101 for (const AllocEntry& alloc : m_allocs) {
102 if (alloc.m_alloc) {
103 lock_t alloc_lock (*alloc.m_mutex);
104 stats += alloc.m_alloc->stats();
105 }
106 }
107 return stats;
108}
ArenaAllocatorBase::Stats stats() const
Return statistics summed over all allocators in this Arena.
Definition ArenaBase.cxx:97

Member Data Documentation

◆ m_allocs

std::vector<AllocEntry> SG::ArenaBase::m_allocs
private

Definition at line 124 of file ArenaBase.h.

◆ m_mutex

std::mutex SG::ArenaBase::m_mutex
mutableprivate

To guard access to m_allocs.

Definition at line 130 of file ArenaBase.h.

◆ m_name

std::string SG::ArenaBase::m_name
private

Our name.

Definition at line 127 of file ArenaBase.h.


The documentation for this class was generated from the following files: