From d854b0219dcb1cecc42e87b1c397cb683967b74d Mon Sep 17 00:00:00 2001 From: Arseny Kapoulkine Date: Fri, 7 Nov 2014 19:08:49 +0100 Subject: XPath: Only call apply_predicates if necessary In some cases constant overhead on step evaluation is important - i.e. for queries that evaluate a simple step in a predicate expression. Eliminating a redundant function call thus can prove worthwhile. This change makes some queries (e.g. //*[not(*)]) 4% faster. --- src/pugixml.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/pugixml.cpp b/src/pugixml.cpp index a3aaf76..1a93d47 100644 --- a/src/pugixml.cpp +++ b/src/pugixml.cpp @@ -9025,13 +9025,13 @@ PUGI__NS_BEGIN if (axis != axis_self && size != 0) ns.set_type(xpath_node_set::type_unsorted); step_fill(ns, *it, stack.result, once, v); - apply_predicates(ns, size, stack, eval); + if (_right) apply_predicates(ns, size, stack, eval); } } else { step_fill(ns, c.n, stack.result, once, v); - apply_predicates(ns, 0, stack, eval); + if (_right) apply_predicates(ns, 0, stack, eval); } // child, attribute and self axes always generate unique set of nodes -- cgit v1.2.3