// 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: NodeSetExtent.java package com.icl.saxon.expr; import com.icl.saxon.Context; import com.icl.saxon.om.*; import com.icl.saxon.sort.*; import java.util.Vector; import org.w3c.dom.Node; import org.w3c.dom.NodeList; // Referenced classes of package com.icl.saxon.expr: // NodeSetValue, EmptyNodeSet, SingletonNodeSet, XPathException, // Expression, LastPositionFinder public final class NodeSetExtent extends NodeSetValue implements Sortable, NodeList { private class NodeSetValueEnumeration implements AxisEnumeration, LastPositionFinder { int index; public boolean hasMoreElements() { /* 333*/ return index < length; } public NodeInfo nextElement() { /* 338*/ return value[index++]; } public boolean isSorted() { /* 342*/ return sorted; } public boolean isReverseSorted() { /* 346*/ return reverseSorted; } public boolean isPeer() { /* 350*/ return false; } public int getLastPosition() { /* 354*/ return length; } public NodeSetValueEnumeration() { /* 324*/ index = 0; /* 327*/ index = 0; } } private NodeInfo value[]; private int length; private boolean sorted; private boolean reverseSorted; private NodeOrderComparer comparer; public NodeSetExtent(NodeOrderComparer nodeordercomparer) { /* 33*/ comparer = nodeordercomparer; /* 34*/ value = new NodeInfo[0]; /* 35*/ length = 0; /* 36*/ sorted = true; /* 37*/ reverseSorted = true; } public NodeSetExtent(NodeInfo anodeinfo[], NodeOrderComparer nodeordercomparer) { /* 47*/ value = anodeinfo; /* 48*/ length = anodeinfo.length; /* 49*/ sorted = length < 2; /* 50*/ reverseSorted = length < 2; /* 51*/ comparer = nodeordercomparer; } public NodeSetExtent(Vector vector, NodeOrderComparer nodeordercomparer) { /* 62*/ value = new NodeInfo[vector.size()]; /* 63*/ for(int i = 0; i < vector.size(); i++) /* 64*/ value[i] = (NodeInfo)vector.elementAt(i); /* 66*/ length = vector.size(); /* 67*/ sorted = length < 2; /* 68*/ reverseSorted = length < 2; /* 69*/ comparer = nodeordercomparer; } public NodeSetExtent(NodeEnumeration nodeenumeration, NodeOrderComparer nodeordercomparer) throws XPathException { /* 81*/ comparer = nodeordercomparer; /* 82*/ int i = 20; /* 91*/ value = new NodeInfo[i]; /* 92*/ int j = 0; /* 94*/ while(nodeenumeration.hasMoreElements()) { /* 94*/ if(j >= i) { /* 95*/ i *= 2; /* 96*/ NodeInfo anodeinfo[] = new NodeInfo[i]; /* 97*/ System.arraycopy(value, 0, anodeinfo, 0, j); /* 98*/ value = anodeinfo; } /* 100*/ value[j++] = nodeenumeration.nextElement(); } /* 102*/ sorted = nodeenumeration.isSorted() || j < 2; /* 103*/ reverseSorted = nodeenumeration.isReverseSorted() || j < 2; /* 104*/ length = j; } public void append(NodeInfo nodeinfo) { /* 115*/ reverseSorted = false; /* 116*/ if(value.length < length + 1) { /* 117*/ NodeInfo anodeinfo[] = new NodeInfo[length != 0 ? length * 2 : 10]; /* 118*/ System.arraycopy(value, 0, anodeinfo, 0, length); /* 119*/ value = anodeinfo; } /* 121*/ if(length > 0 && value[length - 1].isSameNodeInfo(nodeinfo)) { /* 122*/ return; } else { /* 124*/ value[length++] = nodeinfo; /* 126*/ return; } } public Expression simplify() { /* 133*/ if(length == 0) /* 134*/ return new EmptyNodeSet(); /* 135*/ if(length == 1) /* 136*/ return new SingletonNodeSet(value[0]); /* 138*/ else /* 138*/ return this; } public void setSorted(boolean flag) { /* 151*/ sorted = flag; } public boolean isSorted() { /* 161*/ return sorted; } public String asString() { /* 171*/ return length <= 0 ? "" : getFirst().getStringValue(); } public boolean asBoolean() throws XPathException { /* 180*/ return length > 0; } public int getCount() { /* 189*/ sort(); /* 190*/ return length; } public NodeSetValue sort() { /* 202*/ if(length < 2) /* 202*/ sorted = true; /* 203*/ if(sorted) /* 203*/ return this; /* 205*/ if(reverseSorted) { /* 207*/ NodeInfo anodeinfo[] = new NodeInfo[length]; /* 208*/ for(int j = 0; j < length; j++) /* 209*/ anodeinfo[j] = value[length - j - 1]; /* 211*/ value = anodeinfo; /* 212*/ sorted = true; /* 213*/ reverseSorted = false; } else { /* 218*/ QuickSort.sort(this, 0, length - 1); /* 224*/ int i = 1; /* 225*/ for(int k = 1; k < length; k++) /* 226*/ if(!value[k].isSameNodeInfo(value[k - 1])) /* 227*/ value[i++] = value[k]; /* 230*/ length = i; /* 232*/ sorted = true; /* 233*/ reverseSorted = false; } /* 235*/ return this; } public NodeInfo getFirst() { /* 244*/ if(length == 0) /* 244*/ return null; /* 245*/ if(sorted) /* 245*/ return value[0]; /* 248*/ NodeInfo nodeinfo = value[0]; /* 249*/ for(int i = 1; i < length; i++) /* 250*/ if(comparer.compare(value[i], nodeinfo) < 0) /* 251*/ nodeinfo = value[i]; /* 254*/ return nodeinfo; } public NodeInfo selectFirst(Context context) { /* 265*/ return getFirst(); } public NodeEnumeration enumerate() { /* 273*/ return new NodeSetValueEnumeration(); } public int getLength() { /* 283*/ return getCount(); } public Node item(int i) { /* 291*/ sort(); /* 292*/ if(length > i && (value[i] instanceof Node)) /* 293*/ return (Node)value[i]; /* 295*/ else /* 295*/ return null; } public int compare(int i, int j) { /* 305*/ return comparer.compare(value[i], value[j]); } public void swap(int i, int j) { /* 313*/ NodeInfo nodeinfo = value[i]; /* 314*/ value[i] = value[j]; /* 315*/ value[j] = nodeinfo; } }