sboag 00/11/06 12:57:22
Modified: java/src/org/apache/xpath/axes LocPathIterator.java
Log:
Save the variable stack search context when initContext is called,
and restore the state every time next node is called. Another performance
issue.
Revision Changes Path
1.9 +21 -1
xml-xalan/java/src/org/apache/xpath/axes/LocPathIterator.java
Index: LocPathIterator.java
===================================================================
RCS file:
/home/cvs/xml-xalan/java/src/org/apache/xpath/axes/LocPathIterator.java,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- LocPathIterator.java 2000/11/03 23:28:15 1.8
+++ LocPathIterator.java 2000/11/06 20:57:20 1.9
@@ -86,6 +86,7 @@
import org.apache.xalan.utils.ObjectPool;
import org.apache.xpath.objects.XNodeSet;
import org.apache.xpath.axes.AxesWalker;
+import org.apache.xpath.VariableStack;
/**
* <meta name="usage" content="advanced"/>
@@ -219,7 +220,13 @@
return null;
}
+
+ /** NEEDSDOC Method initContext **/
+ private int m_varStackPos;
+ /** NEEDSDOC Method initContext **/
+ private int m_varStackContext;
+
/**
* NEEDSDOC Method initContext
*
@@ -234,6 +241,9 @@
this.m_execContext = execContext;
this.m_prefixResolver = execContext.getNamespaceContext();
this.m_dhelper = execContext.getDOMHelper();
+ VariableStack vars = execContext.getVarStack();
+ this.m_varStackPos = vars.getSearchStart();
+ this.m_varStackContext = vars.getContextPos();
}
/**
@@ -579,6 +589,11 @@
return next;
}
+ VariableStack vars = m_execContext.getVarStack();
+ int savedStart = vars.getSearchStart();
+ vars.setSearchStart(m_varStackPos);
+ vars.pushContextPosition(m_varStackContext);
+
if (null == m_firstWalker.getRoot())
{
this.setNextPosition(0);
@@ -586,8 +601,13 @@
m_lastUsedWalker = m_firstWalker;
}
+
+ Node n = returnNextNode(m_firstWalker.nextNode());
+
+ vars.setSearchStart(savedStart);
+ vars.popContextPosition();
- return returnNextNode(m_firstWalker.nextNode());
+ return n;
}
/**