DUNE-DAQ
DUNE Trigger and Data Acquisition software
Toggle main menu visibility
Loading...
Searching...
No Matches
dunedaq
sourcecode
tpglibs
include
tpglibs
ProcessorInternalStateNameRegistry.hpp
Go to the documentation of this file.
1
8
9
#include <array>
10
#include <immintrin.h>
11
#include <memory>
12
#include <string>
13
#include <unordered_map>
14
#include <vector>
15
16
#ifndef TPGLIBS_PROCESSORINTERNALSTATENAMEREGISTRY_HPP_
17
#define TPGLIBS_PROCESSORINTERNALSTATENAMEREGISTRY_HPP_
18
19
namespace
tpglibs
{
20
26
template
<
typename
T>
27
class
ProcessorInternalStateNameRegistry
28
{
29
public
:
31
using
signal_t
= T;
32
34
ProcessorInternalStateNameRegistry
() =
default
;
35
37
~ProcessorInternalStateNameRegistry
();
38
39
// Delete copy constructor and copy assignment (registry shouldn't be copied)
40
ProcessorInternalStateNameRegistry
(
const
ProcessorInternalStateNameRegistry
&) =
delete
;
41
ProcessorInternalStateNameRegistry
&
operator=
(
const
ProcessorInternalStateNameRegistry
&) =
delete
;
42
43
// Allow move semantics for efficiency
44
ProcessorInternalStateNameRegistry
(
ProcessorInternalStateNameRegistry
&&) =
default
;
45
ProcessorInternalStateNameRegistry
&
operator=
(
ProcessorInternalStateNameRegistry
&&) =
default
;
46
51
size_t
get_number_of_requested_internal_states
();
52
57
std::vector<std::string>
get_names_of_requested_internal_states
()
const
;
58
63
void
parse_requested_internal_state_items
(std::string config_string);
64
70
void
register_internal_state
(std::string name, std::shared_ptr<signal_t> pointer_to_state);
71
77
std::shared_ptr<signal_t>
get_internal_state_item_ptr
(std::string name);
78
83
std::vector<std::shared_ptr<signal_t>>
get_all_requested_internal_state_item_ptrs
();
84
90
bool
is_registered
(
const
std::string& name)
const
;
91
97
bool
is_requested
(
const
std::string& name)
const
;
98
99
protected
:
104
std::vector<std::string>
get_all_registered_internal_state_names
();
105
107
void
clear
();
108
109
public
:
110
// Test interfaces - only for unit testing
111
#ifdef TPGLIBS_ENABLE_TEST_INTERFACES
112
void
test_clear() {
clear
(); }
113
std::vector<std::string> test_get_all_registered_internal_state_names()
114
{
115
return
get_all_registered_internal_state_names
();
116
}
117
size_t
test_get_map_size()
const
{
return
m_internal_state_map
.size(); }
118
#endif
119
120
private
:
122
std::unordered_map<std::string, std::shared_ptr<signal_t>>
m_internal_state_map
;
123
125
std::vector<std::string>
m_requested_internal_state_names
;
126
};
127
128
// Template function implementations
129
130
template
<
typename
T>
131
ProcessorInternalStateNameRegistry<T>::~ProcessorInternalStateNameRegistry
()
132
{
133
clear
();
134
}
135
136
template
<
typename
T>
137
size_t
138
ProcessorInternalStateNameRegistry<T>::get_number_of_requested_internal_states
()
139
{
140
return
m_requested_internal_state_names
.size();
141
}
142
143
template
<
typename
T>
144
std::vector<std::string>
145
ProcessorInternalStateNameRegistry<T>::get_names_of_requested_internal_states
()
const
146
{
147
return
m_requested_internal_state_names
;
148
}
149
150
template
<
typename
T>
151
void
152
ProcessorInternalStateNameRegistry<T>::register_internal_state
(std::string name,
153
std::shared_ptr<signal_t> pointer_to_state)
154
{
155
m_internal_state_map
[name] = pointer_to_state;
156
}
157
158
template
<
typename
T>
159
std::shared_ptr<typename ProcessorInternalStateNameRegistry<T>::signal_t>
160
ProcessorInternalStateNameRegistry<T>::get_internal_state_item_ptr
(std::string name)
161
{
162
return
m_internal_state_map
[name];
163
}
164
165
template
<
typename
T>
166
std::vector<std::string>
167
ProcessorInternalStateNameRegistry<T>::get_all_registered_internal_state_names
()
168
{
169
std::vector<std::string> names;
170
for
(
const
auto
& item :
m_internal_state_map
) {
171
names.push_back(item.first);
172
}
173
return
names;
174
}
175
176
template
<
typename
T>
177
void
178
ProcessorInternalStateNameRegistry<T>::parse_requested_internal_state_items
(std::string config_string)
179
{
180
// Clear existing requested names first
181
m_requested_internal_state_names
.clear();
182
183
if
(config_string.empty()) {
184
return
;
185
}
186
187
// Parse comma-separated items
188
std::string::size_type start = 0;
189
std::string::size_type end = config_string.find(
','
);
190
191
while
(end != std::string::npos) {
192
// Extract item name and trim whitespace
193
std::string item_name = config_string.substr(start, end - start);
194
195
// Trim leading and trailing whitespace
196
item_name.erase(0, item_name.find_first_not_of(
" \t\r\n"
));
197
item_name.erase(item_name.find_last_not_of(
" \t\r\n"
) + 1);
198
199
// Only add non-empty item names
200
if
(!item_name.empty()) {
201
m_requested_internal_state_names
.push_back(item_name);
202
}
203
204
start = end + 1;
205
end = config_string.find(
','
, start);
206
}
207
208
// Handle the last item (after the final comma or if there are no commas)
209
if
(start < config_string.length()) {
210
std::string last_item = config_string.substr(start);
211
212
// Trim leading and trailing whitespace
213
last_item.erase(0, last_item.find_first_not_of(
" \t\r\n"
));
214
last_item.erase(last_item.find_last_not_of(
" \t\r\n"
) + 1);
215
216
// Only add non-empty item names
217
if
(!last_item.empty()) {
218
m_requested_internal_state_names
.push_back(last_item);
219
}
220
}
221
}
222
223
template
<
typename
T>
224
void
225
ProcessorInternalStateNameRegistry<T>::clear
()
226
{
227
// reinitialize member variables
228
m_internal_state_map
.clear();
229
m_requested_internal_state_names
.clear();
230
}
231
232
template
<
typename
T>
233
std::vector<std::shared_ptr<typename ProcessorInternalStateNameRegistry<T>::signal_t>>
234
ProcessorInternalStateNameRegistry<T>::get_all_requested_internal_state_item_ptrs
()
235
{
236
std::vector<std::shared_ptr<typename ProcessorInternalStateNameRegistry<T>::signal_t>> item_ptrs;
237
for
(
const
auto
& item :
m_requested_internal_state_names
) {
238
item_ptrs.push_back(
m_internal_state_map
[item]);
239
}
240
return
item_ptrs;
241
}
242
243
template
<
typename
T>
244
bool
245
ProcessorInternalStateNameRegistry<T>::is_registered
(
const
std::string& name)
const
246
{
247
return
m_internal_state_map
.find(name) !=
m_internal_state_map
.end();
248
}
249
250
template
<
typename
T>
251
bool
252
ProcessorInternalStateNameRegistry<T>::is_requested
(
const
std::string& name)
const
253
{
254
for
(
const
auto
& requested_name :
m_requested_internal_state_names
) {
255
if
(requested_name == name) {
256
return
true
;
257
}
258
}
259
return
false
;
260
}
261
262
}
// namespace tpglibs
263
264
#endif
// TPGLIBS_PROCESSORINTERNALSTATENAMEREGISTRY_HPP_
tpglibs::ProcessorInternalStateNameRegistry::~ProcessorInternalStateNameRegistry
~ProcessorInternalStateNameRegistry()
Destructor.
Definition
ProcessorInternalStateNameRegistry.hpp:131
tpglibs::ProcessorInternalStateNameRegistry::is_registered
bool is_registered(const std::string &name) const
Check if an internal state name is registered.
Definition
ProcessorInternalStateNameRegistry.hpp:245
tpglibs::ProcessorInternalStateNameRegistry::get_all_registered_internal_state_names
std::vector< std::string > get_all_registered_internal_state_names()
Get all registered internal state names.
Definition
ProcessorInternalStateNameRegistry.hpp:167
tpglibs::ProcessorInternalStateNameRegistry::ProcessorInternalStateNameRegistry
ProcessorInternalStateNameRegistry(ProcessorInternalStateNameRegistry &&)=default
tpglibs::ProcessorInternalStateNameRegistry::clear
void clear()
Clear the registry.
Definition
ProcessorInternalStateNameRegistry.hpp:225
tpglibs::ProcessorInternalStateNameRegistry::m_internal_state_map
std::unordered_map< std::string, std::shared_ptr< signal_t > > m_internal_state_map
Map of internal state names to pointers.
Definition
ProcessorInternalStateNameRegistry.hpp:122
tpglibs::ProcessorInternalStateNameRegistry::operator=
ProcessorInternalStateNameRegistry & operator=(ProcessorInternalStateNameRegistry &&)=default
tpglibs::ProcessorInternalStateNameRegistry::register_internal_state
void register_internal_state(std::string name, std::shared_ptr< signal_t > pointer_to_state)
Register an internal state.
Definition
ProcessorInternalStateNameRegistry.hpp:152
tpglibs::ProcessorInternalStateNameRegistry::get_names_of_requested_internal_states
std::vector< std::string > get_names_of_requested_internal_states() const
Get the names of the requested internal states.
Definition
ProcessorInternalStateNameRegistry.hpp:145
tpglibs::ProcessorInternalStateNameRegistry::is_requested
bool is_requested(const std::string &name) const
Check if an internal state name is requested.
Definition
ProcessorInternalStateNameRegistry.hpp:252
tpglibs::ProcessorInternalStateNameRegistry::operator=
ProcessorInternalStateNameRegistry & operator=(const ProcessorInternalStateNameRegistry &)=delete
tpglibs::ProcessorInternalStateNameRegistry::get_internal_state_item_ptr
std::shared_ptr< signal_t > get_internal_state_item_ptr(std::string name)
Get a pointer to an internal state item.
Definition
ProcessorInternalStateNameRegistry.hpp:160
tpglibs::ProcessorInternalStateNameRegistry::signal_t
T signal_t
Signal type to use. Generally __m256i or std::array<int16_t, 16>;.
Definition
ProcessorInternalStateNameRegistry.hpp:31
tpglibs::ProcessorInternalStateNameRegistry::ProcessorInternalStateNameRegistry
ProcessorInternalStateNameRegistry(const ProcessorInternalStateNameRegistry &)=delete
tpglibs::ProcessorInternalStateNameRegistry::get_number_of_requested_internal_states
size_t get_number_of_requested_internal_states()
Get the number of requested internal states.
Definition
ProcessorInternalStateNameRegistry.hpp:138
tpglibs::ProcessorInternalStateNameRegistry::ProcessorInternalStateNameRegistry
ProcessorInternalStateNameRegistry()=default
Constructor.
tpglibs::ProcessorInternalStateNameRegistry::parse_requested_internal_state_items
void parse_requested_internal_state_items(std::string config_string)
Parse the requested internal state items from a configuration string.
Definition
ProcessorInternalStateNameRegistry.hpp:178
tpglibs::ProcessorInternalStateNameRegistry::get_all_requested_internal_state_item_ptrs
std::vector< std::shared_ptr< signal_t > > get_all_requested_internal_state_item_ptrs()
Get a vector of pointers to all internal state items.
Definition
ProcessorInternalStateNameRegistry.hpp:234
tpglibs::ProcessorInternalStateNameRegistry::m_requested_internal_state_names
std::vector< std::string > m_requested_internal_state_names
Vector of all requested internal state names.
Definition
ProcessorInternalStateNameRegistry.hpp:125
tpglibs
Definition
AbstractFactory.hpp:20
Generated on
for DUNE-DAQ by
1.18.0