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 Summary
Fields -
Constructor Summary
ConstructorsConstructorDescriptionSeqPosition
(ESEQ seq) SeqPosition
(ESEQ seq, int ipos) SeqPosition
(ESEQ seq, int offset, boolean isAfter) -
Method Summary
Modifier and TypeMethodDescriptionvoid
copy()
void
finalize()
final int
int
getNext()
Get element following current position.int
Return a code (defined in Sequence) for the type of the next element.Get the "tag name" for the next element, if any.Get the "tag object" for the next element, if any.int
getPos()
Get a position int "cookie" for this SeqPosition.Get element before the current position.boolean
Set position before first child (of the element following position).final void
boolean
gotoNext()
Move one element forwards, if possible.boolean
Move backwards one element.final void
final boolean
True if there is an element following the current position.boolean
hasNext()
See java.util.Iterator.boolean
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.next()
See java.util.ListIterator.final E
See java.util.Enumeration.int
See java.util.Iterator.previous()
See java.util.ListIterator.final int
See java.util.Iterator.void
release()
void
remove()
final void
void
void
set
(SeqPosition<E, ESEQ> pos) void
void
setPos
(int ipos) void
void
setPrevious
(E value) toInfo()
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 Details
-
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 iposAn 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
-
SeqPosition
-
SeqPosition
-
-
Method Details
-
make
Creates a new SeqPosition, from a position pair. The position pair is copied (using copyPos). -
copy
-
gotoStart
-
gotoEnd
-
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
Get the "tag name" for the next element, if any. -
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
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
See java.util.ListIterator.- Specified by:
previous
in interfaceListIterator<E>
-
nextElement
See java.util.Enumeration.- Specified by:
nextElement
in interfaceEnumeration<E>
-
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
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
- Specified by:
set
in interfaceListIterator<E>
-
setNext
-
setPrevious
-
remove
public void remove() -
add
- 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
-
setPos
public void setPos(int ipos) -
set
-
set
-
release
public void release() -
finalize
public void finalize() -
toString
-
toInfo
-