summaryrefslogtreecommitdiff
path: root/src/pugixml.hpp
diff options
context:
space:
mode:
authorarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-07-22 07:59:11 +0000
committerarseny.kapoulkine <arseny.kapoulkine@99668b35-9821-0410-8761-19e4c4f06640>2010-07-22 07:59:11 +0000
commit546a0f756104fc9ae89207750c6a9eb566f5ea63 (patch)
treea0a7f4784c3876aee910790159947cf09ca960ac /src/pugixml.hpp
parent93bb5dcb43a8f80044a12fab962ba546bcb5df6a (diff)
xml_node::find_node is now not recursive
git-svn-id: http://pugixml.googlecode.com/svn/trunk@614 99668b35-9821-0410-8761-19e4c4f06640
Diffstat (limited to 'src/pugixml.hpp')
-rw-r--r--src/pugixml.hpp18
1 files changed, 11 insertions, 7 deletions
diff --git a/src/pugixml.hpp b/src/pugixml.hpp
index 81f5769..6a5f7e4 100644
--- a/src/pugixml.hpp
+++ b/src/pugixml.hpp
@@ -1343,15 +1343,19 @@ namespace pugi
{
if (!_root) return xml_node();
- for (xml_node node = first_child(); node; node = node.next_sibling())
+ xml_node cur = first_child();
+
+ while (cur._root && cur._root != _root)
{
- if (pred(node))
- return node;
-
- if (node.first_child())
+ if (pred(cur)) return cur;
+
+ if (cur.first_child()) cur = cur.first_child();
+ else if (cur.next_sibling()) cur = cur.next_sibling();
+ else
{
- xml_node found = node.find_node(pred);
- if (found) return found;
+ while (!cur.next_sibling() && cur._root != _root) cur = cur.parent();
+
+ if (cur._root != _root) cur = cur.next_sibling();
}
}