Package gnu.lists

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

  • All Implemented Interfaces:
    java.util.Enumeration<E>, java.util.Iterator<E>, java.util.ListIterator<E>
    Direct Known Subclasses:
    ExtPosition, KNode, TreePosition

    public class SeqPosition<E,​ESEQ extends AbstractSequence<E>>
    extends java.lang.Object
    implements java.util.ListIterator<E>, java.util.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 java.util.Enumeration<E>
      • hasNext

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

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

        public java.lang.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 java.util.ListIterator<E>
      • next

        public E next()
        See java.util.ListIterator.
        Specified by:
        next in interface java.util.Iterator<E>
        Specified by:
        next in interface java.util.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 java.util.ListIterator<E>
      • nextElement

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

        public java.lang.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 java.lang.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 java.util.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 java.util.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 java.util.ListIterator<E>
      • setNext

        public void setNext​(E value)
      • setPrevious

        public void setPrevious​(E value)
      • remove

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

        public void add​(E o)
        Specified by:
        add in interface java.util.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)
      • release

        public void release()
      • finalize

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

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

        public java.lang.String toInfo()