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 <string>
10
#include <vector>
11
#include <memory>
12
#include <unordered_map>
13
#include <immintrin.h>
14
#include <array>
15
16
#ifndef TPGLIBS_PROCESSORINTERNALSTATENAMEREGISTRY_HPP_
17
#define TPGLIBS_PROCESSORINTERNALSTATENAMEREGISTRY_HPP_
18
19
namespace
tpglibs
{
20
26
template
<
typename
T>
27
class
ProcessorInternalStateNameRegistry
{
28
public
:
30
using
signal_t
= T;
31
33
ProcessorInternalStateNameRegistry
() =
default
;
34
36
~ProcessorInternalStateNameRegistry
();
37
38
// Delete copy constructor and copy assignment (registry shouldn't be copied)
39
ProcessorInternalStateNameRegistry
(
const
ProcessorInternalStateNameRegistry
&) =
delete
;
40
ProcessorInternalStateNameRegistry
&
operator=
(
const
ProcessorInternalStateNameRegistry
&) =
delete
;
41
42
// Allow move semantics for efficiency
43
ProcessorInternalStateNameRegistry
(
ProcessorInternalStateNameRegistry
&&) =
default
;
44
ProcessorInternalStateNameRegistry
&
operator=
(
ProcessorInternalStateNameRegistry
&&) =
default
;
45
50
size_t
get_number_of_requested_internal_states
();
51
56
std::vector<std::string>
get_names_of_requested_internal_states
()
const
;
57
62
void
parse_requested_internal_state_items
(std::string config_string);
63
69
void
register_internal_state
(std::string name, std::shared_ptr<signal_t> pointer_to_state);
70
76
std::shared_ptr<signal_t>
get_internal_state_item_ptr
(std::string name);
77
82
std::vector<std::shared_ptr<signal_t>>
get_all_requested_internal_state_item_ptrs
();
83
89
bool
is_registered
(
const
std::string& name)
const
;
90
96
bool
is_requested
(
const
std::string& name)
const
;
97
98
protected
:
99
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
return
get_all_registered_internal_state_names
();
115
}
116
size_t
test_get_map_size()
const
{
return
m_internal_state_map
.size(); }
117
#endif
118
119
private
:
121
std::unordered_map<std::string, std::shared_ptr<signal_t>>
m_internal_state_map
;
122
124
std::vector<std::string>
m_requested_internal_state_names
;
125
};
126
127
// Template function implementations
128
129
template
<
typename
T>
130
ProcessorInternalStateNameRegistry<T>::~ProcessorInternalStateNameRegistry
() {
131
clear
();
132
}
133
134
template
<
typename
T>
135
size_t
ProcessorInternalStateNameRegistry<T>::get_number_of_requested_internal_states
() {
136
return
m_requested_internal_state_names
.size();
137
}
138
139
template
<
typename
T>
140
std::vector<std::string>
ProcessorInternalStateNameRegistry<T>::get_names_of_requested_internal_states
()
const
{
141
return
m_requested_internal_state_names
;
142
}
143
144
template
<
typename
T>
145
void
ProcessorInternalStateNameRegistry<T>::register_internal_state
(std::string name, std::shared_ptr<signal_t> pointer_to_state) {
146
m_internal_state_map
[name] = pointer_to_state;
147
}
148
149
template
<
typename
T>
150
std::shared_ptr<typename ProcessorInternalStateNameRegistry<T>::signal_t>
151
ProcessorInternalStateNameRegistry<T>::get_internal_state_item_ptr
(std::string name) {
152
return
m_internal_state_map
[name];
153
}
154
155
template
<
typename
T>
156
std::vector<std::string>
ProcessorInternalStateNameRegistry<T>::get_all_registered_internal_state_names
() {
157
std::vector<std::string> names;
158
for
(
const
auto
& item :
m_internal_state_map
) {
159
names.push_back(item.first);
160
}
161
return
names;
162
}
163
164
template
<
typename
T>
165
void
ProcessorInternalStateNameRegistry<T>::parse_requested_internal_state_items
(std::string config_string) {
166
// Clear existing requested names first
167
m_requested_internal_state_names
.clear();
168
169
if
(config_string.empty()) {
170
return
;
171
}
172
173
// Parse comma-separated items
174
std::string::size_type start = 0;
175
std::string::size_type end = config_string.find(
','
);
176
177
while
(end != std::string::npos) {
178
// Extract item name and trim whitespace
179
std::string item_name = config_string.substr(start, end - start);
180
181
// Trim leading and trailing whitespace
182
item_name.erase(0, item_name.find_first_not_of(
" \t\r\n"
));
183
item_name.erase(item_name.find_last_not_of(
" \t\r\n"
) + 1);
184
185
// Only add non-empty item names
186
if
(!item_name.empty()) {
187
m_requested_internal_state_names
.push_back(item_name);
188
}
189
190
start = end + 1;
191
end = config_string.find(
','
, start);
192
}
193
194
// Handle the last item (after the final comma or if there are no commas)
195
if
(start < config_string.length()) {
196
std::string last_item = config_string.substr(start);
197
198
// Trim leading and trailing whitespace
199
last_item.erase(0, last_item.find_first_not_of(
" \t\r\n"
));
200
last_item.erase(last_item.find_last_not_of(
" \t\r\n"
) + 1);
201
202
// Only add non-empty item names
203
if
(!last_item.empty()) {
204
m_requested_internal_state_names
.push_back(last_item);
205
}
206
}
207
}
208
209
template
<
typename
T>
210
void
ProcessorInternalStateNameRegistry<T>::clear
() {
211
// reinitialize member variables
212
m_internal_state_map
.clear();
213
m_requested_internal_state_names
.clear();
214
}
215
216
template
<
typename
T>
217
std::vector<std::shared_ptr<typename ProcessorInternalStateNameRegistry<T>::signal_t>>
218
ProcessorInternalStateNameRegistry<T>::get_all_requested_internal_state_item_ptrs
() {
219
std::vector<std::shared_ptr<typename ProcessorInternalStateNameRegistry<T>::signal_t>> item_ptrs;
220
for
(
const
auto
& item :
m_requested_internal_state_names
) {
221
item_ptrs.push_back(
m_internal_state_map
[item]);
222
}
223
return
item_ptrs;
224
}
225
226
template
<
typename
T>
227
bool
ProcessorInternalStateNameRegistry<T>::is_registered
(
const
std::string& name)
const
{
228
return
m_internal_state_map
.find(name) !=
m_internal_state_map
.end();
229
}
230
231
template
<
typename
T>
232
bool
ProcessorInternalStateNameRegistry<T>::is_requested
(
const
std::string& name)
const
{
233
for
(
const
auto
& requested_name :
m_requested_internal_state_names
) {
234
if
(requested_name == name) {
235
return
true
;
236
}
237
}
238
return
false
;
239
}
240
241
}
// namespace tpglibs
242
243
#endif
// TPGLIBS_PROCESSORINTERNALSTATENAMEREGISTRY_HPP_
244
tpglibs::ProcessorInternalStateNameRegistry::~ProcessorInternalStateNameRegistry
~ProcessorInternalStateNameRegistry()
Destructor.
Definition
ProcessorInternalStateNameRegistry.hpp:130
tpglibs::ProcessorInternalStateNameRegistry::is_registered
bool is_registered(const std::string &name) const
Check if an internal state name is registered.
Definition
ProcessorInternalStateNameRegistry.hpp:227
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:156
tpglibs::ProcessorInternalStateNameRegistry::ProcessorInternalStateNameRegistry
ProcessorInternalStateNameRegistry(ProcessorInternalStateNameRegistry &&)=default
tpglibs::ProcessorInternalStateNameRegistry::clear
void clear()
Clear the registry.
Definition
ProcessorInternalStateNameRegistry.hpp:210
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:121
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:145
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:140
tpglibs::ProcessorInternalStateNameRegistry::is_requested
bool is_requested(const std::string &name) const
Check if an internal state name is requested.
Definition
ProcessorInternalStateNameRegistry.hpp:232
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:151
tpglibs::ProcessorInternalStateNameRegistry::signal_t
T signal_t
Signal type to use. Generally __m256i or std::array<int16_t, 16>;.
Definition
ProcessorInternalStateNameRegistry.hpp:30
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:135
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:165
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:218
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:124
tpglibs
Definition
AbstractFactory.hpp:20
Generated on
for DUNE-DAQ by
1.17.0