summaryrefslogtreecommitdiff
path: root/utils
diff options
context:
space:
mode:
authorAmaury Pouly <amaury.pouly@gmail.com>2014-02-09 02:07:33 +0100
committerAmaury Pouly <amaury.pouly@gmail.com>2014-02-10 23:14:26 +0100
commit8358707d8276dd297655395b922560e3c65631e1 (patch)
treea83f2fda1657b9c67ced9c2cf4c337143097e913 /utils
parent1f4f7369eebfea85b9cb74a7ecae04b05bf44d07 (diff)
downloadrockbox-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')
-rw-r--r--utils/hwstub/tools/hwstub_shell.cpp10
-rw-r--r--utils/regtools/lib/soc_desc.cpp12
-rw-r--r--utils/regtools/lib/soc_desc.hpp3
-rw-r--r--utils/regtools/qeditor/backend.cpp10
4 files changed, 18 insertions, 17 deletions
diff --git a/utils/hwstub/tools/hwstub_shell.cpp b/utils/hwstub/tools/hwstub_shell.cpp
index 61cb617509..3cc6f8c259 100644
--- a/utils/hwstub/tools/hwstub_shell.cpp
+++ b/utils/hwstub/tools/hwstub_shell.cpp
@@ -647,13 +647,13 @@ bool my_lua_import_soc(const soc_t& soc)
647 return true; 647 return true;
648} 648}
649 649
650bool my_lua_import_soc(const std::vector< soc_t >& socs) 650bool my_lua_import_soc(const std::list< soc_t >& socs)
651{ 651{
652 for(size_t i = 0; i < socs.size(); i++) 652 for(std::list< soc_t >::const_iterator it = socs.begin(); it != socs.end(); ++it)
653 { 653 {
654 if(!g_quiet) 654 if(!g_quiet)
655 printf("importing %s...\n", socs[i].name.c_str()); 655 printf("importing %s...\n", it->name.c_str());
656 if(!my_lua_import_soc(socs[i])) 656 if(!my_lua_import_soc(*it))
657 return false; 657 return false;
658 } 658 }
659 return true; 659 return true;
@@ -711,7 +711,7 @@ int main(int argc, char **argv)
711 } 711 }
712 712
713 // load register descriptions 713 // load register descriptions
714 std::vector< soc_t > socs; 714 std::list< soc_t > socs;
715 for(int i = optind; i < argc; i++) 715 for(int i = optind; i < argc; i++)
716 if(!soc_desc_parse_xml(argv[i], socs)) 716 if(!soc_desc_parse_xml(argv[i], socs))
717 { 717 {
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
190bool parse_reg_elem(xmlNode *node, soc_reg_t& reg) 190bool 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
255bool parse_root_elem(xmlNode *node, std::vector< soc_t >& soc) 255bool 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
263bool soc_desc_parse_xml(const std::string& filename, std::vector< soc_t >& socs) 263bool 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 */
145bool soc_desc_parse_xml(const std::string& filename, std::vector< soc_t >& soc); 146bool 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()
14QStringList Backend::GetSocNameList() 14QStringList 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
22bool Backend::GetSocByName(const QString& name, soc_t& s) 22bool 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;