ATLAS Offline Software
Loading...
Searching...
No Matches
EventContainers::InternalOfflineFast Class Referencefinal

#include <InternalOfflineFast.h>

Inheritance diagram for EventContainers::InternalOfflineFast:
Collaboration diagram for EventContainers::InternalOfflineFast:

Public Types

typedef EventContainers::hashPair< void > hashPair
typedef std::vector< hashPair >::const_iterator InternalConstItr
typedef void deleter_f(const void *p)

Public Member Functions

 InternalOfflineFast (size_t max)
virtual ~InternalOfflineFast ()=default
virtual InternalConstItr cbegin () const override
virtual InternalConstItr cend () const override
virtual InternalConstItr indexFind (IdentifierHash hashId) const override
virtual const std::vector< hashPair > & getAllHashPtrPair () const override
virtual bool tryAddFromCache (IdentifierHash hashId, EventContainers::IDC_WriteHandleBase &lock) override
virtual bool tryAddFromCache (IdentifierHash hashId) override
virtual void wait () const override
virtual std::vector< IdentifierHashgetAllCurrentHashes () const override
virtual size_t numberOfCollections () const override
virtual void cleanUp (deleter_f *deleter) noexcept override
virtual size_t fullSize () const noexcept override
virtual StatusCode fetchOrCreate (IdentifierHash hashId) override
virtual StatusCode fetchOrCreate (const std::vector< IdentifierHash > &hashIds) override
virtual bool insert (IdentifierHash hashId, const void *ptr) override
virtual const void * findIndexPtr (IdentifierHash hashId) const noexcept override
virtual StatusCode addLock (IdentifierHash hashId, const void *ptr) override
virtual void * removeCollection (IdentifierHash hashId) override
virtual void destructor (deleter_f *) noexcept override

Private Attributes

std::vector< I_InternalIDC::hashPair > m_map ATLAS_THREAD_SAFE
std::vector< const void * > m_fullMap
std::mutex m_waitMutex ATLAS_THREAD_SAFE
std::atomic< bool > m_needsupdate ATLAS_THREAD_SAFE

Detailed Description

Definition at line 19 of file InternalOfflineFast.h.

Member Typedef Documentation

◆ deleter_f

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

Definition at line 14 of file I_InternalIDC.h.

◆ hashPair

Definition at line 37 of file I_InternalIDC.h.

◆ InternalConstItr

Definition at line 38 of file I_InternalIDC.h.

Constructor & Destructor Documentation

◆ InternalOfflineFast()

InternalOfflineFast::InternalOfflineFast ( size_t max)

Definition at line 11 of file InternalOfflineFast.cxx.

11: m_fullMap(max, nullptr), m_needsupdate(false) {}
#define max(a, b)
Definition cfImp.cxx:41
std::vector< const void * > m_fullMap

◆ ~InternalOfflineFast()

virtual EventContainers::InternalOfflineFast::~InternalOfflineFast ( )
virtualdefault

Member Function Documentation

◆ addLock()

StatusCode InternalOfflineFast::addLock ( IdentifierHash hashId,
const void * ptr )
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 98 of file InternalOfflineFast.cxx.

98 {
99 bool added = insert(hashId, ptr);
100 if(!added) {
101 throw std::runtime_error("IDC WARNING Deletion shouldn't occur in addLock paradigm");
102 }
103 return StatusCode::SUCCESS;
104}
virtual bool insert(IdentifierHash hashId, const void *ptr) override

◆ cbegin()

InternalConstItr InternalOfflineFast::cbegin ( ) const
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 56 of file InternalOfflineFast.cxx.

56 {
57 if(m_needsupdate.load(std::memory_order_acquire)) wait();
58 return m_map.cbegin();
59}
IndexMap m_map
Map from objects to indices.

◆ cend()

InternalConstItr InternalOfflineFast::cend ( ) const
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 45 of file InternalOfflineFast.cxx.

45 {
46 if(m_needsupdate.load(std::memory_order_acquire)) wait();
47 return m_map.cend();
48}

◆ cleanUp()

void InternalOfflineFast::cleanUp ( deleter_f * deleter)
overridevirtualnoexcept

Implements EventContainers::I_InternalIDC.

Definition at line 73 of file InternalOfflineFast.cxx.

73 {
74 if(!m_needsupdate.load(std::memory_order_acquire)) {
75 for(const auto& x : m_map) { deleter(x.second); m_fullMap[x.first] = nullptr; }
76 if(!m_map.empty()) m_needsupdate.store(true, std::memory_order_relaxed);
77 }
78 else {
79 for(size_t i=0 ;i < m_fullMap.size(); ++i){
80 if(m_fullMap[i]) { deleter(m_fullMap[i]); m_fullMap[i] = nullptr; }
81 }
82 }
83 m_map.clear();
84}
#define x
IPayloadDeleter & deleter()
Return a reference to the payload deleter object.

◆ destructor()

void InternalOfflineFast::destructor ( deleter_f * deleter)
overridevirtualnoexcept

Implements EventContainers::I_InternalIDC.

Definition at line 121 of file InternalOfflineFast.cxx.

121 {
122 if(!m_needsupdate.load(std::memory_order_acquire)) for(const auto& x : m_map) deleter(x.second);
123 else {
124 for(size_t i=0 ;i < m_fullMap.size(); ++i){
125 if(m_fullMap[i]) deleter(m_fullMap[i]);
126 }
127 }
128}

◆ fetchOrCreate() [1/2]

StatusCode InternalOfflineFast::fetchOrCreate ( const std::vector< IdentifierHash > & hashIds)
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 116 of file InternalOfflineFast.cxx.

117{
118 throw std::runtime_error("Not implemented in offline mode");
119}

◆ fetchOrCreate() [2/2]

StatusCode InternalOfflineFast::fetchOrCreate ( IdentifierHash hashId)
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 113 of file InternalOfflineFast.cxx.

113 {
114 throw std::runtime_error("Not implemented in offline mode");
115}

◆ findIndexPtr()

const void * InternalOfflineFast::findIndexPtr ( IdentifierHash hashId) const
overridevirtualnoexcept

Implements EventContainers::I_InternalIDC.

Definition at line 93 of file InternalOfflineFast.cxx.

93 {
94 if(hashId >= m_fullMap.size()) return nullptr;
95 return m_fullMap[hashId];
96}

◆ fullSize()

virtual size_t EventContainers::InternalOfflineFast::fullSize ( ) const
inlineoverridevirtualnoexcept

Implements EventContainers::I_InternalIDC.

Definition at line 33 of file InternalOfflineFast.h.

33{return m_fullMap.size();}

◆ getAllCurrentHashes()

std::vector< IdentifierHash > InternalOfflineFast::getAllCurrentHashes ( ) const
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 34 of file InternalOfflineFast.cxx.

34 {
35 if(m_needsupdate.load(std::memory_order_acquire)) wait();
36 std::vector<IdentifierHash> ids;
37 ids.reserve(m_map.size());
38 for(auto &x : m_map) {
39 ids.emplace_back(x.first);
40 }
41 return ids;
42}

◆ getAllHashPtrPair()

const std::vector< I_InternalIDC::hashPair > & InternalOfflineFast::getAllHashPtrPair ( ) const
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 50 of file InternalOfflineFast.cxx.

50 {
51 if(m_needsupdate.load(std::memory_order_acquire)) wait();
52 return m_map;
53}

◆ indexFind()

InternalConstItr InternalOfflineFast::indexFind ( IdentifierHash hashId) const
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 61 of file InternalOfflineFast.cxx.

61 {
62 if(m_needsupdate.load(std::memory_order_acquire)) wait();
63 auto itr = std::lower_bound( m_map.cbegin(), m_map.cend(), hashId.value(), [](const hashPair &lhs, IdentifierHash::value_type rhs) -> bool { return lhs.first < rhs; } );
64 if(itr!= m_map.cend() && itr->first==hashId) return itr;
65 return m_map.cend();
66}
EventContainers::hashPair< void > hashPair
constexpr value_type value() const
unsigned int value_type

◆ insert()

bool InternalOfflineFast::insert ( IdentifierHash hashId,
const void * ptr )
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 86 of file InternalOfflineFast.cxx.

86 {
87 if(m_fullMap[hashId]!= nullptr) return false; //already in
88 m_fullMap[hashId] = ptr;
89 m_needsupdate.store(true, std::memory_order_relaxed);
90 return true;
91}
void * ptr(T *p)
Definition SGImplSvc.cxx:74

◆ numberOfCollections()

size_t InternalOfflineFast::numberOfCollections ( ) const
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 68 of file InternalOfflineFast.cxx.

68 {
69 if(m_needsupdate.load(std::memory_order_acquire)) wait();
70 return m_map.size();
71}

◆ removeCollection()

void * InternalOfflineFast::removeCollection ( IdentifierHash hashId)
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 106 of file InternalOfflineFast.cxx.

106 {
107 void* ptr ATLAS_THREAD_SAFE = const_cast< void* > (m_fullMap[hashId]);
108 m_fullMap[hashId] = nullptr;
109 m_needsupdate.store(true, std::memory_order_relaxed);
110 return ptr;
111}
std::vector< I_InternalIDC::hashPair > m_map ATLAS_THREAD_SAFE

◆ tryAddFromCache() [1/2]

bool InternalOfflineFast::tryAddFromCache ( IdentifierHash hashId)
overridevirtual

◆ tryAddFromCache() [2/2]

bool InternalOfflineFast::tryAddFromCache ( IdentifierHash hashId,
EventContainers::IDC_WriteHandleBase & lock )
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 14 of file InternalOfflineFast.cxx.

14 {
15 return m_fullMap[hash] != nullptr;
16}

◆ wait()

void InternalOfflineFast::wait ( ) const
overridevirtual

Implements EventContainers::I_InternalIDC.

Definition at line 23 of file InternalOfflineFast.cxx.

23 {
24 std::scoped_lock lock (m_waitMutex);
25 if(m_needsupdate.load(std::memory_order_acquire) == false) return;
26 m_map.clear();
27 for(size_t i=0 ;i < m_fullMap.size(); ++i){
28 if(m_fullMap[i]) m_map.emplace_back(i, m_fullMap[i]);
29 }
30 m_map.shrink_to_fit();
31 m_needsupdate.store(false, std::memory_order_release);
32}
virtual void lock()=0
Interface to allow an object to lock itself when made const in SG.

Member Data Documentation

◆ ATLAS_THREAD_SAFE [1/3]

std::atomic<bool> m_needsupdate EventContainers::InternalOfflineFast::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 45 of file InternalOfflineFast.h.

◆ ATLAS_THREAD_SAFE [2/3]

std::mutex m_waitMutex EventContainers::InternalOfflineFast::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 44 of file InternalOfflineFast.h.

◆ ATLAS_THREAD_SAFE [3/3]

std::vector<I_InternalIDC::hashPair> m_map EventContainers::InternalOfflineFast::ATLAS_THREAD_SAFE
mutableprivate

Definition at line 42 of file InternalOfflineFast.h.

◆ m_fullMap

std::vector<const void*> EventContainers::InternalOfflineFast::m_fullMap
private

Definition at line 43 of file InternalOfflineFast.h.


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