12 #include <unordered_map>
13 #include <immintrin.h>
16 #ifndef TPGLIBS_PROCESSORINTERNALSTATENAMEREGISTRY_HPP_
17 #define TPGLIBS_PROCESSORINTERNALSTATENAMEREGISTRY_HPP_
111 #ifdef TPGLIBS_ENABLE_TEST_INTERFACES
112 void test_clear() {
clear(); }
113 std::vector<std::string> test_get_all_registered_internal_state_names() {
129 template <
typename T>
134 template <
typename T>
136 return m_requested_internal_state_names.size();
139 template <
typename T>
141 return m_requested_internal_state_names;
144 template <
typename T>
146 m_internal_state_map[name] = pointer_to_state;
149 template <
typename T>
150 std::shared_ptr<typename ProcessorInternalStateNameRegistry<T>::signal_t>
152 return m_internal_state_map[name];
155 template <
typename T>
157 std::vector<std::string> names;
158 for (
const auto& item : m_internal_state_map) {
159 names.push_back(item.first);
164 template <
typename T>
167 m_requested_internal_state_names.clear();
169 if (config_string.empty()) {
174 std::string::size_type start = 0;
175 std::string::size_type end = config_string.find(
',');
177 while (end != std::string::npos) {
179 std::string item_name = config_string.substr(start, end - start);
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);
186 if (!item_name.empty()) {
187 m_requested_internal_state_names.push_back(item_name);
191 end = config_string.find(
',', start);
195 if (start < config_string.length()) {
196 std::string last_item = config_string.substr(start);
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);
203 if (!last_item.empty()) {
204 m_requested_internal_state_names.push_back(last_item);
209 template <
typename T>
212 m_internal_state_map.clear();
213 m_requested_internal_state_names.clear();
216 template <
typename T>
217 std::vector<std::shared_ptr<typename ProcessorInternalStateNameRegistry<T>::signal_t>>
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]);
226 template <
typename T>
228 return m_internal_state_map.find(name) != m_internal_state_map.end();
231 template <
typename T>
233 for (
const auto& requested_name : m_requested_internal_state_names) {
234 if (requested_name == name) {
Registry of internal state names.
~ProcessorInternalStateNameRegistry()
Destructor.
bool is_registered(const std::string &name) const
Check if an internal state name is registered.
std::vector< std::string > get_all_registered_internal_state_names()
Get all registered internal state names.
ProcessorInternalStateNameRegistry(ProcessorInternalStateNameRegistry &&)=default
void clear()
Clear the registry.
std::unordered_map< std::string, std::shared_ptr< signal_t > > m_internal_state_map
Map of internal state names to pointers.
ProcessorInternalStateNameRegistry & operator=(ProcessorInternalStateNameRegistry &&)=default
void register_internal_state(std::string name, std::shared_ptr< signal_t > pointer_to_state)
Register an internal state.
std::vector< std::string > get_names_of_requested_internal_states() const
Get the names of the requested internal states.
bool is_requested(const std::string &name) const
Check if an internal state name is requested.
ProcessorInternalStateNameRegistry & operator=(const ProcessorInternalStateNameRegistry &)=delete
std::shared_ptr< signal_t > get_internal_state_item_ptr(std::string name)
Get a pointer to an internal state item.
T signal_t
Signal type to use. Generally __m256i or std::array<int16_t, 16>;.
ProcessorInternalStateNameRegistry(const ProcessorInternalStateNameRegistry &)=delete
size_t get_number_of_requested_internal_states()
Get the number of requested internal states.
ProcessorInternalStateNameRegistry()=default
Constructor.
void parse_requested_internal_state_items(std::string config_string)
Parse the requested internal state items from a configuration string.
std::vector< std::shared_ptr< signal_t > > get_all_requested_internal_state_item_ptrs()
Get a vector of pointers to all internal state items.
std::vector< std::string > m_requested_internal_state_names
Vector of all requested internal state names.