14c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/*
24c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one
34c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * or more contributor license agreements. See the NOTICE file
44c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed with this work for additional information
54c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * regarding copyright ownership. The ASF licenses this file
64c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * to you under the Apache License, Version 2.0 (the  "License");
74c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * you may not use this file except in compliance with the License.
84c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * You may obtain a copy of the License at
94c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson *
104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson *     http://www.apache.org/licenses/LICENSE-2.0
114c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson *
124c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * Unless required by applicable law or agreed to in writing, software
134c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS,
144c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
154c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * See the License for the specific language governing permissions and
164c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * limitations under the License.
174c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */
184c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/*
194c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * $Id: DTMAxisIterator.java 468653 2006-10-28 07:07:05Z minchau $
204c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */
214c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpackage org.apache.xml.dtm;
224c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
234c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson/**
244c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson * This class iterates over a single XPath Axis, and returns node handles.
254c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson */
264c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilsonpublic interface DTMAxisIterator extends Cloneable
274c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson{
284c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
294c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /** Specifies the end of the iteration, and is the same as DTM.NULL.  */
304c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public static final int END = DTM.NULL;
314c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
324c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
334c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Get the next node in the iteration.
344c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
354c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return The next node handle in the iteration, or END.
364c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
374c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public int next();
384c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
394c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
404c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
414c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Resets the iterator to the last start node.
424c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
434c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return A DTMAxisIterator, which may or may not be the same as this
444c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *         iterator.
454c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
464c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public DTMAxisIterator reset();
474c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
484c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
494c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return the number of nodes in this iterator.  This may be an expensive
504c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * operation when called the first time.
514c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
524c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public int getLast();
534c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
544c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
554c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return The position of the current node in the set, as defined by XPath.
564c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
574c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public int getPosition();
584c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
594c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
604c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Remembers the current node for the next call to gotoMark().
614c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
624c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public void setMark();
634c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
644c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
654c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Restores the current node remembered by setMark().
664c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
674c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public void gotoMark();
684c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
694c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
704c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Set start to END should 'close' the iterator,
714c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * i.e. subsequent call to next() should return END.
724c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
734c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param node Sets the root of the iteration.
744c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
754c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return A DTMAxisIterator set to the start of the iteration.
764c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
774c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public DTMAxisIterator setStartNode(int node);
784c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
794c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
804c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Get start to END should 'close' the iterator,
814c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * i.e. subsequent call to next() should return END.
824c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
834c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return The root node of the iteration.
844c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
854c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public int getStartNode();
864c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
874c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
884c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return true if this iterator has a reversed axis, else false.
894c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
904c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public boolean isReverse();
914c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
924c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
934c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return a deep copy of this iterator. The clone should not be reset
944c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * from its current position.
954c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
964c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public DTMAxisIterator cloneIterator();
974c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
984c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
994c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Set if restartable.
1004c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
1014c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public void setRestartable(boolean isRestartable);
1024c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson
1034c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  /**
1044c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * Return the node at the given position.
1054c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   *
1064c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @param position The position
1074c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   * @return The node at the given position.
1084c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson   */
1094c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson  public int getNodeByPosition(int position);
1104c7a0d97cf2b27790e6236965a1d798d710d7ec7Jesse Wilson}
111