| java.lang.Object gnu.lists.AbstractSequence gnu.lists.GapVector gnu.lists.StableVector
All known Subclasses: gnu.lists.CharBuffer,
StableVector | public class StableVector extends GapVector (Code) | | Implements a stable sequence with sticky positions.
I.e if you have a position, it gets automatically updated after
insertions and deletions.
|
Field Summary | |
final static int | END_POSITION Index in positions for the end position.
positions[END] is always (size()<<1)+1. | final protected static int | FREE_POSITION An invalid value for an in-use element of positions. | final static int | START_POSITION Index in positions for the start position.
positions[START_POSITION] is always 0. | protected int | free The head of the free elements in position, if they are chained.
We need track of available elements in the positions array in two ways:
In unchained mode, there is no free list per se. | protected int[] | positions This array maps from the exported ipos values (indexes in the positions
array) to the ipos of the underlying SimpleVector base.
The first two elements are reserved for START_POSITION and END_POSITION.
Unused elements in positions are chained together in a free list
headed by the 'free' variable. |
Method Summary | |
protected int | addPos(int ipos, Object value) | protected void | adjustPositions(int low, int high, int delta) Add a delta to all positions elements that point into a given range.
Assume x==positions[i], then if (unsigned)x>=(unsigned)low
&& (unsigned)x <= (unsigned)high, then add delta to positions[i].
Using unsigned comparisons allows us to compare ipos values,
which include both the index and the isAfter low-order bit. | protected int | allocPositionIndex() | protected void | chainFreelist() Put all free elements in positions in a chain starting with free. | public void | consumePosRange(int iposStart, int iposEnd, Consumer out) | public int | copyPos(int ipos) | public int | createPos(int index, boolean isAfter) | public int | endPos() | public void | fillPosRange(int fromPos, int toPos, Object value) | protected void | gapReserve(int size) | public boolean | hasNext(int ipos) | protected boolean | isAfterPos(int ipos) | public int | nextIndex(int ipos) | public int | nextPos(int ipos) | public void | releasePos(int ipos) | protected void | removePosRange(int ipos0, int ipos1) | protected void | shiftGap(int newGapStart) | public int | startPos() | protected void | unchainFreelist() Set all free elements in positions to FREE_POSITION. |
END_POSITION | final static int END_POSITION(Code) | | Index in positions for the end position.
positions[END] is always (size()<<1)+1.
|
FREE_POSITION | final protected static int FREE_POSITION(Code) | | An invalid value for an in-use element of positions.
|
START_POSITION | final static int START_POSITION(Code) | | Index in positions for the start position.
positions[START_POSITION] is always 0.
|
free | protected int free(Code) | | The head of the free elements in position, if they are chained.
We need track of available elements in the positions array in two ways:
In unchained mode, there is no free list per se. Instead an index i
is available if positions[i]==FREE_POSITION. This modemakes it
easy to loop over all positions, ignores the unused ones.
In chained mode, there is a free list and if index i is available,
then positions[i] is the next available index, with -1 if there is none.
Unchained mode is indicated by free==-2.
In chained mode, free is the first element in the free list,
or -1 if the free list is empty.
The main virtue of this convention is that we don't need a separate
list or array for the free list. But we should get rid of the
unchained mode, at least. FIXME.
|
positions | protected int[] positions(Code) | | This array maps from the exported ipos values (indexes in the positions
array) to the ipos of the underlying SimpleVector base.
The first two elements are reserved for START_POSITION and END_POSITION.
Unused elements in positions are chained together in a free list
headed by the 'free' variable.
|
StableVector | protected StableVector()(Code) | | |
adjustPositions | protected void adjustPositions(int low, int high, int delta)(Code) | | Add a delta to all positions elements that point into a given range.
Assume x==positions[i], then if (unsigned)x>=(unsigned)low
&& (unsigned)x <= (unsigned)high, then add delta to positions[i].
Using unsigned comparisons allows us to compare ipos values,
which include both the index and the isAfter low-order bit.
|
allocPositionIndex | protected int allocPositionIndex()(Code) | | |
chainFreelist | protected void chainFreelist()(Code) | | Put all free elements in positions in a chain starting with free.
|
consumePosRange | public void consumePosRange(int iposStart, int iposEnd, Consumer out)(Code) | | |
copyPos | public int copyPos(int ipos)(Code) | | |
createPos | public int createPos(int index, boolean isAfter)(Code) | | |
endPos | public int endPos()(Code) | | |
fillPosRange | public void fillPosRange(int fromPos, int toPos, Object value)(Code) | | |
gapReserve | protected void gapReserve(int size)(Code) | | |
hasNext | public boolean hasNext(int ipos)(Code) | | |
isAfterPos | protected boolean isAfterPos(int ipos)(Code) | | |
nextIndex | public int nextIndex(int ipos)(Code) | | |
nextPos | public int nextPos(int ipos)(Code) | | |
releasePos | public void releasePos(int ipos)(Code) | | |
removePosRange | protected void removePosRange(int ipos0, int ipos1)(Code) | | |
shiftGap | protected void shiftGap(int newGapStart)(Code) | | |
startPos | public int startPos()(Code) | | |
unchainFreelist | protected void unchainFreelist()(Code) | | Set all free elements in positions to FREE_POSITION.
|
Methods inherited from gnu.lists.GapVector | public void add(int index, Object o)(Code)(Java Doc) protected int addPos(int ipos, Object value)(Code)(Java Doc) public void consumePosRange(int iposStart, int iposEnd, Consumer out)(Code)(Java Doc) public int createPos(int index, boolean isAfter)(Code)(Java Doc) public void fill(Object value)(Code)(Java Doc) public void fillPosRange(int fromPos, int toPos, Object value)(Code)(Java Doc) protected void gapReserve(int size)(Code)(Java Doc) protected void gapReserve(int where, int size)(Code)(Java Doc) public Object get(int index)(Code)(Java Doc) public int getNextKind(int ipos)(Code)(Java Doc) public int getSegment(int where, int len)(Code)(Java Doc) public boolean hasNext(int ipos)(Code)(Java Doc) protected boolean isAfterPos(int ipos)(Code)(Java Doc) protected int nextIndex(int ipos)(Code)(Java Doc) protected void removePosRange(int ipos0, int ipos1)(Code)(Java Doc) public Object set(int index, Object value)(Code)(Java Doc) protected void shiftGap(int newGapStart)(Code)(Java Doc) public int size()(Code)(Java Doc)
|
Methods inherited from gnu.lists.AbstractSequence | public boolean add(Object o)(Code)(Java Doc) public void add(int index, Object o)(Code)(Java Doc) public boolean addAll(Collection c)(Code)(Java Doc) public boolean addAll(int index, Collection c)(Code)(Java Doc) protected int addPos(int ipos, Object value)(Code)(Java Doc) public void clear()(Code)(Java Doc) public int compare(int ipos1, int ipos2)(Code)(Java Doc) final public int compare(SeqPosition i1, SeqPosition i2)(Code)(Java Doc) public static int compare(AbstractSequence seq1, int pos1, AbstractSequence seq2, int pos2)(Code)(Java Doc) public void consume(Consumer out)(Code)(Java Doc) public boolean consumeNext(int ipos, Consumer out)(Code)(Java Doc) public void consumePosRange(int iposStart, int iposEnd, Consumer out)(Code)(Java Doc) public boolean contains(Object o)(Code)(Java Doc) public boolean containsAll(Collection c)(Code)(Java Doc) public int copyPos(int ipos)(Code)(Java Doc) abstract public int createPos(int index, boolean isAfter)(Code)(Java Doc) public int createRelativePos(int pos, int delta, boolean isAfter)(Code)(Java Doc) final public Enumeration elements()(Code)(Java Doc) public int endPos()(Code)(Java Doc) public boolean equals(int ipos1, int ipos2)(Code)(Java Doc) public boolean equals(Object o)(Code)(Java Doc) public void fill(Object value)(Code)(Java Doc) public void fill(int fromIndex, int toIndex, Object value)(Code)(Java Doc) public void fillPosRange(int fromPos, int toPos, Object value)(Code)(Java Doc) public int firstAttributePos(int ipos)(Code)(Java Doc) public int firstChildPos(int ipos)(Code)(Java Doc) public int firstChildPos(int ipos, ItemPredicate predicate)(Code)(Java Doc) protected int fromEndIndex(int ipos)(Code)(Java Doc) abstract public Object get(int index)(Code)(Java Doc) public Object get(int[] indexes)(Code)(Java Doc) public Object getAttribute(int index)(Code)(Java Doc) public int getAttributeLength()(Code)(Java Doc) protected int getContainingSequenceSize(int ipos)(Code)(Java Doc) public int getEffectiveIndex(int[] indexes)(Code)(Java Doc) protected int getIndexDifference(int ipos1, int ipos0)(Code)(Java Doc) final public SeqPosition getIterator()(Code)(Java Doc) public SeqPosition getIterator(int index)(Code)(Java Doc) public SeqPosition getIteratorAtPos(int ipos)(Code)(Java Doc) public int getLowBound(int dim)(Code)(Java Doc) public int getNextKind(int ipos)(Code)(Java Doc) public String getNextTypeName(int ipos)(Code)(Java Doc) public Object getNextTypeObject(int ipos)(Code)(Java Doc) public Object getPosNext(int ipos)(Code)(Java Doc) public Object getPosPrevious(int ipos)(Code)(Java Doc) public int getSize(int dim)(Code)(Java Doc) protected boolean gotoAttributesStart(TreePosition pos)(Code)(Java Doc) final public boolean gotoChildrenStart(TreePosition pos)(Code)(Java Doc) protected boolean gotoParent(TreePosition pos)(Code)(Java Doc) public boolean hasNext(int ipos)(Code)(Java Doc) protected boolean hasPrevious(int ipos)(Code)(Java Doc) public int hashCode()(Code)(Java Doc) public int indexOf(Object o)(Code)(Java Doc) protected boolean isAfterPos(int ipos)(Code)(Java Doc) public boolean isEmpty()(Code)(Java Doc) final public Iterator iterator()(Code)(Java Doc) public int lastIndexOf(Object o)(Code)(Java Doc) final public ListIterator listIterator()(Code)(Java Doc) final public ListIterator listIterator(int index)(Code)(Java Doc) protected int nextIndex(int ipos)(Code)(Java Doc) final public int nextIndex(SeqPosition pos)(Code)(Java Doc) public int nextMatching(int startPos, ItemPredicate type, int endPos, boolean descend)(Code)(Java Doc) public int nextPos(int ipos)(Code)(Java Doc) public int parentPos(int ipos)(Code)(Java Doc) public int previousPos(int ipos)(Code)(Java Doc) public int rank()(Code)(Java Doc) protected void releasePos(int ipos)(Code)(Java Doc) public Object remove(int index)(Code)(Java Doc) public boolean remove(Object o)(Code)(Java Doc) public boolean removeAll(Collection c)(Code)(Java Doc) public void removePos(int ipos, int count)(Code)(Java Doc) protected void removePosRange(int ipos0, int ipos1)(Code)(Java Doc) public boolean retainAll(Collection c)(Code)(Java Doc) public Object set(int[] indexes, Object value)(Code)(Java Doc) public Object set(int index, Object element)(Code)(Java Doc) protected void setPosNext(int ipos, Object value)(Code)(Java Doc) protected void setPosPrevious(int ipos, Object value)(Code)(Java Doc) abstract public int size()(Code)(Java Doc) public int stableCompare(AbstractSequence other)(Code)(Java Doc) public int startPos()(Code)(Java Doc) public List subList(int fromIx, int toIx)(Code)(Java Doc) public Sequence subSequence(SeqPosition start, SeqPosition end)(Code)(Java Doc) protected Sequence subSequencePos(int ipos0, int ipos1)(Code)(Java Doc) public Object[] toArray()(Code)(Java Doc) public Object[] toArray(Object[] arr)(Code)(Java Doc) public void toString(String sep, StringBuffer sbuf)(Code)(Java Doc) public String toString()(Code)(Java Doc) protected RuntimeException unsupported(String text)(Code)(Java Doc) public static RuntimeException unsupportedException(String text)(Code)(Java Doc)
|
|
|