15 if (value.size() < 2 || value[0] !=
'0')
17 const char pfx =
static_cast<char>(std::tolower(
static_cast<unsigned char>(value[1])));
18 if (pfx !=
'b' && pfx !=
'o' && pfx !=
'x')
21 result.reserve(value.size());
24 for (std::size_t i = 2; i < value.size(); ++i)
25 result +=
static_cast<char>(std::toupper(
static_cast<unsigned char>(value[i])));
39 bool DataContainer::set_data(
const std::string& category,
const std::string& key,
const std::string& value_data_type,
const std::string& value,
const bool log_with_info_level)
41 if (category.empty() || key.empty())
43 log_error(
"netlist",
"key category or key is empty.");
47 m_data[std::make_tuple(category, key)] = std::make_tuple(value_data_type, value);
51 if (log_with_info_level)
53 log_info(
"netlist",
"added {} data '{}' ({}, {}).", value_data_type, value, category, key);
57 log_debug(
"netlist",
"added {} data '{}' ({}, {}).", value_data_type, value, category, key);
65 if (category.empty() || key.empty())
67 log_error(
"netlist",
"key category or key is empty.");
71 auto it =
m_data.find(std::make_tuple(category, key));
74 log_debug(
"netlist",
"no key ('{}', '{}') found.", category, key);
78 auto deleted_value = std::get<1>(it->second);
83 if (log_with_info_level)
85 log_info(
"netlist",
"removed data '{}' ({}, {}).", deleted_value, category, key);
89 log_debug(
"netlist",
"removed data '{}' ({}, {}).", deleted_value, category, key);
106 if (category.empty() || key.empty())
111 if (
auto it =
m_data.find(std::make_tuple(category, key)); it ==
m_data.end())
121 if (category.empty() || key.empty())
123 log_error(
"netlist",
"key category or key is empty.");
124 return std::make_tuple(
"",
"");
127 auto it =
m_data.find(std::make_tuple(category, key));
130 log_debug(
"netlist",
"no value stored for key ('{}', '{}').", category, key);
131 return std::make_tuple(
"",
"");
140 return ERR(
"invalid parameter value");
143 const std::string normalized = normalize_bv_value(param.
get_type(), value);
153 return OK(it->second.second);
156 return ERR(
"no parameter named '" +
name +
"'");
164 return ERR(
"no parameter named '" + param.
get_name() +
"'");
167 if (it->second.first != param)
169 return ERR(
"parameter with name '" + param.
get_name() +
"' exists, but does not match provided parameter declaration");
172 return OK(it->second.second);
179 return OK(it->second.first);
182 return ERR(
"no parameter named '" +
name +
"'");
193 return it !=
m_parameters.end() && it->second.first == param;
const std::map< std::tuple< std::string, std::string >, std::tuple< std::string, std::string > > & get_data_map() const
bool operator==(const DataContainer &other) const
std::tuple< std::string, std::string > get_data(const std::string &category, const std::string &key) const
bool operator!=(const DataContainer &other) const
std::map< std::tuple< std::string, std::string >, std::tuple< std::string, std::string > > m_data
Result< std::string > get_parameter_value(const std::string &name) const
std::unordered_map< std::string, std::pair< Parameter, std::string > > m_parameters
bool has_parameter(const Parameter ¶m) const
const std::unordered_map< std::string, std::pair< Parameter, std::string > > & get_parameters() const
Result< Parameter > get_parameter_declaration(const std::string &name) const
bool set_data(const std::string &category, const std::string &key, const std::string &data_type, const std::string &value, const bool log_with_info_level=false)
Result< std::monostate > set_parameter(const Parameter ¶m, const std::string &value)
bool has_data(const std::string &category, const std::string &key) const
bool delete_data(const std::string &category, const std::string &key, const bool log_with_info_level=false)
void set_data_map(const std::map< std::tuple< std::string, std::string >, std::tuple< std::string, std::string >> &map)
bool delete_parameter(const std::string &name)
#define log_error(channel,...)
#define log_debug(channel,...)
#define log_info(channel,...)
const std::string & get_name() const
bool validate(const std::string &value) const