ATLAS Offline Software
Toggle main menu visibility
Loading...
Searching...
No Matches
Tracking
TrkExtrapolation
TrkExTools
TrkExTools
ExtrUniquePtrHolder.h
Go to the documentation of this file.
1
/*
2
Copyright (C) 2002-2025 CERN for the benefit of the ATLAS collaboration
3
*/
4
5
#ifndef TRKEXTOOLS_EXTRUNIQUEPTRHOLDER_H
6
#define TRKEXTOOLS_EXTRUNIQUEPTRHOLDER_H
7
20
21
#include <algorithm>
22
#include <memory>
23
#include <vector>
24
25
namespace
Trk
{
26
27
template
<
typename
T>
28
using
CacheOwnedPtr
= T*;
29
30
template
<
typename
T>
31
struct
ExtrUniquePtrHolder
{
32
33
ExtrUniquePtrHolder
() =
default
;
34
// ctor with capacity
35
ExtrUniquePtrHolder
(
size_t
capacity) {
m_elements
.reserve(capacity); }
36
~ExtrUniquePtrHolder
() =
default
;
37
// delete all the rest
38
ExtrUniquePtrHolder
(
const
ExtrUniquePtrHolder
&) =
delete
;
39
ExtrUniquePtrHolder
(
ExtrUniquePtrHolder
&&) =
delete
;
40
ExtrUniquePtrHolder
&
operator=
(
const
ExtrUniquePtrHolder
&) =
delete
;
41
ExtrUniquePtrHolder
&
operator=
(
ExtrUniquePtrHolder
&&) =
delete
;
42
44
CacheOwnedPtr<T>
push
(std::unique_ptr<T> input) {
45
if
(input ==
nullptr
) {
46
return
nullptr
;
47
}
48
m_elements
.push_back(std::move(input));
49
return
m_elements
.back().get();
50
}
51
56
std::unique_ptr<T>
move
(
CacheOwnedPtr<T>
input) {
57
if
(input ==
nullptr
) {
58
return
nullptr
;
59
}
60
// start from the last as this is more likely
61
auto
itr = std::find_if(
62
m_elements
.rbegin(),
m_elements
.rend(),
63
[&input](
const
std::unique_ptr<T>&
x
) { return x.get() == input; });
64
if
(itr ==
m_elements
.crend()) {
65
return
nullptr
;
66
}
67
return
std::unique_ptr<T>(std::move(*itr));
68
}
69
// The vector of unique_ptr
70
std::vector<std::unique_ptr<T>>
m_elements
;
71
};
72
73
}
// namespace Trk
74
75
#endif
Trk
Ensure that the ATLAS eigen extensions are properly loaded.
Definition
FakeTrackBuilder.h:9
Trk::x
@ x
Definition
ParamDefs.h:55
Trk::CacheOwnedPtr
T * CacheOwnedPtr
Definition
ExtrUniquePtrHolder.h:28
Trk::ExtrUniquePtrHolder::ExtrUniquePtrHolder
ExtrUniquePtrHolder()=default
Trk::ExtrUniquePtrHolder::m_elements
std::vector< std::unique_ptr< T > > m_elements
Definition
ExtrUniquePtrHolder.h:70
Trk::ExtrUniquePtrHolder::operator=
ExtrUniquePtrHolder & operator=(const ExtrUniquePtrHolder &)=delete
Trk::ExtrUniquePtrHolder::~ExtrUniquePtrHolder
~ExtrUniquePtrHolder()=default
Trk::ExtrUniquePtrHolder::move
std::unique_ptr< T > move(CacheOwnedPtr< T > input)
Release a cached ptr.
Definition
ExtrUniquePtrHolder.h:56
Trk::ExtrUniquePtrHolder::push
CacheOwnedPtr< T > push(std::unique_ptr< T > input)
push a new element to the vector and return a ptr to it
Definition
ExtrUniquePtrHolder.h:44
Trk::ExtrUniquePtrHolder::ExtrUniquePtrHolder
ExtrUniquePtrHolder(const ExtrUniquePtrHolder &)=delete
Trk::ExtrUniquePtrHolder::ExtrUniquePtrHolder
ExtrUniquePtrHolder(ExtrUniquePtrHolder &&)=delete
Trk::ExtrUniquePtrHolder::ExtrUniquePtrHolder
ExtrUniquePtrHolder(size_t capacity)
Definition
ExtrUniquePtrHolder.h:35
Trk::ExtrUniquePtrHolder::operator=
ExtrUniquePtrHolder & operator=(ExtrUniquePtrHolder &&)=delete
Generated on
for ATLAS Offline Software by
1.17.0