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 TypeMethodDescriptionvoidcopy()voidfinalize()final intintgetNext()Get element following current position.intReturn 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.intgetPos()Get a position int "cookie" for this SeqPosition.Get element before the current position.booleanSet position before first child (of the element following position).final voidbooleangotoNext()Move one element forwards, if possible.booleanMove backwards one element.final voidfinal booleanTrue if there is an element following the current position.booleanhasNext()See java.util.Iterator.booleanSee 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.next()See java.util.ListIterator.final ESee java.util.Enumeration.intSee java.util.Iterator.previous()See java.util.ListIterator.final intSee java.util.Iterator.voidrelease()voidremove()final voidvoidvoidset(SeqPosition<E, ESEQ> pos) voidvoidsetPos(int ipos) voidvoidsetPrevious(E value) toInfo()toString()Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface java.util.Enumeration
asIteratorMethods 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:
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
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:
hasPreviousin 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:
previousin interfaceListIterator<E>
-
nextElement
See java.util.Enumeration.- Specified by:
nextElementin 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:
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
- Specified by:
setin interfaceListIterator<E>
-
setNext
-
setPrevious
-
remove
public void remove() -
add
- 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
-
setPos
public void setPos(int ipos) -
set
-
set
-
release
public void release() -
finalize
public void finalize() -
toString
-
toInfo
-