ATLAS Offline Software
Loading...
Searching...
No Matches
IdentifiableContainerMT< T > Class Template Referenceabstract

#include <IdentifiableContainerMT.h>

Inherits DataObject, EventContainers::IdentifiableContainerBase, and EventContainers::IIdentifiableCont< T >.

Inherited by InDetRawDataContainer< InDetRawDataCollection< ITkPixelRDORawData > >, InDetRawDataContainer< InDetRawDataCollection< PixelRDORawData > >, InDetRawDataContainer< InDetRawDataCollection< SCT_RDORawData > >, InDetRawDataContainer< InDetRawDataCollection< TRT_RDORawData > >, Muon::MuonCoinDataContainer< RpcCoinDataCollection >, Muon::MuonCoinDataContainer< TgcCoinDataCollection >, Muon::MuonPrepDataContainer< MuonPrepDataCollection< PrdType > >, const_iterator< TCOLLECTION >, TileRawDataContainer< TileBeamElemCollection >, TileRawDataContainer< TileCellCollection >, TileRawDataContainer< TileDigitsCollection >, TileRawDataContainer< TileHitCollection >, TileRawDataContainer< TileRawChannelCollection >, Trk::PrepRawDataContainer< HGTD_ClusterCollection >, Trk::PrepRawDataContainer< PixelClusterCollection >, Trk::PrepRawDataContainer< SCT_ClusterCollection >, Trk::PrepRawDataContainer< SiClusterCollection >, Trk::PrepRawDataContainer< TRT_DriftCircleCollection >, Trk::PrepRawDataContainer< TrigSiSpacePointCollection >, CscCalibDataContainer, CscDigitContainer, CscRawDataContainer, HGTD_ALTIROC_RDO_Container, HGTD_RDO_Container, InDetRawDataContainer< CollectionT >, MdtCsmContainer, MdtDigitContainer, MmDigitContainer, Muon::MM_RawDataContainer, Muon::MuonCoinDataContainer< CollectionT >, Muon::MuonPrepDataContainer< CollectionT >, Muon::NSW_MMTP_RawDataContainer, Muon::NSW_PadTriggerDataContainer, Muon::STGC_RawDataContainer, RpcDigitContainer, RpcPadContainer, SpacePointContainer, TgcDigitContainer, TgcL1RdoContainer, TgcRdoContainer, TileRawDataContainer< TCOLLECTION >, Trk::PrepRawDataContainer< CollectionT >, and sTgcDigitContainer.

Collaboration diagram for IdentifiableContainerMT< T >:

Classes

class  const_iterator
class  IDC_WriteHandle

Public Types

typedef T IDENTIFIABLE
typedef EventContainers::IdentifiableCache< T > ICACHE
typedef IdentifiableContainerMT< T > MyType
typedef std::vector< std::atomic< constvoid * > >::size_type size_type
typedef T *& reference
typedef T *const & const_reference
typedef T * value_type
typedef T ** pointer
typedef T *const * const_pointer
typedef T base_value_type
typedef void deleter_f(const void *p)
typedef std::vector< IdentifierHashHash_Container

Public Member Functions

 IdentifiableContainerMT (IdentifierHash hashMax)
 constructor initializes the collection the hashmax, OFFLINE usages pattern
 IdentifiableContainerMT (IdentifierHash hashMax, EventContainers::Mode)
 IdentifiableContainerMT (ICACHE *cache)
 constructor initializes with a link to a cache, ONLINE usage pattern
 ~IdentifiableContainerMT ()
virtual bool hasExternalCache () const override final
virtual const T * indexFindPtr (IdentifierHash hashId) const override final
 return pointer on the found entry or null if out of range using hashed index - fast version, does not call cnv if object not there
const_iterator indexFind (IdentifierHash hashId) const
virtual StatusCode addCollection (const T *coll, IdentifierHash hashId) override final
 insert collection into container with id hash if IDC should not take ownership of collection, set ownsColl to false
virtual StatusCode addOrDelete (std::unique_ptr< T >, IdentifierHash hashId) override final
 Tries to add the item to the cache, if the item already exists then it is deleted This is a convenience method for online multithreaded scenarios.
virtual StatusCode addOrDelete (std::unique_ptr< const T >, IdentifierHash hashId) override final
StatusCode addOrDelete (std::unique_ptr< T >, IdentifierHash hashId, bool &deleted)
 identical to previous excepts allows counting of deletions
StatusCode addLock (std::unique_ptr< T > ptr, IdentifierHash hashId)
 Like the other add methods but optimized for changing from the inprogress state.
virtual bool tryAddFromCache (IdentifierHash hashId) override final
 Looks in the cache to see if item already exists if not it returns false, If it does exist it incorporates it into the IDC view but changing the mask.
StatusCode fetchOrCreate (IdentifierHash hashId)
 Tries will look for item in cache, if it doesn't exist will call the cache IMAKER If cache doesn't have an IMAKER then this fails.
StatusCode fetchOrCreate (const std::vector< IdentifierHash > &hashId)
virtual StatusCode naughtyRetrieve ATLAS_NOT_THREAD_SAFE (IdentifierHash hashId, T *&collToRetrieve) const override final
T * removeCollection (IdentifierHash hashId)
 remove collection from container for id hash, returning it (and ownership) to client
virtual void cleanup () override final
 reset m_hashids and call IdentifiableCache's cleanup
virtual size_t fullSize () const override final
 return full size of container
size_t size () const
 Duplicate of fullSize for backwards compatability.
void prepareItr () const
virtual size_t numberOfCollections () const override final
 return number of collections
const std::vector< EventContainers::hashPair< T > > & GetAllHashPtrPair () const
virtual std::vector< IdentifierHashGetAllCurrentHashes () const override final
 Returns a collection of all hashes availiable in this IDC.
const_iterator begin () const
 return const_iterator for first entry
const_iterator end () const
 return const_iterator for end of container
bool empty () const
 return true if container is empty
IDC_WriteHandle getWriteHandle (IdentifierHash hash)
virtual StatusCode naughtyRetrieve (IdentifierHash hashId, T *&collToRetrieve) const =0

Protected Types

typedef EventContainers::IdentifiableCacheBase IdentifiableCacheBase

Protected Member Functions

bool insert (IdentifierHash hashId, const void *ptr)
void Wait () const
bool tryAddFromCache (IdentifierHash hashId, EventContainers::IDC_WriteHandleBase &lock)
void cleanup (deleter_f *deleter)
void ResetMask ()

Protected Attributes

bool m_OnlineMode
std::unique_ptr< I_InternalIDC > m_link

Friends

class IDC_WriteHandle

Detailed Description

template<class T>
class IdentifiableContainerMT< T >

Definition at line 30 of file IdentifiableContainerMT.h.

Member Typedef Documentation

◆ base_value_type

template<class T>
typedef T IdentifiableContainerMT< T >::base_value_type

Definition at line 76 of file IdentifiableContainerMT.h.

◆ const_pointer

template<class T>
typedef T* const* IdentifiableContainerMT< T >::const_pointer

Definition at line 75 of file IdentifiableContainerMT.h.

◆ const_reference

template<class T>
typedef T* const& IdentifiableContainerMT< T >::const_reference

Definition at line 72 of file IdentifiableContainerMT.h.

◆ deleter_f

typedef void EventContainers::IdentifiableContainerBase::deleter_f(const void *p)
inherited

Definition at line 14 of file IdentifiableContainerBase.h.

◆ Hash_Container

◆ ICACHE

template<class T>
typedef EventContainers::IdentifiableCache<T> IdentifiableContainerMT< T >::ICACHE

Definition at line 68 of file IdentifiableContainerMT.h.

◆ IDENTIFIABLE

template<class T>
typedef T IdentifiableContainerMT< T >::IDENTIFIABLE

Definition at line 67 of file IdentifiableContainerMT.h.

◆ IdentifiableCacheBase

◆ MyType

template<class T>
typedef IdentifiableContainerMT<T> IdentifiableContainerMT< T >::MyType

Definition at line 69 of file IdentifiableContainerMT.h.

◆ pointer

template<class T>
typedef T** IdentifiableContainerMT< T >::pointer

Definition at line 74 of file IdentifiableContainerMT.h.

◆ reference

template<class T>
typedef T*& IdentifiableContainerMT< T >::reference

Definition at line 71 of file IdentifiableContainerMT.h.

◆ size_type

template<class T>
typedef std::vector<std::atomic<constvoid*>>::size_type IdentifiableContainerMT< T >::size_type

Definition at line 70 of file IdentifiableContainerMT.h.

◆ value_type

template<class T>
typedef T* IdentifiableContainerMT< T >::value_type

Definition at line 73 of file IdentifiableContainerMT.h.

Constructor & Destructor Documentation

◆ IdentifiableContainerMT() [1/3]

constructor initializes the collection the hashmax, OFFLINE usages pattern

Definition at line 269 of file IdentifiableContainerMT.h.

◆ IdentifiableContainerMT() [2/3]

Definition at line 274 of file IdentifiableContainerMT.h.

274 :
276{
277}

◆ IdentifiableContainerMT() [3/3]

template<class T>
IdentifiableContainerMT< T >::IdentifiableContainerMT ( ICACHE * cache)

constructor initializes with a link to a cache, ONLINE usage pattern

Definition at line 281 of file IdentifiableContainerMT.h.

282{
283}

◆ ~IdentifiableContainerMT()

template<class T>
IdentifiableContainerMT< T >::~IdentifiableContainerMT ( )
inline

Definition at line 151 of file IdentifiableContainerMT.h.

Member Function Documentation

◆ addCollection()

template<class T>
StatusCode IdentifiableContainerMT< T >::addCollection ( const T * coll,
IdentifierHash hashId )
finaloverridevirtual

insert collection into container with id hash if IDC should not take ownership of collection, set ownsColl to false

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 298 of file IdentifiableContainerMT.h.

299{
300 // update m_hashids
302 return StatusCode::SUCCESS;
303
304}
#define ATH_UNLIKELY(x)

◆ addLock()

template<class T>
StatusCode IdentifiableContainerMT< T >::addLock ( std::unique_ptr< T > ptr,
IdentifierHash hashId )

Like the other add methods but optimized for changing from the inprogress state.

Definition at line 373 of file IdentifiableContainerMT.h.

374{
375 return m_link->addLock(hashId, ptr.release());
376}

◆ addOrDelete() [1/3]

template<class T>
virtual StatusCode IdentifiableContainerMT< T >::addOrDelete ( std::unique_ptr< const T > ,
IdentifierHash hashId )
finaloverridevirtual

◆ addOrDelete() [2/3]

template<class T>
StatusCode IdentifiableContainerMT< T >::addOrDelete ( std::unique_ptr< T > uptr,
IdentifierHash hashId )
finaloverridevirtual

Tries to add the item to the cache, if the item already exists then it is deleted This is a convenience method for online multithreaded scenarios.

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 351 of file IdentifiableContainerMT.h.

352{
353 if(ATH_UNLIKELY(hashId >= m_link->fullSize())) return StatusCode::FAILURE;
354 auto ptr = uptr.release();
356 if(!b) delete ptr;
357 return StatusCode::SUCCESS;
358}

◆ addOrDelete() [3/3]

template<class T>
StatusCode IdentifiableContainerMT< T >::addOrDelete ( std::unique_ptr< T > uptr,
IdentifierHash hashId,
bool & deleted )

identical to previous excepts allows counting of deletions

Definition at line 380 of file IdentifiableContainerMT.h.

381{
382 if(ATH_UNLIKELY(hashId >= m_link->fullSize())) return StatusCode::FAILURE;
383 auto ptr = uptr.release();
385 if(!b) delete ptr;
386 deleted = !b;
387 return StatusCode::SUCCESS;
388}

◆ ATLAS_NOT_THREAD_SAFE()

template<class T>
virtual StatusCode naughtyRetrieve IdentifiableContainerMT< T >::ATLAS_NOT_THREAD_SAFE ( IdentifierHash hashId,
T *& collToRetrieve ) const
finaloverridevirtual

◆ begin()

template<class T>
const_iterator IdentifiableContainerMT< T >::begin ( ) const
inline

return const_iterator for first entry

Definition at line 234 of file IdentifiableContainerMT.h.

◆ cleanup() [1/2]

void IdentifiableContainerBase::cleanup ( deleter_f * deleter)
protectedinherited

Definition at line 38 of file IdentifiableContainerBase.cxx.

38 {
39 if(m_OnlineMode) throw std::runtime_error("Not implemented in online mode");
40 m_link->cleanUp(deleter);
41 }

◆ cleanup() [2/2]

template<class T>
void IdentifiableContainerMT< T >::cleanup ( )
finaloverridevirtual

reset m_hashids and call IdentifiableCache's cleanup

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 310 of file IdentifiableContainerMT.h.

◆ empty()

template<class T>
bool IdentifiableContainerMT< T >::empty ( ) const
inline

return true if container is empty

Definition at line 245 of file IdentifiableContainerMT.h.

245 {
246 return numberOfCollections()==0;
247 }
virtual size_t numberOfCollections() const override final
return number of collections

◆ end()

template<class T>
const_iterator IdentifiableContainerMT< T >::end ( ) const
inline

return const_iterator for end of container

Definition at line 240 of file IdentifiableContainerMT.h.

240 {
241 return const_iterator(m_link->cend());
242 }

◆ fetchOrCreate() [1/2]

template<class T>
StatusCode IdentifiableContainerMT< T >::fetchOrCreate ( const std::vector< IdentifierHash > & hashId)

Definition at line 324 of file IdentifiableContainerMT.h.

◆ fetchOrCreate() [2/2]

template<class T>
StatusCode IdentifiableContainerMT< T >::fetchOrCreate ( IdentifierHash hashId)

Tries will look for item in cache, if it doesn't exist will call the cache IMAKER If cache doesn't have an IMAKER then this fails.

Definition at line 317 of file IdentifiableContainerMT.h.

◆ fullSize()

template<class T>
virtual size_t IdentifiableContainerMT< T >::fullSize ( ) const
inlinefinaloverridevirtual

return full size of container

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 202 of file IdentifiableContainerMT.h.

202 {
203 return m_link->fullSize();
204 }

◆ GetAllCurrentHashes()

template<class T>
virtual std::vector< IdentifierHash > IdentifiableContainerMT< T >::GetAllCurrentHashes ( ) const
inlinefinaloverridevirtual

Returns a collection of all hashes availiable in this IDC.

If this is an "offline" mode IDC then this is identical to the cache If this is an "online" mode IDC then this is the items that both exist in the cache and have a postive mask element

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 229 of file IdentifiableContainerMT.h.

◆ GetAllHashPtrPair()

template<class T>
const std::vector< EventContainers::hashPair< T > > & IdentifiableContainerMT< T >::GetAllHashPtrPair ( ) const
inline

Definition at line 218 of file IdentifiableContainerMT.h.

218 {
219 static_assert(sizeof(const T*) == sizeof(const void*) && std::is_pointer<const T*>::value);
220 static_assert(sizeof(EventContainers::hashPair<T>) == sizeof(EventContainers::hashPair<void>));
221 return reinterpret_cast<const std::vector < EventContainers::hashPair<T> >&>
222 (m_link->getAllHashPtrPair());
223 }

◆ getWriteHandle()

template<class T>
IDC_WriteHandle IdentifiableContainerMT< T >::getWriteHandle ( IdentifierHash hash)
inlinenodiscard

Definition at line 249 of file IdentifiableContainerMT.h.

250 {
252 lock.m_hashId = hash;
253 lock.m_IDC_ptr = this;
254 return lock;
255 }

◆ hasExternalCache()

template<class T>
virtual bool IdentifiableContainerMT< T >::hasExternalCache ( ) const
inlinefinaloverridevirtual

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 153 of file IdentifiableContainerMT.h.

153{ return m_OnlineMode; }

◆ indexFind()

template<class T>
const_iterator IdentifiableContainerMT< T >::indexFind ( IdentifierHash hashId) const
inline

Definition at line 161 of file IdentifiableContainerMT.h.

161 {
162 return m_link->indexFind(hashId);
163 }

◆ indexFindPtr()

template<class T>
const T * IdentifiableContainerMT< T >::indexFindPtr ( IdentifierHash hashId) const
finaloverridevirtual

return pointer on the found entry or null if out of range using hashed index - fast version, does not call cnv if object not there

return valuetype on the found entry or null if out of range using hashed index - fast version, does not call cnv if object not there

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 290 of file IdentifiableContainerMT.h.

◆ insert()

bool EventContainers::IdentifiableContainerBase::insert ( IdentifierHash hashId,
const void * ptr )
inlineprotectedinherited

Definition at line 28 of file IdentifiableContainerBase.h.

28{ return m_link->insert(hashId, ptr); }

◆ naughtyRetrieve()

template<class T>
virtual StatusCode EventContainers::IIdentifiableCont< T >::naughtyRetrieve ( IdentifierHash hashId,
T *& collToRetrieve ) const
pure virtualinherited

◆ numberOfCollections()

template<class T>
virtual size_t IdentifiableContainerMT< T >::numberOfCollections ( ) const
inlinefinaloverridevirtual

return number of collections

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 214 of file IdentifiableContainerMT.h.

◆ prepareItr()

template<class T>
void IdentifiableContainerMT< T >::prepareItr ( ) const
inline

Definition at line 211 of file IdentifiableContainerMT.h.

211{ m_link->wait(); }

◆ removeCollection()

template<class T>
T * IdentifiableContainerMT< T >::removeCollection ( IdentifierHash hashId)

remove collection from container for id hash, returning it (and ownership) to client

Definition at line 260 of file IdentifiableContainerMT.h.

261{
262 return std::bit_cast<T*>(m_link->removeCollection(hashId));
263}

◆ ResetMask()

void EventContainers::IdentifiableContainerBase::ResetMask ( )
protectedinherited

◆ size()

template<class T>
size_t IdentifiableContainerMT< T >::size ( ) const
inline

Duplicate of fullSize for backwards compatability.

Definition at line 207 of file IdentifiableContainerMT.h.

207 {
208 return m_link->fullSize();
209 }

◆ tryAddFromCache() [1/2]

bool EventContainers::IdentifiableContainerBase::tryAddFromCache ( IdentifierHash hashId,
EventContainers::IDC_WriteHandleBase & lock )
inlineprotectedinherited

Definition at line 30 of file IdentifiableContainerBase.h.

30 {
31 return m_link->tryAddFromCache(hashId, lock); }

◆ tryAddFromCache() [2/2]

template<class T>
bool IdentifiableContainerMT< T >::tryAddFromCache ( IdentifierHash hashId)
finaloverridevirtual

Looks in the cache to see if item already exists if not it returns false, If it does exist it incorporates it into the IDC view but changing the mask.

Implements EventContainers::IIdentifiableCont< T >.

Definition at line 332 of file IdentifiableContainerMT.h.

◆ Wait()

void EventContainers::IdentifiableContainerBase::Wait ( ) const
inlineprotectedinherited

Definition at line 29 of file IdentifiableContainerBase.h.

29{ m_link->wait(); }

◆ IDC_WriteHandle

template<class T>
friend class IDC_WriteHandle
friend

Definition at line 141 of file IdentifiableContainerMT.h.

Member Data Documentation

◆ m_link

std::unique_ptr<I_InternalIDC> EventContainers::IdentifiableContainerBase::m_link
protectedinherited

Definition at line 26 of file IdentifiableContainerBase.h.

◆ m_OnlineMode

bool EventContainers::IdentifiableContainerBase::m_OnlineMode
protectedinherited

Definition at line 24 of file IdentifiableContainerBase.h.


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