From 8358707d8276dd297655395b922560e3c65631e1 Mon Sep 17 00:00:00 2001 From: Amaury Pouly Date: Sun, 9 Feb 2014 02:07:33 +0100 Subject: hwstub/regtools/qeditor: put soc descriptors in a list instead of a vector A SoC descriptor is not a small object: it can be as large as ~100KiB so it's better to avoid copying things over. Change-Id: I1ef862e1260299cdaa0c4d2822ac45968713498a --- utils/regtools/lib/soc_desc.cpp | 12 ++++++------ utils/regtools/lib/soc_desc.hpp | 3 ++- 2 files changed, 8 insertions(+), 7 deletions(-) (limited to 'utils/regtools/lib') diff --git a/utils/regtools/lib/soc_desc.cpp b/utils/regtools/lib/soc_desc.cpp index 4b9f51b9ae..223a6d8f53 100644 --- a/utils/regtools/lib/soc_desc.cpp +++ b/utils/regtools/lib/soc_desc.cpp @@ -64,14 +64,14 @@ #define MATCH_ELEM_NODE(node_name, array, parse_fn) \ if(sub->type == XML_ELEMENT_NODE && strcmp(XML_CHAR_TO_CHAR(sub->name), node_name) == 0) { \ array.resize(array.size() + 1); \ - if(!parse_fn(sub, array[array.size() - 1])) \ + if(!parse_fn(sub, array.back())) \ return false; \ } #define SOFT_MATCH_ELEM_NODE(node_name, array, parse_fn) \ if(sub->type == XML_ELEMENT_NODE && strcmp(XML_CHAR_TO_CHAR(sub->name), node_name) == 0) { \ array.resize(array.size() + 1); \ - if(!parse_fn(sub, array[array.size() - 1])) \ + if(!parse_fn(sub, array.back())) \ array.pop_back(); \ } @@ -189,7 +189,7 @@ bool parse_add_trivial_addr(const std::string& str, soc_reg_t& reg) bool parse_reg_elem(xmlNode *node, soc_reg_t& reg) { - std::vector< soc_reg_formula_t > formulas; + std::list< soc_reg_formula_t > formulas; BEGIN_ATTR_MATCH(node->properties) MATCH_TEXT_ATTR("name", reg.name) SOFT_MATCH_SCT_ATTR("sct", reg.flags) @@ -208,7 +208,7 @@ bool parse_reg_elem(xmlNode *node, soc_reg_t& reg) return false; } if(formulas.size() == 1) - reg.formula = formulas[0]; + reg.formula = formulas.front(); return true; } @@ -252,7 +252,7 @@ bool parse_soc_elem(xmlNode *node, soc_t& soc) return true; } -bool parse_root_elem(xmlNode *node, std::vector< soc_t >& soc) +bool parse_root_elem(xmlNode *node, std::list< soc_t >& soc) { BEGIN_NODE_MATCH(node) MATCH_ELEM_NODE("soc", soc, parse_soc_elem) @@ -260,7 +260,7 @@ bool parse_root_elem(xmlNode *node, std::vector< soc_t >& soc) return true; } -bool soc_desc_parse_xml(const std::string& filename, std::vector< soc_t >& socs) +bool soc_desc_parse_xml(const std::string& filename, std::list< soc_t >& socs) { LIBXML_TEST_VERSION diff --git a/utils/regtools/lib/soc_desc.hpp b/utils/regtools/lib/soc_desc.hpp index 476ea1d242..d1a1f0cb50 100644 --- a/utils/regtools/lib/soc_desc.hpp +++ b/utils/regtools/lib/soc_desc.hpp @@ -23,6 +23,7 @@ #include #include +#include #include /** @@ -142,6 +143,6 @@ struct soc_t /** Parse a SoC description from a XML file, append it to . A file * can contain multiple SoC descriptions */ -bool soc_desc_parse_xml(const std::string& filename, std::vector< soc_t >& soc); +bool soc_desc_parse_xml(const std::string& filename, std::list< soc_t >& soc); #endif /* __SOC_DESC__ */ \ No newline at end of file -- cgit v1.2.3