ATLAS Offline Software
|
ElementLink implementation for ROOT usage. More...
#include <ElementLink.h>
Public Types | |
typedef Traits::IndexingPolicy | IndexingPolicy |
The indexing policy. More... | |
typedef IndexingPolicy::index_type | index_type |
The index type presented to and returned from the link. More... | |
typedef Base::sgkey_t | sgkey_t |
Type of hashed keys. More... | |
typedef Base::ID_type | ID_type |
Type of string keys. More... | |
typedef STORABLE | value_type |
Type of container (storable) and derived types. More... | |
typedef STORABLE * | pointer |
typedef const STORABLE * | const_pointer |
typedef const STORABLE & | BaseConstReference |
typedef const STORABLE * | BaseConstPointer |
typedef IndexingPolicy::ElementType | ElementType |
Container element and derived types. More... | |
typedef IndexingPolicy::ElementConstReference | ElementConstReference |
typedef IndexingPolicy::ElementConstPointer | ElementConstPointer |
typedef INDEXING_POLICY::stored_index_type | stored_index_type |
The type of the index as it is stored internally. More... | |
Type definitions taken from the StoreGate-based implementation | |
typedef std::string | ID_type |
Type of the "regular" identifiers in the event. More... | |
typedef uint32_t | sgkey_t |
Integer identifier for the object in the event. More... | |
typedef const STORABLE & | BaseConstReference |
Constant reference to the container. More... | |
typedef const STORABLE * | BaseConstPointer |
Constant pointer to the container. More... | |
typedef size_t | index_type |
Type of the index used on the container. More... | |
typedef STORABLE::value_type | value_type |
Type of the values inside the container. More... | |
typedef STORABLE::const_iterator | const_iterator |
Constant iterator type for the container. More... | |
typedef TypeTools::Copy< value_type >::type | ElementType |
Type of the elements in the container. More... | |
typedef TypeTools::Copy< value_type >::const_reference | ElementConstReference |
Constant reference to an element in the container. More... | |
typedef TypeTools::Copy< value_type >::const_pointer | ElementConstPointer |
Constant pointer to an element in the container. More... | |
Public Member Functions | |
ElementLink & | operator= (const ElementLink &rhs) |
Assignment operator. More... | |
xAOD::TVirtualEvent * | source () const |
Get the data source for the reference. More... | |
bool | toPersistent () |
Dummy function provinding the offline interface. More... | |
bool | isDefaultIndex () const |
Test the index validity. More... | |
bool | isDefault () const |
Test to see if this link is in the default state. More... | |
const SG::DataProxy * | proxy () const |
Return the SG proxy for the container holding this element. More... | |
bool | toTransient (IProxyDict *sg=0) |
Finish initialization after link has been read. More... | |
bool | thin () |
Adjust for thinning. More... | |
bool | thin (const SG::ThinningCache *thinningCache) |
Adjust for thinning. More... | |
Constructors. | |
ElementLink () | |
Default constructor. More... | |
ElementLink (const ID_type &dataID, index_type elemID, IProxyDict *sg=0) | |
Construct a link from a string storable key and an index. More... | |
ElementLink (const ID_type &dataID, index_type elemID, const EventContext &ctx) | |
Construct a link from a string storable key and an index. More... | |
ElementLink (sgkey_t key, index_type elemID, IProxyDict *sg=0) | |
Construct a link from a hashed storable key and an index. More... | |
ElementLink (sgkey_t key, index_type elemID, const EventContext &ctx) | |
Construct a link from a hashed storable key and an index. More... | |
ElementLink (const ID_type &dataID, index_type elemID, ElementType pEl, IProxyDict *sg=0) | |
Construct from a string storable key, index, AND pointer to element. More... | |
ElementLink (const ID_type &dataID, index_type elemID, ElementType pEl, const EventContext &ctx) | |
Construct from a string storable key, index, AND pointer to element. More... | |
ElementLink (sgkey_t key, index_type elemID, ElementType pEl, IProxyDict *sg=0) | |
Construct from a hashed storable key, index, AND pointer to element. More... | |
ElementLink (sgkey_t key, index_type elemID, ElementType pEl, const EventContext &ctx) | |
Construct from a hashed storable key, index, AND pointer to element. More... | |
ElementLink (BaseConstReference data, index_type elemID, IProxyDict *sg=0) | |
Construct a link from an index and reference to the container. More... | |
ElementLink (BaseConstReference data, index_type elemID, const EventContext &ctx) | |
Construct a link from an index and reference to the container. More... | |
ElementLink (const ElementType &element, BaseConstReference data, IProxyDict *sg=0) | |
Construct from an element and reference to the container. More... | |
ElementLink (const ElementType &element, BaseConstReference data, const EventContext &ctx) | |
Construct from an element and reference to the container. More... | |
ElementLink (const ElementLink &other, index_type elemID) | |
Construct a link from another link, changing the index. More... | |
ElementLink (const DataLink< STORABLE > &dlink, index_type index) | |
Construct a link from a DataLink and an index. More... | |
template<class U > | |
ElementLink (const ElementLink< U > &other) | |
Constructor allowing a derived -> base conversion. More... | |
ElementLink (const ElementLink &)=default | |
ElementLink & | operator= (const ElementLink &)=default |
Dereferencing the link. | |
const_pointer | getDataPtr () const |
Return a pointer to the currently-referenced container object. More... | |
pointer | getDataNonConstPtr () |
Return a pointer to the currently-referenced container object. More... | |
DataLink< STORABLE > | getDataLink () |
Return a link to the currently-referenced container object. More... | |
const DataLink< STORABLE > | getDataLink () const |
Return a link to the currently-referenced container object. More... | |
BaseConstPointer | getStorableObjectPointer () const |
Return a pointer to the currently-referenced container object. More... | |
BaseConstReference | getStorableObjectRef () const |
Return a reference to the currently-referenced container object. More... | |
ElementConstPointer | cptr () const |
Return a pointer to the referenced element. More... | |
ElementConstReference | operator* () const |
Return a reference to the referenced element. More... | |
ElementConstPointer | operator-> () const |
Return a pointer to the referenced element. More... | |
operator ElementConstPointer () const | |
Convert to a pointer to the referenced element. More... | |
bool | isValid () const |
Test to see if the link can be dereferenced. More... | |
bool | operator! () const |
Test to see if the link can not be dereferenced. More... | |
ElementType | cachedElement () const |
Return the cached element, if any. More... | |
Constructors | |
ElementLink () | |
Default constructor. More... | |
ElementLink (xAOD::TVirtualEvent *event) | |
Constructor setting up the link with a specific event object. More... | |
ElementLink (const ID_type &key, index_type index, xAOD::TVirtualEvent *event=0) | |
Construct object from storable key and element index (fast) More... | |
ElementLink (sgkey_t id, index_type index, xAOD::TVirtualEvent *event=0) | |
Construct object from storable id and element index (fastest) More... | |
ElementLink (const ID_type &key, index_type index, ElementType element, xAOD::TVirtualEvent *event=0) | |
Construct from a storable key and element index, taking the element object from the user. More... | |
ElementLink (sgkey_t id, index_type index, ElementType element, xAOD::TVirtualEvent *event=0) | |
Construct from a storable id and element index, taking the element object from the user. More... | |
ElementLink (BaseConstReference container, index_type index, xAOD::TVirtualEvent *event=0) | |
Construct from a container reference and element index (slower) More... | |
ElementLink (ElementType element, BaseConstReference container, xAOD::TVirtualEvent *event=0) | |
Construct from a container reference and element pointer (slowest) More... | |
ElementLink (const ElementLink &parent) | |
Copy-constructor. More... | |
Setter functions | |
bool | toIndexedElement (BaseConstReference container, index_type index) |
Set link to point to given index (slower) More... | |
bool | toContainedElement (BaseConstReference container, ElementType element) |
Set link to point to given element (slowest) More... | |
bool | setElement (ElementType element) |
Set link to point to an Element (slowest) More... | |
bool | setStorableObject (BaseConstReference data, bool replace=false) |
Set link storable to data object pointed by data (slower) More... | |
void | resetWithKeyAndIndex (const ID_type &key, index_type index, xAOD::TVirtualEvent *event=0) |
Reset with storable key and element index (fast) More... | |
void | resetWithKeyAndIndex (sgkey_t id, index_type index, xAOD::TVirtualEvent *event=0) |
Reset with storable id and element index (fastest) More... | |
void | reset () |
Reset to default state. More... | |
Accessor functions/operators | |
BaseConstPointer | getStorableObjectPointer () const |
Retrieve storable object pointer. More... | |
BaseConstReference | getStorableObjectRef () const |
Retrieve storable object reference. More... | |
index_type | index () const |
Get the index of the element inside of its container. More... | |
const ID_type & | dataID () const |
Get the key that we reference, as a string. More... | |
sgkey_t | key () const |
Get the key that we reference, as a hash. More... | |
bool | operator== (const ElementLink &rhs) const |
Comparison operator. More... | |
bool | operator!= (const ElementLink &rhs) const |
Comparison operator. More... | |
ElementConstReference | operator* () const |
Get a reference to the object in question. More... | |
ElementConstPointer | operator-> () const |
Access the object as a smart pointer. More... | |
operator ElementConstPointer () const | |
Auto-convert to the element type. More... | |
ElementConstPointer | cptr () const |
Get a constant pointer to the referenced object. More... | |
bool | isValid () const |
Check if the element can be found. More... | |
bool | operator! () const |
Operator checking the validity of the link. More... | |
ElementType | cachedElement () const |
Access the currently cached element. Doesn't trigger lookup. More... | |
bool | hasCachedElement () const |
Check if the link has a cached element pointer. More... | |
Static Public Member Functions | |
static const CLID & | classID () |
Return the CLID for the class that we reference. More... | |
Protected Member Functions | |
void * | storableBase (castfn_t *castfn, const CLID &clid, bool isConst) const |
Return a pointer to the currently-referenced container object. More... | |
bool | setStorableObject (const_pointer_t data, CLID link_clid, bool replace, IProxyDict *sg) |
Set the container referenced by the link to data . More... | |
bool | toIndexedElement (const_pointer_t obj, CLID link_clid, const index_type &elemID, IProxyDict *sg) |
Set the to an element given by index and pointer to container. More... | |
void | resetWithKeyAndIndex (const ID_type &dataID, CLID link_clid, const index_type &elemID, IProxyDict *sg) |
Set the link to an element given by string key and index. More... | |
void | resetWithKeyAndIndex (sgkey_t key, CLID link_clid, const index_type &elemID, IProxyDict *sg) |
Set the link to an element given by string key and index. More... | |
void | setIndex (const index_type &index) |
Set the index part of the link. More... | |
const stored_index_type & | storedIndex () const |
Return the stored representation of the link index. More... | |
void | setCachedElement (const ElementType &elt) const |
Set the cached element stored in the link. More... | |
void | storeCachedElement (const ElementType &elt) |
Set the cached element stored in the link. More... | |
bool | getCachedElement (ElementConstPointer &elt) const |
Retrieve the cached element from the link. More... | |
const SG::DataProxyHolder & | proxyHolder () const |
Return the internal proxy holder object. More... | |
Private Types | |
typedef SG::ElementLinkTraits< STORABLE > | Traits |
Traits class, from which to derive types. More... | |
typedef Traits::Base | Base |
Base class (factoring out code that doesn't directly depend on STORABLE). More... | |
typedef Base::castfn_t | castfn_t |
Function casting from a SG::DataProxy to a pointer. More... | |
typedef ROOT::Meta::Selection::ElementLink< STORABLE >::self | DictSel |
Needed to take the Reflex/Cling specifications into account. More... | |
typedef SG::DataProxyHolder::const_pointer_t | const_pointer_t |
Generic pointer to the container (storable). More... | |
Private Member Functions | |
virtual bool | toTransient () |
Reset the object's internal cache. More... | |
void | findIdentifier () |
Find the identifier of the object being pointed to. More... | |
void | findIndex () |
Find the index of an element inside the container. More... | |
template<class INDEX > | |
requires (std::convertible_to< INDEX, size_t > &&std::convertible_to< size_t, INDEX >) bool thin1(INDEX &persIndex | |
Adjust for thinning. More... | |
template<class INDEX > | |
requires (!(std::convertible_to< INDEX, size_t > &&std::convertible_to< size_t, INDEX >)) bool thin1(INDEX &persIndex | |
Adjust for thinning. More... | |
Private Attributes | |
BaseConstPointer | m_container |
Cached pointer to the container. More... | |
ElementType | m_element |
Cached pointer to the object. More... | |
bool | m_elementCached |
Status of the cached pointer. More... | |
xAOD::TVirtualEvent * | m_event |
Pointer to the event object. More... | |
const SG::ThinningCache * | thinningCache |
SG::sgkey_t | m_key |
The hashed key for this link. More... | |
stored_index_type | m_index |
The index of the element within the container for this link. More... | |
SG::DataProxyHolder | m_proxy |
SG proxy for this link. More... | |
Modifying the link. | |
bool | toIndexedElement (BaseConstReference data, index_type elemID, IProxyDict *sg=0) |
Set the link to an element given by index and pointer to container. More... | |
bool | toIndexedElement (BaseConstReference data, index_type elemID, const EventContext &ctx) |
Set the link to an element given by index and pointer to container. More... | |
bool | toContainedElement (BaseConstReference data, ElementType element, IProxyDict *sg=0) |
Set from element pointer and a reference to the container (storable) More... | |
bool | toContainedElement (BaseConstReference data, ElementType element, const EventContext &ctx) |
Set from element pointer and a reference to the container (storable) More... | |
bool | setElement (ElementType element) |
Set to point to an element. More... | |
bool | setStorableObject (BaseConstReference data, bool replace=false, IProxyDict *sg=0) |
Set link to point to a new container (storable). More... | |
bool | setStorableObject (BaseConstReference data, bool replace, const EventContext &ctx) |
Set link to point to a new container (storable). More... | |
void | resetWithKeyAndIndex (const ID_type &dataID, index_type elemID, IProxyDict *sg=0) |
Set the link to an element given by string key and index. More... | |
void | resetWithKeyAndIndex (const ID_type &dataID, index_type elemID, const EventContext &ctx) |
Set the link to an element given by string key and index. More... | |
void | resetWithKeyAndIndex (sgkey_t key, index_type elemID, IProxyDict *sg=0) |
Set the link to an element given by string key and index. More... | |
void | resetWithKeyAndIndex (sgkey_t key, index_type elemID, const EventContext &ctx) |
Set the link to an element given by string key and index. More... | |
const void * | storable () const |
Return a (void) pointer to the currently-referenced container object. More... | |
void * | storableNonConst () |
Return a (void) pointer to the currently-referenced container object. More... | |
ElementLink implementation for ROOT usage.
a persistable pointer to an element of a STORABLE (data object)
This class follows the interface of the offline implementation of ElementLink as closely as reasonably possible. Its functions are supposed to behave the same way as the functions of the offline ElementLink class.
STORABLE | host object type (e,g. vector<Elem>, NOT Elem), |
An ElementLink
maintains a reference to a container that can be in StoreGate (a la DataLink
) and an index within that container. This then identifies an element within the container.
The preferred way to initialize an ElementLink
is with the StoreGate key and index. However, the link may also be initialized using the container directly instead of the key, or with the element directly. In the latter case, the reference to the container can be specified later. Be aware, though, that if you initialize the link from the element directly, without the index, the container will have to be searched if the index is needed, which could be slow. Also, if the index and StoreGate key are not available (for example, the container wasn't recorded in StoreGate), then the link will not be persistable.
The relationship between the container and the index is encapsulated by an ‘indexing policy’ class. You normally don't need to worry about this, as the appropriate policy is automatically chosen for STL sequence types as well as for STL set and map types. However, it is possible to customize the policy used, if needed. See the macros in DeclareIndexingPolicy.h; the interface required of an indexing policy is summarized in tools/ElementLinkTraits.h.
Regardless of the indexing policy, all container types must support empty().
Forward declarations:
Dealing with forward declarations has been a problem. For example, you have a class MyCont
which is a vector of pointers to MyElt
, where MyElt
contains an ElementLink<MyCont>
. Here is a way to get this to work.
In your header for MyElt
, make a forward declaration for MyCont
. Then include the special macro ELEMENTLINK_FWD:
where the first argument is the container type and the second argument is the base type of the (pointer) value type of the container. You can then write a data member of type ElementLink<MyCont>
. You will need to have the complete definition of MyCont
available in order to actaully call methods on the link, so you'll likely need to include the header for MyCont
within the implementation file for MyElt
. A more complete example of what the header for MyElt
might look like:
Restrictions:
DataVector
works.)MyCont
can't be a typedef. In most cases, MyCont
will have to be a class that derives from the actual container class.ELEMENTLINK_FWD
macro must be used in the global scope (outside of any namespace).Implementation notes:
Internally, we store a hashed SG key, a DataProxyHolder
instance to encapsulate access to the DataProxy
, the index, and a cached copy of the element to which we refer. These last two are in general of arbitrary type. However, the vast majority of EL instantiations refer to vectors of pointers; in that case, we can get away fixed types for these (an unsigned for the index and a void* for the cached element). Since it makes ROOT I/O easier if our state is in a non-templated class, we move all the state of ElementLink
into a base class. The particular type of base class is chosen by ElementLinkTraits:
the non-templated class ElementLinkBase
is used for the vector of pointers case, while the templated GenericElementLinkBase
class is used for the general case.
Definition at line 121 of file AthLinks/ElementLink.h.
|
private |
Base class (factoring out code that doesn't directly depend on STORABLE).
Definition at line 129 of file AthLinks/ElementLink.h.
typedef const STORABLE* ElementLink< STORABLE >::BaseConstPointer |
Constant pointer to the container.
Definition at line 53 of file A/AthLinks/ElementLink.h.
typedef const STORABLE* ElementLink< STORABLE >::BaseConstPointer |
Definition at line 153 of file AthLinks/ElementLink.h.
typedef const STORABLE& ElementLink< STORABLE >::BaseConstReference |
Constant reference to the container.
Definition at line 51 of file A/AthLinks/ElementLink.h.
typedef const STORABLE& ElementLink< STORABLE >::BaseConstReference |
Definition at line 152 of file AthLinks/ElementLink.h.
|
private |
Function casting from a SG::DataProxy
to a pointer.
Definition at line 132 of file AthLinks/ElementLink.h.
typedef STORABLE::const_iterator ElementLink< STORABLE >::const_iterator |
Constant iterator type for the container.
Definition at line 61 of file A/AthLinks/ElementLink.h.
typedef const STORABLE* ElementLink< STORABLE >::const_pointer |
Definition at line 151 of file AthLinks/ElementLink.h.
|
privateinherited |
Generic pointer to the container (storable).
Definition at line 84 of file GenericElementLinkBase.h.
|
private |
Needed to take the Reflex/Cling specifications into account.
Definition at line 207 of file A/AthLinks/ElementLink.h.
typedef TypeTools::Copy< value_type >::const_pointer ElementLink< STORABLE >::ElementConstPointer |
Constant pointer to an element in the container.
Definition at line 70 of file A/AthLinks/ElementLink.h.
typedef IndexingPolicy::ElementConstPointer ElementLink< STORABLE >::ElementConstPointer |
Definition at line 159 of file AthLinks/ElementLink.h.
typedef TypeTools::Copy< value_type >::const_reference ElementLink< STORABLE >::ElementConstReference |
Constant reference to an element in the container.
Definition at line 67 of file A/AthLinks/ElementLink.h.
typedef IndexingPolicy::ElementConstReference ElementLink< STORABLE >::ElementConstReference |
Definition at line 158 of file AthLinks/ElementLink.h.
typedef TypeTools::Copy< value_type >::type ElementLink< STORABLE >::ElementType |
Type of the elements in the container.
Definition at line 64 of file A/AthLinks/ElementLink.h.
typedef IndexingPolicy::ElementType ElementLink< STORABLE >::ElementType |
Container element and derived types.
Definition at line 157 of file AthLinks/ElementLink.h.
typedef std::string ElementLink< STORABLE >::ID_type |
Type of the "regular" identifiers in the event.
Definition at line 46 of file A/AthLinks/ElementLink.h.
typedef Base::ID_type ElementLink< STORABLE >::ID_type |
Type of string keys.
Definition at line 146 of file AthLinks/ElementLink.h.
typedef size_t ElementLink< STORABLE >::index_type |
Type of the index used on the container.
Definition at line 56 of file A/AthLinks/ElementLink.h.
typedef IndexingPolicy::index_type ElementLink< STORABLE >::index_type |
The index type presented to and returned from the link.
Definition at line 140 of file AthLinks/ElementLink.h.
typedef Traits::IndexingPolicy ElementLink< STORABLE >::IndexingPolicy |
The indexing policy.
Definition at line 137 of file AthLinks/ElementLink.h.
typedef STORABLE* ElementLink< STORABLE >::pointer |
Definition at line 150 of file AthLinks/ElementLink.h.
typedef uint32_t ElementLink< STORABLE >::sgkey_t |
Integer identifier for the object in the event.
Definition at line 48 of file A/AthLinks/ElementLink.h.
typedef Base::sgkey_t ElementLink< STORABLE >::sgkey_t |
Type of hashed keys.
Definition at line 143 of file AthLinks/ElementLink.h.
|
inherited |
The type of the index as it is stored internally.
Definition at line 92 of file GenericElementLinkBase.h.
|
private |
Traits class, from which to derive types.
Definition at line 126 of file AthLinks/ElementLink.h.
typedef STORABLE::value_type ElementLink< STORABLE >::value_type |
Type of the values inside the container.
Definition at line 59 of file A/AthLinks/ElementLink.h.
typedef STORABLE ElementLink< STORABLE >::value_type |
Type of container (storable) and derived types.
Definition at line 149 of file AthLinks/ElementLink.h.
ElementLink< STORABLE >::ElementLink | ( | ) |
Default constructor.
Makes a null link.
ElementLink< STORABLE >::ElementLink | ( | const ID_type & | dataID, |
index_type | elemID, | ||
IProxyDict * | sg = 0 |
||
) |
Construct a link from a string storable key and an index.
O(1)
dataID | Key of the object. |
elemID | The index of the element within the container. |
sg | Associated store. |
If sg
is 0, we take the global default.
ElementLink< STORABLE >::ElementLink | ( | const ID_type & | dataID, |
index_type | elemID, | ||
const EventContext & | ctx | ||
) |
Construct a link from a string storable key and an index.
O(1)
dataID | Key of the object. |
elemID | The index of the element within the container. |
ctx | Event context for this link. |
ElementLink< STORABLE >::ElementLink | ( | sgkey_t | key, |
index_type | elemID, | ||
IProxyDict * | sg = 0 |
||
) |
Construct a link from a hashed storable key and an index.
O(1)
key | Hashed key of the object. |
elemID | The index of the element within the container. |
sg | Associated store. |
If sg
is 0, we take the global default.
ElementLink< STORABLE >::ElementLink | ( | sgkey_t | key, |
index_type | elemID, | ||
const EventContext & | ctx | ||
) |
Construct a link from a hashed storable key and an index.
O(1)
key | Hashed key of the object. |
elemID | The index of the element within the container. |
ctx | Event context for this link. |
ElementLink< STORABLE >::ElementLink | ( | const ID_type & | dataID, |
index_type | elemID, | ||
ElementType | pEl, | ||
IProxyDict * | sg = 0 |
||
) |
Construct from a string storable key, index, AND pointer to element.
O(1)
dataID | Key of the object. |
elemID | The index of the element within the container. |
pEl | Pointer to the element. |
sg | Associated store. |
USE CAREFULLY: no coherency checks, we just trust you!
If sg
is 0, we take the global default.
ElementLink< STORABLE >::ElementLink | ( | const ID_type & | dataID, |
index_type | elemID, | ||
ElementType | pEl, | ||
const EventContext & | ctx | ||
) |
Construct from a string storable key, index, AND pointer to element.
O(1)
dataID | Key of the object. |
elemID | The index of the element within the container. |
pEl | Pointer to the element. |
ctx | Event context for this link. |
USE CAREFULLY: no coherency checks, we just trust you!
ElementLink< STORABLE >::ElementLink | ( | sgkey_t | key, |
index_type | elemID, | ||
ElementType | pEl, | ||
IProxyDict * | sg = 0 |
||
) |
Construct from a hashed storable key, index, AND pointer to element.
O(1)
key | Hashed key of the object. |
elemID | The index of the element within the container. |
pEl | Pointer to the element. |
sg | Associated store. |
USE CAREFULLY: no coherency checks, we just trust you!
If sg
is 0, we take the global default.
ElementLink< STORABLE >::ElementLink | ( | sgkey_t | key, |
index_type | elemID, | ||
ElementType | pEl, | ||
const EventContext & | ctx | ||
) |
Construct from a hashed storable key, index, AND pointer to element.
O(1)
key | Hashed key of the object. |
elemID | The index of the element within the container. |
pEl | Pointer to the element. |
ctx | Event context for this link. |
USE CAREFULLY: no coherency checks, we just trust you!
ElementLink< STORABLE >::ElementLink | ( | BaseConstReference | data, |
index_type | elemID, | ||
IProxyDict * | sg = 0 |
||
) |
Construct a link from an index and reference to the container.
O(1)
data | Reference to the container (storable). |
elemID | The index of the element within the container. |
sg | Associated store. |
If sg
is 0, we take the global default.
ElementLink< STORABLE >::ElementLink | ( | BaseConstReference | data, |
index_type | elemID, | ||
const EventContext & | ctx | ||
) |
Construct a link from an index and reference to the container.
O(1)
data | Reference to the container (storable). |
elemID | The index of the element within the container. |
ctx | Event context for this link. |
ElementLink< STORABLE >::ElementLink | ( | const ElementType & | element, |
BaseConstReference | data, | ||
IProxyDict * | sg = 0 |
||
) |
Construct from an element and reference to the container.
O(N)
element | The element to reference. |
data | Reference to the container (storable). |
sg | Associated store. |
Does the same thing as the default ctor followed by toContainedElement
. Note the reversed parameter order compared to the previous constructor. This is to prevent ambiguities in the case that the contained type is convertable to an int.
Will throw SG::ExcElementNotFound
if the element is not in the container.
If sg
is 0, we take the global default.
ElementLink< STORABLE >::ElementLink | ( | const ElementType & | element, |
BaseConstReference | data, | ||
const EventContext & | ctx | ||
) |
Construct from an element and reference to the container.
O(N)
element | The element to reference. |
data | Reference to the container (storable). |
ctx | Event context for this link. |
Does the same thing as the default ctor followed by toContainedElement
. Note the reversed parameter order compared to the previous constructor. This is to prevent ambiguities in the case that the contained type is convertable to an int.
Will throw SG::ExcElementNotFound
if the element is not in the container.
ElementLink< STORABLE >::ElementLink | ( | const ElementLink< STORABLE > & | other, |
index_type | elemID | ||
) |
Construct a link from another link, changing the index.
other | The source link. |
elemID | The index for the new link. |
The index being constructed will reference the same container as other
, but it will refer to element elemID
.
ElementLink< STORABLE >::ElementLink | ( | const DataLink< STORABLE > & | dlink, |
index_type | index | ||
) |
Construct a link from a DataLink and an index.
dlink | Link to the container. |
index | The index of the element within the container. |
ElementLink< STORABLE >::ElementLink | ( | const ElementLink< U > & | other | ) |
Constructor allowing a derived -> base conversion.
|
default |
ElementLink< STORABLE >::ElementLink | ( | ) |
Default constructor.
ElementLink< STORABLE >::ElementLink | ( | xAOD::TVirtualEvent * | event | ) |
Constructor setting up the link with a specific event object.
ElementLink< STORABLE >::ElementLink | ( | const ID_type & | key, |
index_type | index, | ||
xAOD::TVirtualEvent * | event = 0 |
||
) |
Construct object from storable key and element index (fast)
ElementLink< STORABLE >::ElementLink | ( | sgkey_t | id, |
index_type | index, | ||
xAOD::TVirtualEvent * | event = 0 |
||
) |
Construct object from storable id and element index (fastest)
ElementLink< STORABLE >::ElementLink | ( | const ID_type & | key, |
index_type | index, | ||
ElementType | element, | ||
xAOD::TVirtualEvent * | event = 0 |
||
) |
Construct from a storable key and element index, taking the element object from the user.
Be careful, no checks are done on the received object!
ElementLink< STORABLE >::ElementLink | ( | sgkey_t | id, |
index_type | index, | ||
ElementType | element, | ||
xAOD::TVirtualEvent * | event = 0 |
||
) |
Construct from a storable id and element index, taking the element object from the user.
Be careful, no checks are done on the received object!
ElementLink< STORABLE >::ElementLink | ( | BaseConstReference | container, |
index_type | index, | ||
xAOD::TVirtualEvent * | event = 0 |
||
) |
Construct from a container reference and element index (slower)
ElementLink< STORABLE >::ElementLink | ( | ElementType | element, |
BaseConstReference | container, | ||
xAOD::TVirtualEvent * | event = 0 |
||
) |
Construct from a container reference and element pointer (slowest)
ElementLink< STORABLE >::ElementLink | ( | const ElementLink< STORABLE > & | parent | ) |
Copy-constructor.
|
inline |
Access the currently cached element. Doesn't trigger lookup.
Definition at line 176 of file A/AthLinks/ElementLink.h.
ElementType ElementLink< STORABLE >::cachedElement | ( | ) | const |
Return the cached element, if any.
|
static |
Return the CLID for the class that we reference.
ElementConstPointer ElementLink< STORABLE >::cptr | ( | ) | const |
Get a constant pointer to the referenced object.
ElementConstPointer ElementLink< STORABLE >::cptr | ( | ) | const |
Return a pointer to the referenced element.
Be aware: if the element is a pointer, then this will yield a pointer to a pointer.
const ID_type& ElementLink< STORABLE >::dataID | ( | ) | const |
Get the key that we reference, as a string.
|
private |
Find the identifier of the object being pointed to.
|
private |
Find the index of an element inside the container.
|
protectedinherited |
Retrieve the cached element from the link.
elt[out] | The cached element. |
elt
is left unmodified if there is no cached element.
DataLink<STORABLE> ElementLink< STORABLE >::getDataLink | ( | ) |
Return a link to the currently-referenced container object.
const DataLink<STORABLE> ElementLink< STORABLE >::getDataLink | ( | ) | const |
Return a link to the currently-referenced container object.
pointer ElementLink< STORABLE >::getDataNonConstPtr | ( | ) |
Return a pointer to the currently-referenced container object.
const_pointer ElementLink< STORABLE >::getDataPtr | ( | ) | const |
Return a pointer to the currently-referenced container object.
BaseConstPointer ElementLink< STORABLE >::getStorableObjectPointer | ( | ) | const |
Retrieve storable object pointer.
BaseConstPointer ElementLink< STORABLE >::getStorableObjectPointer | ( | ) | const |
Return a pointer to the currently-referenced container object.
BaseConstReference ElementLink< STORABLE >::getStorableObjectRef | ( | ) | const |
Retrieve storable object reference.
BaseConstReference ElementLink< STORABLE >::getStorableObjectRef | ( | ) | const |
Return a reference to the currently-referenced container object.
|
inline |
Check if the link has a cached element pointer.
Definition at line 178 of file A/AthLinks/ElementLink.h.
|
inline |
Get the index of the element inside of its container.
Definition at line 148 of file A/AthLinks/ElementLink.h.
|
inherited |
Test to see if this link is in the default state.
|
inherited |
Test the index validity.
bool ElementLink< STORABLE >::isValid | ( | ) | const |
Check if the element can be found.
bool ElementLink< STORABLE >::isValid | ( | ) | const |
Test to see if the link can be dereferenced.
Will throw an exception if the container is not empty and the referenced element cannot be retrieved.
|
inline |
Get the key that we reference, as a hash.
Definition at line 153 of file A/AthLinks/ElementLink.h.
|
inline |
ElementLink< STORABLE >::operator ElementConstPointer | ( | ) | const |
Convert to a pointer to the referenced element.
|
inline |
Operator checking the validity of the link.
Definition at line 173 of file A/AthLinks/ElementLink.h.
bool ElementLink< STORABLE >::operator! | ( | ) | const |
Test to see if the link can not be dereferenced.
bool ElementLink< STORABLE >::operator!= | ( | const ElementLink< STORABLE > & | rhs | ) | const |
Comparison operator.
ElementConstReference ElementLink< STORABLE >::operator* | ( | ) | const |
Get a reference to the object in question.
ElementConstReference ElementLink< STORABLE >::operator* | ( | ) | const |
Return a reference to the referenced element.
Will throw an exception if the link is not valid.
|
inline |
ElementConstPointer ElementLink< STORABLE >::operator-> | ( | ) | const |
Return a pointer to the referenced element.
|
default |
ElementLink& ElementLink< STORABLE >::operator= | ( | const ElementLink< STORABLE > & | rhs | ) |
Assignment operator.
bool ElementLink< STORABLE >::operator== | ( | const ElementLink< STORABLE > & | rhs | ) | const |
Comparison operator.
|
inherited |
Return the SG proxy for the container holding this element.
If this is a null link, we return 0. If we're directly referencing an object that's not in StoreGate, either return 0 or throw ExcPointerNotInSG
, depending on nothrow
. Otherwise, return the proxy for the object we're referencing.
|
protectedinherited |
Return the internal proxy holder object.
|
privateinherited |
Adjust for thinning.
If this link points to a container that has been thinned, it will be adjusted accordingly.
Index | of the element. |
thinningCache | Thinning cache for the current stream (may be null). |
Returns true
if the link was changed; false
otherwise.
This overload will be used for the case where thinning is not supported.
|
privateinherited |
Adjust for thinning.
If this link points to a container that has been thinned, it will be adjusted accordingly.
Index | of the element. |
thinningCache | Thinning cache for the current stream (may be null). |
Returns true
if the link was changed; false
otherwise.
This overload will be used for the case where thinning is supported: the index can be interconverted with size_t.
void ElementLink< STORABLE >::reset | ( | ) |
Reset to default state.
|
protectedinherited |
Set the link to an element given by string key and index.
dataID | Key of the object. |
link_clid | CLID of the link being set. |
elemID | The index of the element within the container. |
sg | Associated store. |
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
void ElementLink< STORABLE >::resetWithKeyAndIndex | ( | const ID_type & | dataID, |
index_type | elemID, | ||
const EventContext & | ctx | ||
) |
Set the link to an element given by string key and index.
dataID | Key of the object. |
elemID | The index of the element within the container. |
ctx | The event context. |
void ElementLink< STORABLE >::resetWithKeyAndIndex | ( | const ID_type & | dataID, |
index_type | elemID, | ||
IProxyDict * | sg = 0 |
||
) |
Set the link to an element given by string key and index.
dataID | Key of the object. |
elemID | The index of the element within the container. |
sg | Associated store. |
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
void ElementLink< STORABLE >::resetWithKeyAndIndex | ( | const ID_type & | key, |
index_type | index, | ||
xAOD::TVirtualEvent * | event = 0 |
||
) |
Reset with storable key and element index (fast)
void ElementLink< STORABLE >::resetWithKeyAndIndex | ( | sgkey_t | id, |
index_type | index, | ||
xAOD::TVirtualEvent * | event = 0 |
||
) |
Reset with storable id and element index (fastest)
|
protectedinherited |
Set the link to an element given by string key and index.
key | Hashed key of the object. |
link_clid | CLID of the link being set. |
elemID | The index of the element within the container. |
sg | Associated store. |
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
void ElementLink< STORABLE >::resetWithKeyAndIndex | ( | sgkey_t | key, |
index_type | elemID, | ||
const EventContext & | ctx | ||
) |
Set the link to an element given by string key and index.
key | Hashed key of the object. |
elemID | The index of the element within the container. |
ctx | The event context. |
void ElementLink< STORABLE >::resetWithKeyAndIndex | ( | sgkey_t | key, |
index_type | elemID, | ||
IProxyDict * | sg = 0 |
||
) |
Set the link to an element given by string key and index.
key | Hashed key of the object. |
elemID | The index of the element within the container. |
sg | Associated store. |
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
|
protectedinherited |
Set the cached element stored in the link.
elt | New value for the cached element. |
bool ElementLink< STORABLE >::setElement | ( | ElementType | element | ) |
Set link to point to an Element (slowest)
bool ElementLink< STORABLE >::setElement | ( | ElementType | element | ) |
Set to point to an element.
element | The element. |
The collection and the element can be specified independently using setElement
and setStorableObject
.
If the link is already set, this will return false and leave the link unchanged.
|
protectedinherited |
Set the index part of the link.
index | New index value. |
bool ElementLink< STORABLE >::setStorableObject | ( | BaseConstReference | data, |
bool | replace, | ||
const EventContext & | ctx | ||
) |
Set link to point to a new container (storable).
data | Reference to the container (storable). |
replace | True if we can change an existing link. |
ctx | The event context. |
If the link is already set, this will return false and leave the link unchanged unless replace
is set. The replace
argument should be set if the element is now in a new storable container; e.g. element ptr has been put in a new view container.
bool ElementLink< STORABLE >::setStorableObject | ( | BaseConstReference | data, |
bool | replace = false |
||
) |
Set link storable to data object pointed by data (slower)
bool ElementLink< STORABLE >::setStorableObject | ( | BaseConstReference | data, |
bool | replace = false , |
||
IProxyDict * | sg = 0 |
||
) |
Set link to point to a new container (storable).
data | Reference to the container (storable). |
replace | True if we can change an existing link. |
sg | Associated store. |
If the link is already set, this will return false and leave the link unchanged unless replace
is set. The replace
argument should be set if the element is now in a new storable container; e.g. element ptr has been put in a new view container.
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
|
protectedinherited |
Set the container referenced by the link to data
.
data | Pointer to the new container. |
link_clid | CLID of the link being set. |
replace | True if we can change an existing link. |
sg | Associated store. |
If the link is already set, this will return false and leave the link unchanged unless replace
is set. The replace
argument should be set if the element is now in a new storable container; e.g. element ptr has been put in a new view container.
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
|
inline |
|
private |
Return a (void) pointer to the currently-referenced container object.
|
protectedinherited |
Return a pointer to the currently-referenced container object.
castfn | Function to do the cast from data proxy to object. If 0, use a dynamic cast. |
clid | The CLID of the desired object. This is used to determine how the returned pointer is to be converted. |
isConst | True if the returned object will be treated as const. |
|
private |
Return a (void) pointer to the currently-referenced container object.
|
protectedinherited |
Set the cached element stored in the link.
elt | New value for the cached element. |
|
protectedinherited |
Return the stored representation of the link index.
|
inherited |
Adjust for thinning.
If this link points to a container that has been thinned, it will be adjusted accordingly.
Returns true
if the link was changed; false
otherwise.
|
inherited |
Adjust for thinning.
If this link points to a container that has been thinned, it will be adjusted accordingly.
thinningCache | Thinning cache for the current stream (may be null). |
Returns true
if the link was changed; false
otherwise.
bool ElementLink< STORABLE >::toContainedElement | ( | BaseConstReference | container, |
ElementType | element | ||
) |
Set link to point to given element (slowest)
bool ElementLink< STORABLE >::toContainedElement | ( | BaseConstReference | data, |
ElementType | element, | ||
const EventContext & | ctx | ||
) |
Set from element pointer and a reference to the container (storable)
data | Reference to the container (storable). |
element | The element. |
ctx | The event context. |
O(N) for sequences!
If the link is already set, this will return false and leave the link unchanged.
bool ElementLink< STORABLE >::toContainedElement | ( | BaseConstReference | data, |
ElementType | element, | ||
IProxyDict * | sg = 0 |
||
) |
Set from element pointer and a reference to the container (storable)
data | Reference to the container (storable). |
element | The element. |
sg | Associated store. |
O(N) for sequences!
If the link is already set, this will return false and leave the link unchanged.
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
bool ElementLink< STORABLE >::toIndexedElement | ( | BaseConstReference | container, |
index_type | index | ||
) |
Set link to point to given index (slower)
bool ElementLink< STORABLE >::toIndexedElement | ( | BaseConstReference | data, |
index_type | elemID, | ||
const EventContext & | ctx | ||
) |
Set the link to an element given by index and pointer to container.
data | Reference to the container (storable). |
elemID | The index of the element within the container. |
ctx | The event context. |
If the link is already set, this will return false and leave the link unchanged.
bool ElementLink< STORABLE >::toIndexedElement | ( | BaseConstReference | data, |
index_type | elemID, | ||
IProxyDict * | sg = 0 |
||
) |
Set the link to an element given by index and pointer to container.
data | Reference to the container (storable). |
elemID | The index of the element within the container. |
sg | Associated store. |
If the link is already set, this will return false and leave the link unchanged.
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
|
protectedinherited |
Set the to an element given by index and pointer to container.
obj | Pointer to the container (storable). |
link_clid | CLID of the link being set. |
elemID | The index of the element within the container. |
sg | Associated store. |
If the link is already set, this will return false and leave the link unchanged.
If sg
is 0, then we take the store from whatever the link's currently set to. If the link has no current store, then we take the global default.
|
inline |
Dummy function provinding the offline interface.
Definition at line 186 of file A/AthLinks/ElementLink.h.
|
privatevirtual |
Reset the object's internal cache.
|
inherited |
Finish initialization after link has been read.
sg | Associated store. |
This should be called after a link has been read by root in order to set the proxy pointer. Returns true.
If sg
is 0, then we use the global default store.
|
mutableprivate |
Cached pointer to the container.
Definition at line 197 of file A/AthLinks/ElementLink.h.
|
mutableprivate |
Cached pointer to the object.
Definition at line 199 of file A/AthLinks/ElementLink.h.
|
mutableprivate |
Status of the cached pointer.
Definition at line 201 of file A/AthLinks/ElementLink.h.
|
private |
Pointer to the event object.
Definition at line 203 of file A/AthLinks/ElementLink.h.
|
privateinherited |
The index of the element within the container for this link.
Definition at line 538 of file GenericElementLinkBase.h.
|
privateinherited |
The hashed key for this link.
Definition at line 535 of file GenericElementLinkBase.h.
|
privateinherited |
SG proxy for this link.
Definition at line 541 of file GenericElementLinkBase.h.
|
privateinherited |
Definition at line 505 of file GenericElementLinkBase.h.