ATLAS Offline Software
Loading...
Searching...
No Matches
InternalOffline.cxx
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2020 CERN for the benefit of the ATLAS collaboration
3*/
4
6#include <algorithm>
9
10using namespace EventContainers;
13 //Check optimization assumptions
14 static_assert(std::is_trivially_copyable<hashPair>::value);
15 static_assert(std::is_trivially_destructible<hashPair>::value);
16 static_assert(std::is_trivially_copyable<IdentifierHash>::value);
17 static_assert(std::is_trivially_destructible<IdentifierHash>::value);
18}
19
20
22 return indexFind(hash) != m_map.cend();//No Cache in offline mode
23}
24
26{
27 return indexFind(hash) != m_map.cend();//No Cache in offline mode
28}
29
31 //No need to wait in offline, deliberately empty method
32}
33
34std::vector<IdentifierHash> InternalOffline::getAllCurrentHashes() const {
35 std::vector<IdentifierHash> ids;
36 ids.reserve(m_map.size());
37 for(auto &x : m_map) {
38 ids.emplace_back(x.first);
39 }
40 return ids;
41}
42
45 return m_map.cend();
46}
47
48const std::vector < I_InternalIDC::hashPair >& InternalOffline::getAllHashPtrPair() const{ return m_map; }
49
52 return m_map.cbegin();
53}
54
56 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; } );
57 if(itr!= m_map.cend() && itr->first==hashId) return itr;
58 return m_map.cend();
59// return std::find_if(m_map.begin(), m_map.end(), [hashId](const hashPair &lhs) -> bool { return lhs.first == hashId; });
60}
61
63 return m_map.size();
64}
65
66void InternalOffline::cleanUp(deleter_f* deleter) noexcept {
67 for(const auto& x : m_map) deleter(x.second);
68 m_map.clear();
69}
70
71bool InternalOffline::insert(IdentifierHash hashId, const void* ptr) {
72 if(m_map.empty() || m_map.back().first < hashId){
73 m_map.emplace_back(hashId, ptr);
74 return true;
75 }
76 auto itr = std::lower_bound( m_map.begin(), m_map.end(), hashId.value(), [](const hashPair &lhs, IdentifierHash::value_type rhs) -> bool { return lhs.first < rhs; } );
77 if(itr == std::end(m_map) || itr->first != hashId)
78 {
79 m_map.emplace(itr, hashId, ptr);
80 return true;
81 }
82 return false;
83}
84
85const void* InternalOffline::findIndexPtr(IdentifierHash hashId) const noexcept{
86 auto itr = indexFind(hashId);
87 if(itr != m_map.end()) return itr->second;
88 return nullptr;
89}
90
91StatusCode InternalOffline::addLock(IdentifierHash hashId, const void* ptr) {
92 bool added = insert(hashId, ptr);
93 if(ATH_UNLIKELY(!added)) {
94 throw std::runtime_error("IDC WARNING Deletion shouldn't occur in addLock paradigm");
95 }
96 return StatusCode::SUCCESS;
97}
98
100 auto itr = std::lower_bound( m_map.begin(), m_map.end(), hashId.value(), [](hashPair &lhs, IdentifierHash::value_type rhs) -> bool { return lhs.first < rhs; } );
101 if(itr== m_map.end() || itr->first!=hashId) return nullptr;
102 void* ptr = const_cast< void* > (itr->second);
103 m_map.erase(itr);
104 return ptr;
105}
106
108 throw std::runtime_error("Not implemented in offline mode");
109}
110StatusCode InternalOffline::fetchOrCreate(const std::vector<IdentifierHash>&)
111{
112 throw std::runtime_error("Not implemented in offline mode");
113}
114
115void InternalOffline::destructor(deleter_f* deleter) noexcept {
116 for(const auto& x : m_map) deleter(x.second);
117}
#define ATH_UNLIKELY(x)
I_InternalIDC::InternalConstItr InternalConstItr
#define x
#define max(a, b)
Definition cfImp.cxx:41
std::vector< hashPair >::const_iterator InternalConstItr
EventContainers::hashPair< void > hashPair
void deleter_f(const void *p)
virtual void destructor(deleter_f *) noexcept override
virtual bool insert(IdentifierHash hashId, const void *ptr) override
virtual InternalConstItr indexFind(IdentifierHash hashId) const override
virtual const void * findIndexPtr(IdentifierHash hashId) const noexcept override
virtual size_t numberOfCollections() const override
virtual bool tryAddFromCache(IdentifierHash hashId, EventContainers::IDC_WriteHandleBase &lock) override
virtual StatusCode fetchOrCreate(IdentifierHash hashId) override
virtual InternalConstItr cbegin() const override
virtual void wait() const override
virtual std::vector< IdentifierHash > getAllCurrentHashes() const override
virtual void * removeCollection(IdentifierHash hashId) override
virtual StatusCode addLock(IdentifierHash hashId, const void *ptr) override
virtual void cleanUp(deleter_f *deleter) noexcept override
std::vector< I_InternalIDC::hashPair > m_map
virtual const std::vector< hashPair > & getAllHashPtrPair() const override
virtual InternalConstItr cend() const override
This is a "hash" representation of an Identifier.
value_type value() const
unsigned int value_type