Package gnu.lists

Class SeqPosition<E,ESEQ extends AbstractSequence<E>>

java.lang.Object
gnu.lists.SeqPosition<E,ESEQ>
All Implemented Interfaces:
Enumeration<E>, Iterator<E>, ListIterator<E>
Direct Known Subclasses:
ExtPosition, KNode, TreePosition

public class SeqPosition<E,ESEQ extends AbstractSequence<E>> extends Object implements ListIterator<E>, Enumeration<E>
A position in a sequence (list). Conceptually similar to Java2's ListIterator, but we use the name "Position" to indicate that it can be used to both indicate a position in a sequence and to iterate through a sequence. If you use a SeqPosition as a "position", you would not modify if (though it is possible the offset of the position in the sequence may change due to other update operations on the sequence). If you use a SeqPosition as an "iterator", you would initialize it to some beginnning position, and then modify the current position of the SeqPosition so it refers to successive elements. See the package overview for more information.
  • Field Details

    • sequence

      public ESEQ extends AbstractSequence<E> sequence
      The Sequence relative to which ipos and xpos have meaning. This is normally the same as the Sequence we iterate through. However, if this is a TreePosition, it may an ancestor instead.
    • ipos

      public int ipos
      An integer that (together with xpos) indicates the current position. The actual value has no meaning, except as interpreted by sequence.
  • Constructor Details

    • SeqPosition

      public SeqPosition()
    • SeqPosition

      public SeqPosition(ESEQ seq)
    • SeqPosition

      public SeqPosition(ESEQ seq, int offset, boolean isAfter)
    • SeqPosition

      public SeqPosition(ESEQ seq, int ipos)
  • Method Details

    • make

      public static <E, ESEQ extends AbstractSequence<E>> SeqPosition<E,ESEQ> make(ESEQ seq, int ipos)
      Creates a new SeqPosition, from a position pair. The position pair is copied (using copyPos).
    • copy

      public SeqPosition<E,ESEQ> copy()
    • gotoStart

      public final void gotoStart(ESEQ seq)
    • gotoEnd

      public final void gotoEnd(ESEQ seq)
    • gotoChildrenStart

      public boolean gotoChildrenStart()
      Set position before first child (of the element following position).
      Returns:
      true if there is a child sequence (which might be empty); false if current position is end of sequence or following element is atomic (cannot have children).
    • hasMoreElements

      public final boolean hasMoreElements()
      True if there is an element following the current position. False if we are at the end. See java.util.Enumeration.
      Specified by:
      hasMoreElements in interface Enumeration<E>
    • hasNext

      public boolean hasNext()
      See java.util.Iterator.
      Specified by:
      hasNext in interface Iterator<E>
      Specified by:
      hasNext in interface ListIterator<E>
    • getNextKind

      public int getNextKind()
      Return a code (defined in Sequence) for the type of the next element.
    • getNextTypeName

      public String getNextTypeName()
      Get the "tag name" for the next element, if any.
    • getNextTypeObject

      public E getNextTypeObject()
      Get the "tag object" for the next element, if any.
    • hasPrevious

      public boolean hasPrevious()
      See java.util.Iterator.
      Specified by:
      hasPrevious in interface ListIterator<E>
    • next

      public E next()
      See java.util.ListIterator.
      Specified by:
      next in interface Iterator<E>
      Specified by:
      next in interface ListIterator<E>
    • gotoNext

      public boolean gotoNext()
      Move one element forwards, if possible.
      Returns:
      if we succeeded in moving forwards (i.e. not at end of sequence).
    • gotoPrevious

      public boolean gotoPrevious()
      Move backwards one element.
      Returns:
      false iff already at beginning.
    • previous

      public E previous()
      See java.util.ListIterator.
      Specified by:
      previous in interface ListIterator<E>
    • nextElement

      public final E nextElement()
      See java.util.Enumeration.
      Specified by:
      nextElement in interface Enumeration<E>
    • getNext

      public Object getNext()
      Get element following current position. Does not move the position, in contrast to next() method.
      Returns:
      EOF if at end of sequence, otherwise the value following.
    • getPrevious

      public Object getPrevious()
      Get element before the current position. Does not move the position, in contrast to previous() method.
      Returns:
      EOF if at beginning of sequence, otherwise the value prior.
    • nextIndex

      public int nextIndex()
      See java.util.Iterator.
      Specified by:
      nextIndex in interface ListIterator<E>
    • fromEndIndex

      public final int fromEndIndex()
    • getContainingSequenceSize

      public int getContainingSequenceSize()
    • previousIndex

      public final int previousIndex()
      See java.util.Iterator.
      Specified by:
      previousIndex in interface ListIterator<E>
    • isAfter

      public boolean isAfter()
      Tests whether the position pair has the "isAfter" property. I.e. if something is inserted at the position, will the iterator end up being after the new data? A toNext() or next() command should set isAfter() to true; a toPrevious or previous command should set isAfter() to false.
    • set

      public final void set(E value)
      Specified by:
      set in interface ListIterator<E>
    • setNext

      public void setNext(E value)
    • setPrevious

      public void setPrevious(E value)
    • remove

      public void remove()
      Specified by:
      remove in interface Iterator<E>
      Specified by:
      remove in interface ListIterator<E>
    • add

      public void add(E o)
      Specified by:
      add in interface ListIterator<E>
    • getPos

      public int getPos()
      Get a position int "cookie" for this SeqPosition. The result can be passed to AbstractSequence's getPosNext(int), createRelativePos, and other methods. By default this is the value of ipos, but for sequences that need emore state than an ipos for efficient position, we use a PositionManager index. So this gets over-ridden in ExtPosition.
    • setPos

      public void setPos(ESEQ seq, int ipos)
    • setPos

      public void setPos(int ipos)
    • set

      public void set(ESEQ seq, int index, boolean isAfter)
    • set

      public void set(SeqPosition<E,ESEQ> pos)
    • release

      public void release()
    • finalize

      public void finalize()
      Overrides:
      finalize in class Object
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • toInfo

      public String toInfo()