This class takes care of holding EDM objects in memory. More...
#include <THolder.h>
Public Member Functions | |
THolder () | |
Default constructor. | |
THolder (void *object,::TClass *type,::Bool_t owner=kTRUE) | |
Constructor pointing to an object in memory. | |
THolder (void *object, const std::type_info &type,::Bool_t owner=kTRUE) | |
Constructor pointing to an object in memory. | |
THolder (const THolder &parent) | |
Copy constructor. | |
THolder (THolder &&parent) | |
Move constructor. | |
virtual | ~THolder () |
The destructor cleans out the memory used by the managed object. | |
THolder & | operator= (const THolder &rhs) |
Assignment operator. | |
THolder & | operator= (THolder &&rhs) |
Move operator. | |
void * | get () const |
Return a typeless pointer to the held object. | |
void ** | getPtr () |
Return a typeless pointer to the held object's pointer. | |
virtual void | set (void *obj) |
Replace the managed object. | |
::Bool_t | isOwner () const |
Check whether the holder owns its object. | |
void | setOwner (::Bool_t state=kTRUE) |
Set whether the holder should own its object. | |
virtual void * | getAs (const std::type_info &tid,::Bool_t silent=kFALSE) const |
Return the object as a specific pointer. | |
virtual const void * | getAsConst (const std::type_info &tid,::Bool_t silent=kFALSE) const |
Return the object as a specific, constant pointer. | |
::TClass * | getClass () const |
Return the concrete type of the object. | |
const std::type_info * | getTypeInfo () const |
Return the concrete type of the object. | |
void | renew () |
Renew the object in memory. | |
Protected Types | |
typedef std::map< const std::type_info *, TClass * > | TypeCache_t |
Type for the internal cache. | |
typedef std::map< void *, int > | SharedCount_t |
Type implementing the instance counting. | |
Protected Member Functions | |
void | deleteObject () |
Internal function used to delete the managed object from memory. | |
Protected Attributes | |
void * | m_object |
Typeless pointer to the object in memory. | |
::TClass * | m_type |
Concrete type of the object being held on to. | |
const std::type_info * | m_typeInfo |
Concrete type of the object, if it doesn't have a dictionary. | |
::Bool_t | m_owner |
A flag for whether the object owns what it points to. | |
Static Protected Attributes | |
static TypeCache_t | s_typeMap = THolder::TypeCache_t() |
Cache for the requested class types. | |
static SharedCount_t | s_sharedCount = THolder::SharedCount_t() |
Variable counting the different object instances. |
This class takes care of holding EDM objects in memory.
In order to be able to access EDM objects easily as their concrete type, or as one of their base classes, a little trickery is needed.
We always access the branches of the input TTree as their concrete, transient types. It is then up to our own code to decide if the user is requesting the object as a type that it can be cast to, or not.
xAOD::THolder::THolder | ( | const THolder & | parent | ) |
Copy constructor.
The copy constructor takes the pointer from the parent object, and based on whether the parent owned the object or not, increments the shared count.
parent | The parent object that should be copied |
xAOD::THolder::THolder | ( | THolder && | parent | ) |
Move constructor.
This is a tricky one. Since the object is being moved, meaning that the parent will be deleted right after this operation, instead of incrementing and then decrementing the shared count, we just tell the parent that it doesn't own its object anymore. In this case if it did own it, the shared count will remain valid. Since it's this object owning it now. If it didn't own the object in the first place, then no hard no foul.
parent | The parent object that should be moved |
void * xAOD::THolder::getAs | ( | const std::type_info & | tid, | |
::Bool_t | silent = kFALSE | |||
) | const [virtual] |
Return the object as a specific pointer.
This function is used for retrieving an object as one of its bases. It is used when the caller requires a non-const pointer to the managed object.
tid | The type as which the object is to be retrieved | |
silent | When kTRUE , the call will fail silently when unsuccessful |
const void * xAOD::THolder::getAsConst | ( | const std::type_info & | tid, | |
::Bool_t | silent = kFALSE | |||
) | const [virtual] |
Return the object as a specific, constant pointer.
This function is used for retrieving an object as one of its bases. It is used when the caller need a const pointer to the managed object.
tid | The type as which the object is to be retrieved | |
silent | When kTRUE , the call will fail silently when unsuccessful |
Reimplemented in xAOD::TCDVHolderT< T >.
Move operator.
This move operator is necessary to be able to use this type as a value type of STL containers.
See the comments given for the move constructor for an explanation of the behaviour of this operator.
rhs | The object that has to be moved |
Assignment operator.
The copy operator, just like the copy constructor makes the object aware that it doesn't own the object that it has the pointer to.
rhs | The object that has to be copied |
void xAOD::THolder::renew | ( | ) |
Renew the object in memory.
This function is mostly used in "Athena access mode", to delete the managed objects from memory between events, and recreate them from scratch.