javax.swing.text
Class GapContent
- AbstractDocument.Content, Serializable
This implementation of
AbstractDocument.Content
uses a gapped buffer.
This takes advantage of the fact that text area content is mostly inserted
sequentially. The buffer is a char array that maintains a gap at the current
insertion point. If characters a inserted at gap boundaries, the cost is
minimal (simple array access). The array only has to be shifted around when
the insertion point moves (then the gap also moves and one array copy is
necessary) or when the gap is filled up and the buffer has to be enlarged.
GapContent() - Creates a new GapContent object.
|
GapContent(int size) - Creates a new GapContent object with a specified initial size.
|
protected Object | allocateArray(int size) - Allocates an array of the specified length that can then be used as
buffer.
|
Position | createPosition(int offset) - Creates and returns a mark at the specified position.
|
protected Object | getArray() - Returns the allocated buffer array.
|
protected int | getArrayLength() - Returns the length of the allocated buffer array.
|
void | getChars(int where, int len, Segment txt) - Fetches a piece of content and stores it in a
Segment object.
|
protected int | getGapEnd() - Returns the end index of the gap within the buffer array.
|
protected int | getGapStart() - Returns the start index of the gap within the buffer array.
|
protected Vector<T> | getPositionsInRange(Vector<T> v, int offset, int length) - Returns all
Position s that are in the range specified by
offset and length within the buffer array.
|
String | getString(int where, int len) - Returns a piece of content as String.
|
UndoableEdit | insertString(int where, String str) - Inserts a string at the specified position.
|
int | length() - Returns the length of the content.
|
UndoableEdit | remove(int where, int nitems) - Removes a piece of content at th specified position.
|
protected void | replace(int position, int rmSize, Object addItems, int addSize) - Replaces a portion of the storage with the specified items.
|
protected void | resetMarksAtZero() - Resets all
Position that have an offset of 0 ,
to also have an array index of 0 .
|
protected void | shiftEnd(int newSize) - Enlarges the gap.
|
protected void | shiftGap(int newGapStart) - Shifts the gap to the specified position.
|
protected void | shiftGapEndUp(int newGapEnd) - Shifts the gap end upwards.
|
protected void | shiftGapStartDown(int newGapStart) - Shifts the gap start downwards.
|
protected void | updateUndoPositions(Vector<T> positions, int offset, int length) - Resets the positions in the specified range to their original offset
after a undo operation is performed.
|
clone , equals , extends Object> getClass , finalize , hashCode , notify , notifyAll , toString , wait , wait , wait |
GapContent
public GapContent()
Creates a new GapContent object.
GapContent
public GapContent(int size)
Creates a new GapContent object with a specified initial size.
size
- the initial size of the buffer
allocateArray
protected Object allocateArray(int size)
Allocates an array of the specified length that can then be used as
buffer.
size
- the size of the array to be allocated
getArray
protected final Object getArray()
Returns the allocated buffer array.
- the allocated buffer array
getArrayLength
protected int getArrayLength()
Returns the length of the allocated buffer array.
- the length of the allocated buffer array
getChars
public void getChars(int where,
int len,
Segment txt)
throws BadLocationException
Fetches a piece of content and stores it in a
Segment
object.
If the requested piece of text spans the gap, the content is copied into a
new array. If it doesn't then it is contiguous and the actual content
store is returned.
- getChars in interface AbstractDocument.Content
where
- the start location of the fragmentlen
- the length of the fragmenttxt
- the Segment object to store the fragment in
getGapEnd
protected final int getGapEnd()
Returns the end index of the gap within the buffer array.
- the end index of the gap within the buffer array
getGapStart
protected final int getGapStart()
Returns the start index of the gap within the buffer array.
- the start index of the gap within the buffer array
getPositionsInRange
protected Vector<T> getPositionsInRange(Vector<T> v,
int offset,
int length)
Returns all Position
s that are in the range specified by
offset
and length within the buffer array.
v
- the vector to use; if null
, a new Vector is allocatedoffset
- the start offset of the range to searchlength
- the length of the range to search
- the positions within the specified range
replace
protected void replace(int position,
int rmSize,
Object addItems,
int addSize)
Replaces a portion of the storage with the specified items.
position
- the position at which to remove itemsrmSize
- the number of items to removeaddItems
- the items to add at locationaddSize
- the number of items to add
resetMarksAtZero
protected void resetMarksAtZero()
Resets all Position
that have an offset of 0
,
to also have an array index of 0
. This might be necessary
after a call to shiftGap(0)
, since then the marks at offset
0
get shifted to gapEnd
.
shiftEnd
protected void shiftEnd(int newSize)
Enlarges the gap. This allocates a new bigger buffer array, copy the
segment before the gap as it is and the segment after the gap at the end
of the new buffer array. This does change the gapEnd mark but not the
gapStart mark.
newSize
- the new size of the gap
shiftGap
protected void shiftGap(int newGapStart)
Shifts the gap to the specified position.
newGapStart
- the new start position of the gap
shiftGapEndUp
protected void shiftGapEndUp(int newGapEnd)
Shifts the gap end upwards. This does not affect the content of the
buffer. This only updates the gap end and all the marks that are between
the old gap end and the new end start. They all are squeezed to the end
of the gap, because their location has been removed.
newGapEnd
- the new gap start
shiftGapStartDown
protected void shiftGapStartDown(int newGapStart)
Shifts the gap start downwards. This does not affect the content of the
buffer. This only updates the gap start and all the marks that are between
the old gap start and the new gap start. They all are squeezed to the start
of the gap, because their location has been removed.
newGapStart
- the new gap start
updateUndoPositions
protected void updateUndoPositions(Vector<T> positions,
int offset,
int length)
Resets the positions in the specified range to their original offset
after a undo operation is performed. For example, after removing some
content, the positions in the removed range will all be set to one
offset. This method restores the positions to their original offsets
after an undo.
positions
- the positions to updateoffset
- length
-
GapContent.java --
Copyright (C) 2002, 2004, 2005, 2006 Free Software Foundation, Inc.
This file is part of GNU Classpath.
GNU Classpath is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2, or (at your option)
any later version.
GNU Classpath is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
General Public License for more details.
You should have received a copy of the GNU General Public License
along with GNU Classpath; see the file COPYING. If not, write to the
Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
02110-1301 USA.
Linking this library statically or dynamically with other modules is
making a combined work based on this library. Thus, the terms and
conditions of the GNU General Public License cover the whole
combination.
As a special exception, the copyright holders of this library give you
permission to link this library with independent modules to produce an
executable, regardless of the license terms of these independent
modules, and to copy and distribute the resulting executable under
terms of your choice, provided that you also meet, for each linked
independent module, the terms and conditions of the license of that
module. An independent module is a module which is not derived from
or based on this library. If you modify this library, you may extend
this exception to your version of the library, but you are not
obligated to do so. If you do not wish to do so, delete this
exception statement from your version.