Package gnu.lists

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

  • 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 Detail

      • 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 Detail

      • 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 Detail

      • 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).
      • 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>
      • 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>
      • 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)
      • 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)
      • release

        public void release()
      • finalize

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

        public String toInfo()