diff options
author | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-09 02:07:33 +0100 |
---|---|---|
committer | Amaury Pouly <amaury.pouly@gmail.com> | 2014-02-10 23:14:26 +0100 |
commit | 8358707d8276dd297655395b922560e3c65631e1 (patch) | |
tree | a83f2fda1657b9c67ced9c2cf4c337143097e913 /utils/regtools | |
parent | 1f4f7369eebfea85b9cb74a7ecae04b05bf44d07 (diff) | |
download | rockbox-8358707d8276dd297655395b922560e3c65631e1.tar.gz rockbox-8358707d8276dd297655395b922560e3c65631e1.zip |
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
Diffstat (limited to 'utils/regtools')
-rw-r--r-- | utils/regtools/lib/soc_desc.cpp | 12 | ||||
-rw-r--r-- | utils/regtools/lib/soc_desc.hpp | 3 | ||||
-rw-r--r-- | utils/regtools/qeditor/backend.cpp | 10 |
3 files changed, 13 insertions, 12 deletions
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 @@ | |||
64 | #define MATCH_ELEM_NODE(node_name, array, parse_fn) \ | 64 | #define MATCH_ELEM_NODE(node_name, array, parse_fn) \ |
65 | if(sub->type == XML_ELEMENT_NODE && strcmp(XML_CHAR_TO_CHAR(sub->name), node_name) == 0) { \ | 65 | if(sub->type == XML_ELEMENT_NODE && strcmp(XML_CHAR_TO_CHAR(sub->name), node_name) == 0) { \ |
66 | array.resize(array.size() + 1); \ | 66 | array.resize(array.size() + 1); \ |
67 | if(!parse_fn(sub, array[array.size() - 1])) \ | 67 | if(!parse_fn(sub, array.back())) \ |
68 | return false; \ | 68 | return false; \ |
69 | } | 69 | } |
70 | 70 | ||
71 | #define SOFT_MATCH_ELEM_NODE(node_name, array, parse_fn) \ | 71 | #define SOFT_MATCH_ELEM_NODE(node_name, array, parse_fn) \ |
72 | if(sub->type == XML_ELEMENT_NODE && strcmp(XML_CHAR_TO_CHAR(sub->name), node_name) == 0) { \ | 72 | if(sub->type == XML_ELEMENT_NODE && strcmp(XML_CHAR_TO_CHAR(sub->name), node_name) == 0) { \ |
73 | array.resize(array.size() + 1); \ | 73 | array.resize(array.size() + 1); \ |
74 | if(!parse_fn(sub, array[array.size() - 1])) \ | 74 | if(!parse_fn(sub, array.back())) \ |
75 | array.pop_back(); \ | 75 | array.pop_back(); \ |
76 | } | 76 | } |
77 | 77 | ||
@@ -189,7 +189,7 @@ bool parse_add_trivial_addr(const std::string& str, soc_reg_t& reg) | |||
189 | 189 | ||
190 | bool parse_reg_elem(xmlNode *node, soc_reg_t& reg) | 190 | bool parse_reg_elem(xmlNode *node, soc_reg_t& reg) |
191 | { | 191 | { |
192 | std::vector< soc_reg_formula_t > formulas; | 192 | std::list< soc_reg_formula_t > formulas; |
193 | BEGIN_ATTR_MATCH(node->properties) | 193 | BEGIN_ATTR_MATCH(node->properties) |
194 | MATCH_TEXT_ATTR("name", reg.name) | 194 | MATCH_TEXT_ATTR("name", reg.name) |
195 | SOFT_MATCH_SCT_ATTR("sct", reg.flags) | 195 | SOFT_MATCH_SCT_ATTR("sct", reg.flags) |
@@ -208,7 +208,7 @@ bool parse_reg_elem(xmlNode *node, soc_reg_t& reg) | |||
208 | return false; | 208 | return false; |
209 | } | 209 | } |
210 | if(formulas.size() == 1) | 210 | if(formulas.size() == 1) |
211 | reg.formula = formulas[0]; | 211 | reg.formula = formulas.front(); |
212 | 212 | ||
213 | return true; | 213 | return true; |
214 | } | 214 | } |
@@ -252,7 +252,7 @@ bool parse_soc_elem(xmlNode *node, soc_t& soc) | |||
252 | return true; | 252 | return true; |
253 | } | 253 | } |
254 | 254 | ||
255 | bool parse_root_elem(xmlNode *node, std::vector< soc_t >& soc) | 255 | bool parse_root_elem(xmlNode *node, std::list< soc_t >& soc) |
256 | { | 256 | { |
257 | BEGIN_NODE_MATCH(node) | 257 | BEGIN_NODE_MATCH(node) |
258 | MATCH_ELEM_NODE("soc", soc, parse_soc_elem) | 258 | MATCH_ELEM_NODE("soc", soc, parse_soc_elem) |
@@ -260,7 +260,7 @@ bool parse_root_elem(xmlNode *node, std::vector< soc_t >& soc) | |||
260 | return true; | 260 | return true; |
261 | } | 261 | } |
262 | 262 | ||
263 | bool soc_desc_parse_xml(const std::string& filename, std::vector< soc_t >& socs) | 263 | bool soc_desc_parse_xml(const std::string& filename, std::list< soc_t >& socs) |
264 | { | 264 | { |
265 | LIBXML_TEST_VERSION | 265 | LIBXML_TEST_VERSION |
266 | 266 | ||
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 @@ | |||
23 | 23 | ||
24 | #include <stdint.h> | 24 | #include <stdint.h> |
25 | #include <vector> | 25 | #include <vector> |
26 | #include <list> | ||
26 | #include <string> | 27 | #include <string> |
27 | 28 | ||
28 | /** | 29 | /** |
@@ -142,6 +143,6 @@ struct soc_t | |||
142 | 143 | ||
143 | /** Parse a SoC description from a XML file, append it to <soc>. A file | 144 | /** Parse a SoC description from a XML file, append it to <soc>. A file |
144 | * can contain multiple SoC descriptions */ | 145 | * can contain multiple SoC descriptions */ |
145 | bool soc_desc_parse_xml(const std::string& filename, std::vector< soc_t >& soc); | 146 | bool soc_desc_parse_xml(const std::string& filename, std::list< soc_t >& soc); |
146 | 147 | ||
147 | #endif /* __SOC_DESC__ */ \ No newline at end of file | 148 | #endif /* __SOC_DESC__ */ \ No newline at end of file |
diff --git a/utils/regtools/qeditor/backend.cpp b/utils/regtools/qeditor/backend.cpp index d2b75be701..22210916b1 100644 --- a/utils/regtools/qeditor/backend.cpp +++ b/utils/regtools/qeditor/backend.cpp | |||
@@ -14,17 +14,17 @@ Backend::Backend() | |||
14 | QStringList Backend::GetSocNameList() | 14 | QStringList Backend::GetSocNameList() |
15 | { | 15 | { |
16 | QStringList sl; | 16 | QStringList sl; |
17 | for(size_t i = 0; i < m_socs.size(); i++) | 17 | foreach(const soc_t& soc, m_socs) |
18 | sl.append(QString(m_socs[i].name.c_str())); | 18 | sl.append(QString(soc.name.c_str())); |
19 | return sl; | 19 | return sl; |
20 | } | 20 | } |
21 | 21 | ||
22 | bool Backend::GetSocByName(const QString& name, soc_t& s) | 22 | bool Backend::GetSocByName(const QString& name, soc_t& s) |
23 | { | 23 | { |
24 | for(size_t i = 0; i < m_socs.size(); i++) | 24 | for(std::list< soc_t >::iterator it = m_socs.begin(); it != m_socs.end(); ++it) |
25 | if(m_socs[i].name == name.toStdString()) | 25 | if(it->name == name.toStdString()) |
26 | { | 26 | { |
27 | s = m_socs[i]; | 27 | s = *it; |
28 | return true; | 28 | return true; |
29 | } | 29 | } |
30 | return false; | 30 | return false; |