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