diff options
author | Clifford Wolf <clifford@clifford.at> | 2015-04-24 22:04:05 +0200 |
---|---|---|
committer | Clifford Wolf <clifford@clifford.at> | 2015-04-24 22:04:05 +0200 |
commit | 49859393bbddfe9445757f3df0ff573c9072a594 (patch) | |
tree | b6aa1b32b1ae03c5427fcf3463c11ad274848568 /kernel/rtlil.cc | |
parent | 687f5a5b12b41c4e26c9e5b8d3815c268a7ff7be (diff) | |
download | yosys-49859393bbddfe9445757f3df0ff573c9072a594.tar.gz yosys-49859393bbddfe9445757f3df0ff573c9072a594.tar.bz2 yosys-49859393bbddfe9445757f3df0ff573c9072a594.zip |
Improved attributes API and handling of "src" attributes
Diffstat (limited to 'kernel/rtlil.cc')
-rw-r--r-- | kernel/rtlil.cc | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/kernel/rtlil.cc b/kernel/rtlil.cc index 2dff53b7b..8c0b41d09 100644 --- a/kernel/rtlil.cc +++ b/kernel/rtlil.cc @@ -161,6 +161,46 @@ std::string RTLIL::Const::decode_string() const return string; } +void RTLIL::AttrObject::set_bool_attribute(RTLIL::IdString id) +{ + attributes[id] = RTLIL::Const(1); +} + +bool RTLIL::AttrObject::get_bool_attribute(RTLIL::IdString id) const +{ + if (attributes.count(id) == 0) + return false; + return attributes.at(id).as_bool(); +} + +void RTLIL::AttrObject::set_strpool_attribute(RTLIL::IdString id, const pool<string> &data) +{ + string attrval; + for (auto &s : data) { + if (!attrval.empty()) + attrval += "|"; + attrval += s; + } + attributes[id] = RTLIL::Const(attrval); +} + +void RTLIL::AttrObject::add_strpool_attribute(RTLIL::IdString id, const pool<string> &data) +{ + pool<string> union_data = get_strpool_attribute(id); + union_data.insert(data.begin(), data.end()); + if (!union_data.empty()) + set_strpool_attribute(id, union_data); +} + +pool<string> RTLIL::AttrObject::get_strpool_attribute(RTLIL::IdString id) const +{ + pool<string> data; + if (attributes.count(id) != 0) + for (auto s : split_tokens(attributes.at(id).decode_string(), "|")) + data.insert(s); + return data; +} + bool RTLIL::Selection::selected_module(RTLIL::IdString mod_name) const { if (full_selection) |