UnionChildIteratorpublic class UnionChildIterator extends ChildTestIterator This class defines a simplified type of union iterator that only
tests along the child axes. If the conditions are right, it is
much faster than using a UnionPathIterator. |
Fields Summary |
---|
static final long | serialVersionUID | private PredicatedNodeTest[] | m_nodeTestsEven though these may hold full LocPathIterators, this array does
not have to be cloned, since only the node test and predicate
portion are used, and these only need static information. However,
also note that index predicates can not be used! |
Constructors Summary |
---|
public UnionChildIterator()Constructor for UnionChildIterator
super(null);
|
Methods Summary |
---|
public short | acceptNode(int n)Test whether a specified node is visible in the logical view of a
TreeWalker or NodeIterator. This function will be called by the
implementation of TreeWalker and NodeIterator; it is not intended to
be called directly from user code.
XPathContext xctxt = getXPathContext();
try
{
xctxt.pushCurrentNode(n);
for (int i = 0; i < m_nodeTests.length; i++)
{
PredicatedNodeTest pnt = m_nodeTests[i];
XObject score = pnt.execute(xctxt, n);
if (score != NodeTest.SCORE_NONE)
{
// Note that we are assuming there are no positional predicates!
if (pnt.getPredicateCount() > 0)
{
if (pnt.executePredicates(n, xctxt))
return DTMIterator.FILTER_ACCEPT;
}
else
return DTMIterator.FILTER_ACCEPT;
}
}
}
catch (javax.xml.transform.TransformerException se)
{
// TODO: Fix this.
throw new RuntimeException(se.getMessage());
}
finally
{
xctxt.popCurrentNode();
}
return DTMIterator.FILTER_SKIP;
| public void | addNodeTest(com.sun.org.apache.xpath.internal.axes.PredicatedNodeTest test)Add a node test to the union list.
// Increase array size by only 1 at a time. Fix this
// if it looks to be a problem.
if (null == m_nodeTests)
{
m_nodeTests = new PredicatedNodeTest[1];
m_nodeTests[0] = test;
}
else
{
PredicatedNodeTest[] tests = m_nodeTests;
int len = m_nodeTests.length;
m_nodeTests = new PredicatedNodeTest[len + 1];
System.arraycopy(tests, 0, m_nodeTests, 0, len);
m_nodeTests[len] = test;
}
test.exprSetParent(this);
| public void | fixupVariables(java.util.Vector vars, int globalsSize)This function is used to fixup variables from QNames to stack frame
indexes at stylesheet build time.
super.fixupVariables(vars, globalsSize);
if (m_nodeTests != null) {
for (int i = 0; i < m_nodeTests.length; i++) {
m_nodeTests[i].fixupVariables(vars, globalsSize);
}
}
|
|