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.
TODO: Implement UndoableEdit support stuff
- Serialized Form
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.
|
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 | shiftEnd(int newSize) - Enlarges the gap.
|
protected void | shiftGap(int newGapStart) - Shifts the gap to the specified position.
|
clone , equals , finalize , getClass , 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
- the allocated array
getArray
protected 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
BadLocationException
- if where
or
where + len
are no valid locations in the buffer
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
GapContent.java --
Copyright (C) 2002, 2004, 2005 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.