summaryrefslogtreecommitdiffstats
path: root/utils/regtools
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/regtools
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/regtools')
-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
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 @@
#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 <stdint.h>
#include <vector>
+#include <list>
#include <string>
/**
@@ -142,6 +143,6 @@ struct soc_t
/** Parse a SoC description from a XML file, append it to <soc>. 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
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()
QStringList Backend::GetSocNameList()
{
QStringList sl;
- for(size_t i = 0; i < m_socs.size(); i++)
- sl.append(QString(m_socs[i].name.c_str()));
+ foreach(const soc_t& soc, m_socs)
+ sl.append(QString(soc.name.c_str()));
return sl;
}
bool Backend::GetSocByName(const QString& name, soc_t& s)
{
- for(size_t i = 0; i < m_socs.size(); i++)
- if(m_socs[i].name == name.toStdString())
+ for(std::list< soc_t >::iterator it = m_socs.begin(); it != m_socs.end(); ++it)
+ if(it->name == name.toStdString())
{
- s = m_socs[i];
+ s = *it;
return true;
}
return false;