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.
-
-
Constructor Summary
Constructors Constructor Description SeqPosition()SeqPosition(ESEQ seq)SeqPosition(ESEQ seq, int ipos)SeqPosition(ESEQ seq, int offset, boolean isAfter)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description voidadd(E o)SeqPosition<E,ESEQ>copy()voidfinalize()intfromEndIndex()intgetContainingSequenceSize()ObjectgetNext()Get element following current position.intgetNextKind()Return a code (defined in Sequence) for the type of the next element.StringgetNextTypeName()Get the "tag name" for the next element, if any.EgetNextTypeObject()Get the "tag object" for the next element, if any.intgetPos()Get a position int "cookie" for this SeqPosition.ObjectgetPrevious()Get element before the current position.booleangotoChildrenStart()Set position before first child (of the element following position).voidgotoEnd(ESEQ seq)booleangotoNext()Move one element forwards, if possible.booleangotoPrevious()Move backwards one element.voidgotoStart(ESEQ seq)booleanhasMoreElements()True if there is an element following the current position.booleanhasNext()See java.util.Iterator.booleanhasPrevious()See java.util.Iterator.booleanisAfter()Tests whether the position pair has the "isAfter" property.static <E,ESEQ extends AbstractSequence<E>>
SeqPosition<E,ESEQ>make(ESEQ seq, int ipos)Creates a new SeqPosition, from a position pair.Enext()See java.util.ListIterator.EnextElement()See java.util.Enumeration.intnextIndex()See java.util.Iterator.Eprevious()See java.util.ListIterator.intpreviousIndex()See java.util.Iterator.voidrelease()voidremove()voidset(E value)voidset(ESEQ seq, int index, boolean isAfter)voidset(SeqPosition<E,ESEQ> pos)voidsetNext(E value)voidsetPos(int ipos)voidsetPos(ESEQ seq, int ipos)voidsetPrevious(E value)StringtoInfo()StringtoString()-
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface java.util.Enumeration
asIterator
-
Methods inherited from interface java.util.Iterator
forEachRemaining
-
-
-
-
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.
-
-
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).
-
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:
hasMoreElementsin interfaceEnumeration<E>
-
hasNext
public boolean hasNext()
See java.util.Iterator.
-
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:
hasPreviousin interfaceListIterator<E>
-
next
public E next()
See java.util.ListIterator.
-
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:
previousin interfaceListIterator<E>
-
nextElement
public final E nextElement()
See java.util.Enumeration.- Specified by:
nextElementin interfaceEnumeration<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:
nextIndexin interfaceListIterator<E>
-
fromEndIndex
public final int fromEndIndex()
-
getContainingSequenceSize
public int getContainingSequenceSize()
-
previousIndex
public final int previousIndex()
See java.util.Iterator.- Specified by:
previousIndexin interfaceListIterator<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:
setin interfaceListIterator<E>
-
setNext
public void setNext(E value)
-
setPrevious
public void setPrevious(E value)
-
remove
public void remove()
-
add
public void add(E o)
- Specified by:
addin interfaceListIterator<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()
-
toInfo
public String toInfo()
-
-