ATLAS Offline Software
Classes | Public Types | Public Member Functions | Protected Member Functions | Static Protected Member Functions | Private Attributes | List of all members
SG::ArenaHandleBaseAllocT< ALLOC > Class Template Reference

Base class for Handle classes, containing parts that depend only on the Allocator. More...

#include <ArenaHandleBaseAllocT.h>

Inheritance diagram for SG::ArenaHandleBaseAllocT< ALLOC >:
Collaboration diagram for SG::ArenaHandleBaseAllocT< ALLOC >:

Classes

class  Creator
 Concrete ArenaAllocatorCreator class used to create the Allocator for this handle. More...
 

Public Types

typedef ALLOC alloc_t
 The Allocator we use. More...
 

Public Member Functions

 ArenaHandleBaseAllocT (ArenaHeader *header, size_t index)
 Constructor, passing in an index. More...
 
 ArenaHandleBaseAllocT (ArenaHeader *header, const EventContext &ctx, size_t index)
 Constructor, passing in an index, for a specific event slot. More...
 
 ArenaHandleBaseAllocT (ArenaBase *arena, size_t index)
 Constructor, passing in an index, for a specific Arena. More...
 
const ALLOC::Params & params () const
 Return our Allocator's parameters. More...
 
void reset ()
 Free all allocated elements (of this type in the current Arena). More...
 
void erase ()
 Free all allocated elements and release memory back to the system (of this type in the current Arena). More...
 
void reserve (size_t size)
 Set the total number of elements cached by the allocator (in the current Arena). More...
 
ArenaAllocatorBase::Stats stats () const
 Return the statistics block for this allocator, for the current Arena. More...
 

Protected Member Functions

ALLOC * allocator ()
 Return our current Allocator. More...
 
const ALLOC * allocator () const
 Return our current Allocator. More...
 
ArenaAllocatorBasebaseAllocator ()
 Return the current Allocator which we are referencing. More...
 
const ArenaAllocatorBasebaseAllocator () const
 Return the current Allocator which we are referencing. More...
 

Static Protected Member Functions

template<class HANDLE , class DEFPARAMS >
static size_t makeIndex (const typename ALLOC::Params *params)
 Find the index for creating an allocator. More...
 

Private Attributes

LockedAllocator m_allocator
 The associated allocator object. More...
 

Detailed Description

template<typename ALLOC>
class SG::ArenaHandleBaseAllocT< ALLOC >

Base class for Handle classes, containing parts that depend only on the Allocator.

See Arena.h for an overview of the arena-based memory allocators.

This is the part of Handle that depends only on the Allocator class (on which it is templated). This implementation here is responsible for registering the Allocator and handling its possible creation.

A Handle uses an index to identify the particular Allocator class which it uses; the ArenaAllocatorRegistry class maps between these indices and instances of ArenaAllocatorCreator, which are capable of creating new Allocator instances. An ArenaHandleBaseAllocT may be created by either passing in the index directly or by passing in a concrete instance of ArenaAllocatorCreator. In the latter case, we will look up the index, registering the creator if needed.

Definition at line 52 of file ArenaHandleBaseAllocT.h.

Member Typedef Documentation

◆ alloc_t

template<typename ALLOC >
typedef ALLOC SG::ArenaHandleBaseAllocT< ALLOC >::alloc_t

The Allocator we use.

Definition at line 57 of file ArenaHandleBaseAllocT.h.

Constructor & Destructor Documentation

◆ ArenaHandleBaseAllocT() [1/3]

template<typename ALLOC >
SG::ArenaHandleBaseAllocT< ALLOC >::ArenaHandleBaseAllocT ( ArenaHeader header,
size_t  index 
)

Constructor, passing in an index.

Parameters
headerThe group of Arenas which this Handle may reference. May be null to select the global default.
indexThe index of this Handle's Allocator type.

◆ ArenaHandleBaseAllocT() [2/3]

template<typename ALLOC >
SG::ArenaHandleBaseAllocT< ALLOC >::ArenaHandleBaseAllocT ( ArenaHeader header,
const EventContext &  ctx,
size_t  index 
)

Constructor, passing in an index, for a specific event slot.

Parameters
headerThe group of Arenas which this Handle may reference. May be null to select the global default.
ctxEvent context identifying the event slot.
indexThe index of this Handle's Allocator type.

◆ ArenaHandleBaseAllocT() [3/3]

template<typename ALLOC >
SG::ArenaHandleBaseAllocT< ALLOC >::ArenaHandleBaseAllocT ( ArenaBase arena,
size_t  index 
)

Constructor, passing in an index, for a specific Arena.

Parameters
arenaThe Arena in which to find the allocator.
indexThe index of this Handle's Allocator type.

Member Function Documentation

◆ allocator() [1/2]

template<typename ALLOC >
ALLOC* SG::ArenaHandleBaseAllocT< ALLOC >::allocator ( )
protected

Return our current Allocator.

◆ allocator() [2/2]

template<typename ALLOC >
const ALLOC* SG::ArenaHandleBaseAllocT< ALLOC >::allocator ( ) const
protected

Return our current Allocator.

◆ baseAllocator() [1/2]

ArenaAllocatorBase* SG::ArenaHandleBase::baseAllocator ( )
protectedinherited

Return the current Allocator which we are referencing.

This may cause a new Allocator to be created.

◆ baseAllocator() [2/2]

const ArenaAllocatorBase* SG::ArenaHandleBase::baseAllocator ( ) const
protectedinherited

Return the current Allocator which we are referencing.

This may cause a new Allocator to be created.

◆ erase()

void SG::ArenaHandleBase::erase ( )
inherited

Free all allocated elements and release memory back to the system (of this type in the current Arena).

All elements allocated in the current Arena by our associated Allocator are freed, and all allocated blocks of memory are released back to the system. destructor should be called on them if it was provided (preceded by clear if provided and mustClear was set).

Definition at line 87 of file ArenaHandleBase.cxx.

88 {
89  return baseAllocator()->erase();
90 }

◆ makeIndex()

template<typename ALLOC >
template<class HANDLE , class DEFPARAMS >
static size_t SG::ArenaHandleBaseAllocT< ALLOC >::makeIndex ( const typename ALLOC::Params *  params)
staticprotected

Find the index for creating an allocator.

Parameters
paramsPointer to the supplied parameters. If null, use the result of DEFPARAMS().

We look up in the registry the Allocator name we get from params (if this is blank, a name is derived from ALLOC). If not found, then we register Allocator and return the new index.

◆ params()

template<typename ALLOC >
const ALLOC::Params& SG::ArenaHandleBaseAllocT< ALLOC >::params ( ) const

Return our Allocator's parameters.

◆ reserve()

void SG::ArenaHandleBase::reserve ( size_t  size)
inherited

Set the total number of elements cached by the allocator (in the current Arena).

Parameters
sizeThe desired pool size.

This allows changing the number of elements that are currently free but cached. Any allocated elements are not affected by this call.

If size is greater than the total number of elements currently cached, then more will be allocated. This will preferably done with a single block, but that is not guaranteed; in addition, the allocator may allocate more elements than is requested.

If size is smaller than the total number of elements currently cached, as many blocks as possible will be released back to the system. It may not be possible to release the number of elements requested; this should be implemented on a best-effort basis.

Definition at line 111 of file ArenaHandleBase.cxx.

112 {
113  return baseAllocator()->reserve (size);
114 }

◆ reset()

void SG::ArenaHandleBase::reset ( )
inherited

Free all allocated elements (of this type in the current Arena).

All elements allocated in the current Arena by our associated Allocator are returned to the free state. clear should be called on them if it was provided. The elements may continue to be cached internally, without returning to the system.

Definition at line 71 of file ArenaHandleBase.cxx.

72 {
73  return baseAllocator()->reset();
74 }

◆ stats()

ArenaAllocatorBase::Stats SG::ArenaHandleBase::stats ( ) const
inherited

Return the statistics block for this allocator, for the current Arena.

Definition at line 121 of file ArenaHandleBase.cxx.

122 {
123  return baseAllocator()->stats();
124 }

Member Data Documentation

◆ m_allocator

LockedAllocator SG::ArenaHandleBase::m_allocator
privateinherited

The associated allocator object.

Definition at line 160 of file ArenaHandleBase.h.


The documentation for this class was generated from the following file:
SG::ArenaHandleBase::baseAllocator
ArenaAllocatorBase * baseAllocator()
Return the current Allocator which we are referencing.
SG::ArenaAllocatorBase::stats
virtual Stats stats() const =0
Return the statistics block for this allocator.
SG::ArenaAllocatorBase::reserve
virtual void reserve(size_t size)=0
Set the total number of elements cached by the allocator.
SG::ArenaAllocatorBase::erase
virtual void erase()=0
Free all allocated elements and release memory back to the system.
python.setupRTTAlg.size
int size
Definition: setupRTTAlg.py:39
SG::ArenaAllocatorBase::reset
virtual void reset()=0
Free all allocated elements.