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 void
add(E o)
SeqPosition<E,ESEQ>
copy()
void
finalize()
int
fromEndIndex()
int
getContainingSequenceSize()
Object
getNext()
Get element following current position.int
getNextKind()
Return a code (defined in Sequence) for the type of the next element.String
getNextTypeName()
Get the "tag name" for the next element, if any.E
getNextTypeObject()
Get the "tag object" for the next element, if any.int
getPos()
Get a position int "cookie" for this SeqPosition.Object
getPrevious()
Get element before the current position.boolean
gotoChildrenStart()
Set position before first child (of the element following position).void
gotoEnd(ESEQ seq)
boolean
gotoNext()
Move one element forwards, if possible.boolean
gotoPrevious()
Move backwards one element.void
gotoStart(ESEQ seq)
boolean
hasMoreElements()
True if there is an element following the current position.boolean
hasNext()
See java.util.Iterator.boolean
hasPrevious()
See java.util.Iterator.boolean
isAfter()
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.E
next()
See java.util.ListIterator.E
nextElement()
See java.util.Enumeration.int
nextIndex()
See java.util.Iterator.E
previous()
See java.util.ListIterator.int
previousIndex()
See java.util.Iterator.void
release()
void
remove()
void
set(E value)
void
set(ESEQ seq, int index, boolean isAfter)
void
set(SeqPosition<E,ESEQ> pos)
void
setNext(E value)
void
setPos(int ipos)
void
setPos(ESEQ seq, int ipos)
void
setPrevious(E value)
String
toInfo()
String
toString()
-
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:
hasMoreElements
in 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:
hasPrevious
in 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:
previous
in interfaceListIterator<E>
-
nextElement
public final E nextElement()
See java.util.Enumeration.- Specified by:
nextElement
in 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:
nextIndex
in interfaceListIterator<E>
-
fromEndIndex
public final int fromEndIndex()
-
getContainingSequenceSize
public int getContainingSequenceSize()
-
previousIndex
public final int previousIndex()
See java.util.Iterator.- Specified by:
previousIndex
in 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:
set
in 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:
add
in 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()
-
-