// Decompiled by Jad v1.5.8e. Copyright 2001 Pavel Kouznetsov. // Jad home page: http://www.geocities.com/kpdus/jad.html // Decompiler options: packimports(3) fieldsfirst lnc // Source File Name: Step.java package com.icl.saxon.expr; import com.icl.saxon.Context; import com.icl.saxon.functions.Last; import com.icl.saxon.om.*; import com.icl.saxon.pattern.NodeTest; import com.icl.saxon.pattern.Pattern; import java.io.PrintStream; // Referenced classes of package com.icl.saxon.expr: // Expression, Value, NumericValue, IsLastExpression, // FilterEnumerator, XPathException public final class Step { private byte axis; private NodeTest test; private Expression filters[]; private int numberOfFilters; public Step(byte byte0, NodeTest nodetest) { /* 18*/ filters = new Expression[3]; /* 19*/ numberOfFilters = 0; /* 22*/ axis = byte0; /* 23*/ test = nodetest; } public Step addFilter(Expression expression) { /* 27*/ if(numberOfFilters == filters.length) { /* 28*/ Expression aexpression[] = new Expression[numberOfFilters * 2]; /* 29*/ System.arraycopy(filters, 0, aexpression, 0, numberOfFilters); /* 30*/ filters = aexpression; } /* 32*/ filters[numberOfFilters++] = expression; /* 33*/ return this; } public void setFilters(Expression aexpression[], int i) { /* 37*/ filters = aexpression; /* 38*/ numberOfFilters = i; } public byte getAxis() { /* 42*/ return axis; } public NodeTest getNodeTest() { /* 46*/ return test; } public Expression[] getFilters() { /* 50*/ return filters; } public int getNumberOfFilters() { /* 54*/ return numberOfFilters; } public Step simplify() throws XPathException { /* 64*/ for(int i = numberOfFilters - 1; i >= 0; i--) { /* 65*/ Expression expression = filters[i].simplify(); /* 66*/ filters[i] = expression; /* 71*/ if((expression instanceof Value) && !(expression instanceof NumericValue)) /* 72*/ if(((Value)expression).asBoolean()) { /* 74*/ if(i == numberOfFilters - 1) /* 75*/ numberOfFilters--; } else { /* 79*/ return null; } /* 85*/ if(expression instanceof Last) /* 86*/ filters[i] = new IsLastExpression(true); } /* 90*/ return this; } public NodeEnumeration enumerate(NodeInfo nodeinfo, Context context) throws XPathException { /* 104*/ Object obj = nodeinfo.getEnumeration(axis, test); /* 105*/ if(((NodeEnumeration) (obj)).hasMoreElements()) { /* 106*/ for(int i = 0; i < numberOfFilters; i++) /* 107*/ obj = new FilterEnumerator(((NodeEnumeration) (obj)), filters[i], context, false); } /* 111*/ return ((NodeEnumeration) (obj)); } public void display(int i) { /* 120*/ System.err.println(Expression.indent(i) + "Step " + Axis.axisName[axis] + "::" + test.toString() + (numberOfFilters <= 0 ? "" : " [")); /* 122*/ for(int j = 0; j < numberOfFilters; j++) /* 123*/ filters[j].display(i + 1); } }