summaryrefslogtreecommitdiff
path: root/utils/regtools
diff options
context:
space:
mode:
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 @@
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;