javax.swing.text

Class GapContent

Implemented Interfaces:
AbstractDocument.Content, Serializable

public class GapContent
extends Object
implements 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

See Also:
Serialized Form

Constructor Summary

GapContent()
Creates a new GapContent object.
GapContent(int size)
Creates a new GapContent object with a specified initial size.

Method Summary

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.

Methods inherited from class java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Constructor Details

GapContent

public GapContent()
Creates a new GapContent object.


GapContent

public GapContent(int size)
Creates a new GapContent object with a specified initial size.

Parameters:
size - the initial size of the buffer

Method Details

allocateArray

protected Object allocateArray(int size)
Allocates an array of the specified length that can then be used as buffer.

Parameters:
size - the size of the array to be allocated

Returns:
the allocated array


createPosition

public Position createPosition(int offset)
            throws BadLocationException
Creates and returns a mark at the specified position.
Specified by:
createPosition in interface AbstractDocument.Content

Parameters:
offset - the position at which to create the mark

Returns:
the create Position object for the mark

Throws:
BadLocationException - if the offset is not a valid position in the buffer


getArray

protected Object getArray()
Returns the allocated buffer array.

Returns:
the allocated buffer array


getArrayLength

protected int getArrayLength()
Returns the length of the allocated buffer array.

Returns:
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.
Specified by:
getChars in interface AbstractDocument.Content

Parameters:
where - the start location of the fragment
len - the length of the fragment
txt - the Segment object to store the fragment in

Throws:
BadLocationException - if where or where + len are no valid locations in the buffer


getString

public String getString(int where,
                        int len)
            throws BadLocationException
Returns a piece of content as String.
Specified by:
getString in interface AbstractDocument.Content

Parameters:
where - the start location of the fragment
len - the length of the fragment

Throws:
BadLocationException - if where or where + len are no valid locations in the buffer


insertString

public UndoableEdit insertString(int where,
                                 String str)
            throws BadLocationException
Inserts a string at the specified position.
Specified by:
insertString in interface AbstractDocument.Content

Parameters:
where - the position where the string is inserted
str - the string that is to be inserted

Returns:
an UndoableEdit object (currently not supported, so null is returned)

Throws:
BadLocationException - if where is not a valid location in the buffer


length

public int length()
Returns the length of the content.
Specified by:
length in interface AbstractDocument.Content

Returns:
the length of the content


remove

public UndoableEdit remove(int where,
                           int nitems)
            throws BadLocationException
Removes a piece of content at th specified position.
Specified by:
remove in interface AbstractDocument.Content

Parameters:
where - the position where the content is to be removed
nitems - number of characters to be removed

Returns:
an UndoableEdit object (currently not supported, so null is returned)

Throws:
BadLocationException - if where is not a valid location 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.

Parameters:
newSize - the new size of the gap


shiftGap

protected void shiftGap(int newGapStart)
Shifts the gap to the specified position.

Parameters:
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.