01: package net.sf.saxon.om;
02:
03: /**
04: * A SequenceIterator is used to iterate over a sequence. An AxisIterator
05: * is a SequenceIterator that always iterates over a set of nodes, and that
06: * throws no exceptions; it also supports the ability
07: * to find the last() position, again with no exceptions.
08: * This class is an abstract implementation of AxisIterator that is used
09: * as a base class for many concrete implementations. The main functionality
10: * that it provides is maintaining the current position.
11: */
12:
13: public abstract class AxisIteratorImpl implements AxisIterator,
14: AtomizableIterator {
15:
16: protected int position = 0;
17: protected Item current;
18: private boolean isAtomizing;
19:
20: /**
21: * Get the current node in the sequence.
22: * @return the node returned by the most recent call on next()
23: */
24:
25: public final Item current() {
26: return current;
27: }
28:
29: /**
30: * Get the current position
31: * @return the position of the most recent node returned by next()
32: */
33:
34: public final int position() {
35: return position;
36: }
37:
38: /**
39: * Indicate that any nodes returned in the sequence will be atomized. This
40: * means that if it wishes to do so, the implementation can return the typed
41: * values of the nodes rather than the nodes themselves. The implementation
42: * is free to ignore this hint.
43: * @param atomizing true if the caller of this iterator will atomize any
44: * nodes that are returned, and is therefore willing to accept the typed
45: * value of the nodes instead of the nodes themselves.
46: */
47:
48: public void setIsAtomizing(boolean atomizing) {
49: isAtomizing = atomizing;
50: }
51:
52: /**
53: * Determine whether any nodes returned by this iterator will be atomized,
54: * in which case the supplier has the option of atomizing them eagerly.
55: */
56:
57: protected final boolean isAtomizing() {
58: return isAtomizing;
59: }
60:
61: /**
62: * Get properties of this iterator, as a bit-significant integer.
63: *
64: * @return the properties of this iterator. This will be some combination of
65: * properties such as {@link GROUNDED}, {@link LAST_POSITION_FINDER},
66: * and {@link LOOKAHEAD}. It is always
67: * acceptable to return the value zero, indicating that there are no known special properties.
68: * It is acceptable for the properties of the iterator to change depending on its state.
69: */
70:
71: public int getProperties() {
72: return ATOMIZABLE;
73: }
74:
75: }
76:
77: //
78: // The contents of this file are subject to the Mozilla Public License Version 1.0 (the "License");
79: // you may not use this file except in compliance with the License. You may obtain a copy of the
80: // License at http://www.mozilla.org/MPL/
81: //
82: // Software distributed under the License is distributed on an "AS IS" basis,
83: // WITHOUT WARRANTY OF ANY KIND, either express or implied.
84: // See the License for the specific language governing rights and limitations under the License.
85: //
86: // The Original Code is: all this file.
87: //
88: // The Initial Developer of the Original Code is Michael H. Kay.
89: //
90: // Portions created by (your name) are Copyright (C) (your legal entity). All Rights Reserved.
91: //
92: // Contributor(s): none.
93: //
|