gnu.lists

Class SeqPosition

Implemented Interfaces:
java.util.Enumeration, java.util.ListIterator
Known Direct Subclasses:
ExtPosition, KNode, Marker, TreePosition

public class SeqPosition
extends java.lang.Object
implements java.util.ListIterator, java.util.Enumeration

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

int
ipos
An integer that (together with xpos) indicates the current position.
AbstractSequence
sequence
The Sequence relative to which ipos and xpos have meaning.

Constructor Summary

SeqPosition()
SeqPosition(AbstractSequence seq)
SeqPosition(AbstractSequence seq, int ipos)
SeqPosition(AbstractSequence seq, int offset, boolean isAfter)

Method Summary

void
add(Object o)
SeqPosition
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.
Object
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(AbstractSequence seq)
boolean
gotoNext()
Move one element forwards, if possible.
boolean
gotoPrevious()
Move backwards one element.
void
gotoStart(AbstractSequence 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 SeqPosition
make(AbstractSequence seq, int ipos)
Creates a new SeqPosition, from a position pair.
Object
next()
See java.util.ListIterator.
Object
nextElement()
See java.util.Enumeration.
int
nextIndex()
See java.util.Iterator.
Object
previous()
See java.util.ListIterator.
int
previousIndex()
See java.util.Iterator.
void
release()
void
remove()
void
set(Object value)
void
set(AbstractSequence seq, int index, boolean isAfter)
void
set(SeqPosition pos)
void
setNext(Object value)
void
setPos(AbstractSequence seq, int ipos)
void
setPos(int ipos)
void
setPrevious(Object value)
String
toInfo()
String
toString()

Field Details

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.

sequence

public AbstractSequence 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.

Constructor Details

SeqPosition

public SeqPosition()

SeqPosition

public SeqPosition(AbstractSequence seq)

SeqPosition

public SeqPosition(AbstractSequence seq,
                   int ipos)

SeqPosition

public SeqPosition(AbstractSequence seq,
                   int offset,
                   boolean isAfter)

Method Details

add

public void add(Object o)

copy

public SeqPosition copy()

finalize

public void finalize()

fromEndIndex

public final int fromEndIndex()

getContainingSequenceSize

public int getContainingSequenceSize()

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.

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 Object getNextTypeObject()
Get the "tag object" for the next element, if any.

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.

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.

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).

gotoEnd

public final void gotoEnd(AbstractSequence seq)

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.

gotoStart

public final void gotoStart(AbstractSequence seq)

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.

hasNext

public boolean hasNext()
See java.util.Iterator.

hasPrevious

public boolean hasPrevious()
See java.util.Iterator.

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.

make

public static SeqPosition make(AbstractSequence seq,
                               int ipos)
Creates a new SeqPosition, from a position pair. The position pair is copied (using copyPos).

next

public Object next()
See java.util.ListIterator.

nextElement

public final Object nextElement()
See java.util.Enumeration.

nextIndex

public int nextIndex()
See java.util.Iterator.

previous

public Object previous()
See java.util.ListIterator.

previousIndex

public final int previousIndex()
See java.util.Iterator.

release

public void release()

remove

public void remove()

set

public final void set(Object value)

set

public void set(AbstractSequence seq,
                int index,
                boolean isAfter)

set

public void set(SeqPosition pos)

setNext

public void setNext(Object value)

setPos

public void setPos(AbstractSequence seq,
                   int ipos)

setPos

public void setPos(int ipos)

setPrevious

public void setPrevious(Object value)

toInfo

public String toInfo()

toString

public String toString()