ATLAS Offline Software
Loading...
Searching...
No Matches
SysHandleArray.icc
Go to the documentation of this file.
1/*
2 Copyright (C) 2002-2026 CERN for the benefit of the ATLAS collaboration
3*/
4namespace CP {
5 template <typename HANDLE> template <typename OWNER>
6 SysHandleArray<HANDLE>::SysHandleArray(
7 const std::vector<std::string> &values, OWNER *owner)
8 : asg::AsgMessagingForward(owner), m_decorNames(values),
9 m_makeHandle([owner](const std::string &name) { return HANDLE(name, owner); })
10 {
11 }
12
13 template <typename HANDLE> template <typename OWNER>
14 SysHandleArray<HANDLE>::SysHandleArray(
15 OWNER *owner,
16 const std::string &propertyName,
17 const std::vector<std::string> &propertyValue,
18 const std::string &propertyDescription)
19 : asg::AsgMessagingForward(owner), m_decorNames(propertyValue),
20 m_makeHandle([owner](const std::string &name) { return HANDLE(name, owner); })
21 {
22 owner->declareProperty(propertyName, m_decorNames, propertyDescription);
23 }
24
25 template <typename HANDLE> template <typename... Args>
26 StatusCode SysHandleArray<HANDLE>::initialize(Args &&...args)
27 {
28 // Build the list of handles separate to the data member so that it isn't
29 // partially initialized if there's a failure
30 std::vector<HANDLE> handles;
31 handles.reserve(m_decorNames.size());
32 if (!m_makeHandle)
33 {
34 ATH_MSG_ERROR("SysHandleArray: No handle maker function defined!");
35 return StatusCode::FAILURE;
36 }
37 for (const std::string &decor : m_decorNames)
38 {
39 // NB: This will fail if the templated class doesn't have the right
40 // constructor
41 handles.emplace_back(m_makeHandle(decor));
42 ATH_CHECK(handles.back().initialize(args...));
43 }
44 // If we get here then it all worked OK
45 m_handles = std::move(handles);
46 return StatusCode::SUCCESS;
47 }
48
49 template <typename HANDLE>
50 std::size_t SysHandleArray<HANDLE>::size() const noexcept { return m_decorNames.size(); }
51
52 template <typename HANDLE>
53 bool SysHandleArray<HANDLE>::empty() const noexcept { return size() == 0; }
54
55 template <typename HANDLE>
56 HANDLE &SysHandleArray<HANDLE>::at(std::size_t idx)
57 {
58 requireInitialized();
59 return m_handles.at(idx);
60 }
61
62 template <typename HANDLE>
63 const HANDLE &SysHandleArray<HANDLE>::at(std::size_t idx) const
64 {
65 requireInitialized();
66 return m_handles.at(idx);
67 }
68
69 template <typename HANDLE>
70 typename SysHandleArray<HANDLE>::iterator SysHandleArray<HANDLE>::begin()
71 {
72 requireInitialized();
73 return m_handles.begin();
74 }
75
76 template <typename HANDLE>
77 typename SysHandleArray<HANDLE>::iterator SysHandleArray<HANDLE>::end()
78 {
79 requireInitialized();
80 return m_handles.end();
81 }
82
83 template <typename HANDLE>
84 typename SysHandleArray<HANDLE>::const_iterator SysHandleArray<HANDLE>::begin() const
85 {
86 requireInitialized();
87 return m_handles.begin();
88 }
89
90 template <typename HANDLE>
91 typename SysHandleArray<HANDLE>::const_iterator SysHandleArray<HANDLE>::end() const
92 {
93 requireInitialized();
94 return m_handles.end();
95 }
96
97 template <typename HANDLE>
98 typename SysHandleArray<HANDLE>::const_iterator SysHandleArray<HANDLE>::cbegin() const
99 {
100 requireInitialized();
101 return m_handles.cbegin();
102 }
103
104 template <typename HANDLE>
105 typename SysHandleArray<HANDLE>::const_iterator SysHandleArray<HANDLE>::cend() const
106 {
107 requireInitialized();
108 return m_handles.cend();
109 }
110
111 template <typename HANDLE>
112 typename SysHandleArray<HANDLE>::reverse_iterator SysHandleArray<HANDLE>::rbegin()
113 {
114 requireInitialized();
115 return m_handles.rbegin();
116 }
117
118 template <typename HANDLE>
119 typename SysHandleArray<HANDLE>::reverse_iterator SysHandleArray<HANDLE>::rend()
120 {
121 requireInitialized();
122 return m_handles.rend();
123 }
124
125 template <typename HANDLE>
126 typename SysHandleArray<HANDLE>::const_reverse_iterator SysHandleArray<HANDLE>::rbegin() const
127 {
128 requireInitialized();
129 return m_handles.rbegin();
130 }
131
132 template <typename HANDLE>
133 typename SysHandleArray<HANDLE>::const_reverse_iterator SysHandleArray<HANDLE>::rend() const
134 {
135 requireInitialized();
136 return m_handles.rend();
137 }
138
139 template <typename HANDLE>
140 typename SysHandleArray<HANDLE>::const_reverse_iterator SysHandleArray<HANDLE>::crbegin() const
141 {
142 requireInitialized();
143 return m_handles.crbegin();
144 }
145
146 template <typename HANDLE>
147 typename SysHandleArray<HANDLE>::const_reverse_iterator SysHandleArray<HANDLE>::crend() const
148 {
149 requireInitialized();
150 return m_handles.crend();
151 }
152
153 template <typename HANDLE>
154 void SysHandleArray<HANDLE>::requireInitialized() const
155 {
156 if (m_handles.size() != m_decorNames.size())
157 throw std::logic_error("SysHandleArray not initialized!");
158 }
159
160} //> end namespace CP