ATLAS Offline Software
InternalOfflineFast.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3 */
4 
5 #ifndef EVENTCONTAINERS_INTERNALOFFLINEFAST_H
6 #define EVENTCONTAINERS_INTERNALOFFLINEFAST_H
9 #include <atomic>
10 #include <mutex>
11 
12 namespace EventContainers{
13 /*
14 This class implements the IdentifiableContainer code for the offline case.
15 This class may use excess memory for fast random access purposes
16 
17 Fast random access.
18 */
19 class InternalOfflineFast final : public I_InternalIDC {
20 public:
21  InternalOfflineFast(size_t max);
22  virtual ~InternalOfflineFast()=default;
23  virtual InternalConstItr cbegin() const override;
24  virtual InternalConstItr cend() const override;
25  virtual InternalConstItr indexFind( IdentifierHash hashId ) const override;
26  virtual const std::vector < hashPair >& getAllHashPtrPair() const override;
27  virtual bool tryAddFromCache(IdentifierHash hashId, EventContainers::IDC_WriteHandleBase &lock) override;
28  virtual bool tryAddFromCache(IdentifierHash hashId) override;
29  virtual void wait() const override;
30  virtual std::vector<IdentifierHash> getAllCurrentHashes() const override;
31  virtual size_t numberOfCollections() const override;
32  virtual void cleanUp(deleter_f* deleter) noexcept override;
33  virtual size_t fullSize() const noexcept override {return m_fullMap.size();}
34  virtual StatusCode fetchOrCreate(IdentifierHash hashId) override;
35  virtual StatusCode fetchOrCreate(const std::vector<IdentifierHash> &hashIds) override;
36  virtual bool insert(IdentifierHash hashId, const void* ptr) override;
37  virtual const void* findIndexPtr(IdentifierHash hashId) const noexcept override;
38  virtual StatusCode addLock(IdentifierHash hashId, const void* ptr) override;
39  virtual void* removeCollection( IdentifierHash hashId ) override;
40  virtual void destructor(deleter_f*) noexcept override;
41 private:
42  mutable std::vector<I_InternalIDC::hashPair> m_map ATLAS_THREAD_SAFE;
43  std::vector<const void*> m_fullMap;
44  mutable std::mutex m_waitMutex ATLAS_THREAD_SAFE;
45  mutable std::atomic<bool> m_needsupdate ATLAS_THREAD_SAFE; //These mutables are carefully thought out, do not change
46 };
47 
48 }
49 #endif
EventContainers::InternalOfflineFast::m_fullMap
std::vector< const void * > m_fullMap
Definition: InternalOfflineFast.h:43
max
#define max(a, b)
Definition: cfImp.cxx:41
EventContainers::InternalOfflineFast::removeCollection
virtual void * removeCollection(IdentifierHash hashId) override
Definition: InternalOfflineFast.cxx:107
BeamSpot::mutex
std::mutex mutex
Definition: InDetBeamSpotVertex.cxx:18
EventContainers::InternalOfflineFast::cleanUp
virtual void cleanUp(deleter_f *deleter) noexcept override
Definition: InternalOfflineFast.cxx:74
EventContainers::InternalOfflineFast
Definition: InternalOfflineFast.h:19
EventContainers::InternalOfflineFast::indexFind
virtual InternalConstItr indexFind(IdentifierHash hashId) const override
Definition: InternalOfflineFast.cxx:62
EventContainers::InternalOfflineFast::addLock
virtual StatusCode addLock(IdentifierHash hashId, const void *ptr) override
Definition: InternalOfflineFast.cxx:99
EventContainers
Definition: T_AthenaPoolCreateFuncs.h:33
const
bool const RAWDATA *ch2 const
Definition: LArRodBlockPhysicsV0.cxx:562
EventContainers::InternalOfflineFast::wait
virtual void wait() const override
Definition: InternalOfflineFast.cxx:24
EventContainers::InternalOfflineFast::destructor
virtual void destructor(deleter_f *) noexcept override
Definition: InternalOfflineFast.cxx:122
EventContainers::InternalOfflineFast::cbegin
virtual InternalConstItr cbegin() const override
Definition: InternalOfflineFast.cxx:57
EventContainers::I_InternalIDC
Definition: I_InternalIDC.h:34
EventContainers::InternalOfflineFast::tryAddFromCache
virtual bool tryAddFromCache(IdentifierHash hashId, EventContainers::IDC_WriteHandleBase &lock) override
Definition: InternalOfflineFast.cxx:15
EventContainers::InternalOfflineFast::getAllCurrentHashes
virtual std::vector< IdentifierHash > getAllCurrentHashes() const override
Definition: InternalOfflineFast.cxx:35
EventContainers::InternalOfflineFast::cend
virtual InternalConstItr cend() const override
Definition: InternalOfflineFast.cxx:46
EventContainers::InternalOfflineFast::~InternalOfflineFast
virtual ~InternalOfflineFast()=default
EL::StatusCode
::StatusCode StatusCode
StatusCode definition for legacy code.
Definition: PhysicsAnalysis/D3PDTools/EventLoop/EventLoop/StatusCode.h:22
deleter_f
void deleter_f(const void *p)
Definition: deleter.h:12
EventContainers::InternalOfflineFast::InternalOfflineFast
InternalOfflineFast(size_t max)
Definition: InternalOfflineFast.cxx:12
EventContainers::InternalOfflineFast::getAllHashPtrPair
virtual const std::vector< hashPair > & getAllHashPtrPair() const override
Definition: InternalOfflineFast.cxx:51
EventContainers::InternalOfflineFast::ATLAS_THREAD_SAFE
std::atomic< bool > m_needsupdate ATLAS_THREAD_SAFE
Definition: InternalOfflineFast.h:45
EventContainers::InternalOfflineFast::ATLAS_THREAD_SAFE
std::mutex m_waitMutex ATLAS_THREAD_SAFE
Definition: InternalOfflineFast.h:44
EventContainers::InternalOfflineFast::fetchOrCreate
virtual StatusCode fetchOrCreate(IdentifierHash hashId) override
Definition: InternalOfflineFast.cxx:114
EventContainers::InternalOfflineFast::insert
virtual bool insert(IdentifierHash hashId, const void *ptr) override
Definition: InternalOfflineFast.cxx:87
EventContainers::IDC_WriteHandleBase
Definition: IDC_WriteHandleBase.h:27
EventContainers::InternalOfflineFast::ATLAS_THREAD_SAFE
std::vector< I_InternalIDC::hashPair > m_map ATLAS_THREAD_SAFE
Definition: InternalOfflineFast.h:42
EventContainers::InternalOfflineFast::findIndexPtr
virtual const void * findIndexPtr(IdentifierHash hashId) const noexcept override
Definition: InternalOfflineFast.cxx:94
I_InternalIDC.h
EventContainers::InternalOfflineFast::fullSize
virtual size_t fullSize() const noexcept override
Definition: InternalOfflineFast.h:33
IdentifierHash
Definition: IdentifierHash.h:38
EventContainers::InternalOfflineFast::numberOfCollections
virtual size_t numberOfCollections() const override
Definition: InternalOfflineFast.cxx:69
checker_macros.h
Define macros for attributes used to control the static checker.
EventContainers::I_InternalIDC::InternalConstItr
std::vector< hashPair >::const_iterator InternalConstItr
Definition: I_InternalIDC.h:37