gnu.lists
Class SeqPosition

java.lang.Object
  extended by gnu.lists.SeqPosition
All Implemented Interfaces:
java.util.Enumeration, java.util.Iterator, java.util.ListIterator
Direct Known 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(java.lang.Object o)
           
 SeqPosition copy()
           
 void finalize()
           
 int fromEndIndex()
           
 int getContainingSequenceSize()
           
 java.lang.Object getNext()
          Get element following current position.
 int getNextKind()
          Return a code (defined in Sequence) for the type of the next element.
 java.lang.String getNextTypeName()
          Get the "tag name" for the next element, if any.
 java.lang.Object getNextTypeObject()
          Get the "tag object" for the next element, if any.
 int getPos()
          Get a position int "cookie" for this SeqPosition.
 java.lang.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.
 java.lang.Object next()
          See java.util.ListIterator.
 java.lang.Object nextElement()
          See java.util.Enumeration.
 int nextIndex()
          See java.util.Iterator.
 java.lang.Object previous()
          See java.util.ListIterator.
 int previousIndex()
          See java.util.Iterator.
 void release()
           
 void remove()
           
 void set(AbstractSequence seq, int index, boolean isAfter)
           
 void set(java.lang.Object value)
           
 void set(SeqPosition pos)
           
 void setNext(java.lang.Object value)
           
 void setPos(AbstractSequence seq, int ipos)
           
 void setPos(int ipos)
           
 void setPrevious(java.lang.Object value)
           
 java.lang.String toInfo()
           
 java.lang.String toString()
           
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

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.


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.

Constructor Detail

SeqPosition

public SeqPosition()

SeqPosition

public SeqPosition(AbstractSequence seq)

SeqPosition

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

SeqPosition

public SeqPosition(AbstractSequence seq,
                   int ipos)
Method Detail

make

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


copy

public SeqPosition copy()

gotoStart

public final void gotoStart(AbstractSequence seq)

gotoEnd

public final void gotoEnd(AbstractSequence 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 interface java.util.Enumeration

hasNext

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

Specified by:
hasNext in interface java.util.Iterator
Specified by:
hasNext in interface java.util.ListIterator

getNextKind

public int getNextKind()
Return a code (defined in Sequence) for the type of the next element.


getNextTypeName

public java.lang.String getNextTypeName()
Get the "tag name" for the next element, if any.


getNextTypeObject

public java.lang.Object getNextTypeObject()
Get the "tag object" for the next element, if any.


hasPrevious

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

Specified by:
hasPrevious in interface java.util.ListIterator

next

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

Specified by:
next in interface java.util.Iterator
Specified by:
next in interface 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 java.lang.Object previous()
See java.util.ListIterator.

Specified by:
previous in interface java.util.ListIterator

nextElement

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

Specified by:
nextElement in interface java.util.Enumeration

getNext

public java.lang.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 java.lang.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 interface java.util.ListIterator

fromEndIndex

public final int fromEndIndex()

getContainingSequenceSize

public int getContainingSequenceSize()

previousIndex

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

Specified by:
previousIndex in interface java.util.ListIterator

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(java.lang.Object value)
Specified by:
set in interface java.util.ListIterator

setNext

public void setNext(java.lang.Object value)

setPrevious

public void setPrevious(java.lang.Object value)

remove

public void remove()
Specified by:
remove in interface java.util.Iterator
Specified by:
remove in interface java.util.ListIterator

add

public void add(java.lang.Object o)
Specified by:
add in interface java.util.ListIterator

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(AbstractSequence seq,
                   int ipos)

setPos

public void setPos(int ipos)

set

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

set

public void set(SeqPosition pos)

release

public void release()

finalize

public void finalize()
Overrides:
finalize in class java.lang.Object

toString

public java.lang.String toString()
Overrides:
toString in class java.lang.Object

toInfo

public java.lang.String toInfo()