public class GapTextStore extends Object implements ITextStore
Performance: Typing-style changes perform in constant time unless re-allocation
becomes necessary. Generally, a change that does not cause re-allocation will cause at most one
arraycopy operation of a length of
about d, where d is the distance from the previous change. Let a(x)
be the algorithmic performance of an arraycopy
operation of the length x,
then such a change then performs in O(a(x)),
get(int, length) performs in O(a(length)),
get(int)
in O(1).
How frequently the array needs re-allocation is controlled by the constructor parameters.
This class is not intended to be subclassed.
for a copy-on-write text store wrapper
Constructor and Description |
---|
GapTextStore()
Equivalent to
new GapTextStore(256, 4096, 0.1f).
|
GapTextStore(int lowWatermark,
int highWatermark)
Deprecated.
use
GapTextStore(int, int, float) instead |
GapTextStore(int minSize,
int maxSize,
float maxGapFactor)
Creates an empty text store that uses re-allocation thresholds relative to the content
length.
|
Modifier and Type | Method and Description |
---|---|
char |
get(int offset)
Returns the character at the specified offset.
|
String |
get(int offset,
int length)
Returns the text of the specified character range.
|
protected String |
getContentAsString()
Returns a copy of the content of this text store.
|
protected int |
getGapEndIndex()
Returns the end index of the gap managed by this text store.
|
protected int |
getGapStartIndex()
Returns the start index of the gap managed by this text store.
|
int |
getLength()
Returns number of characters stored in this text store.
|
void |
replace(int offset,
int length,
String text)
Replaces the specified character range with the given text.
|
void |
set(String text)
Replace the content of the text store with the given text.
|
public GapTextStore(int lowWatermark, int highWatermark)
GapTextStore(int, int, float)
insteadlowWatermark
- unused - at the lower bound, the array is only resized when the content
does not fithighWatermark
- if the gap is ever larger than this, it will automatically be shrunken
(>= 0)public GapTextStore()
public GapTextStore(int minSize, int maxSize, float maxGapFactor)
[0, maxGapFactor]
. When re-allocation occurs, the array is sized
such that the gap factor is 0.5 * maxGapFactor
. The gap size computed in this
manner is bounded by the minSize
and maxSize
parameters.
A maxGapFactor
of 0
creates a text store that never has a gap
at all (if minSize
is 0); a maxGapFactor
of 1
creates a text store that doubles its size with every re-allocation and that never shrinks.
The minSize
and maxSize
parameters are absolute bounds to the
allocated gap size. Use minSize
to avoid frequent re-allocation for small
documents. Use maxSize
to avoid a huge gap being allocated for large
documents.
minSize
- the minimum gap size to allocate (>= 0; use 0 for no minimum)maxSize
- the maximum gap size to allocate (>= minSize; use
Integer.MAX_VALUE
for no maximum)maxGapFactor
- is the maximum fraction of the array that is occupied by the gap (0 <= maxGapFactor <= 1
)public final char get(int offset)
ITextStore
get
in interface ITextStore
offset
- the offset in this text storepublic final String get(int offset, int length)
ITextStore
get
in interface ITextStore
offset
- the offset of the rangelength
- the length of the rangepublic final int getLength()
ITextStore
getLength
in interface ITextStore
public final void set(String text)
ITextStore
replace(0, getLength(), text
.set
in interface ITextStore
text
- the new content of the text storepublic final void replace(int offset, int length, String text)
ITextStore
replace(getLength(), 0, "some text")
is a valid
call and appends text to the end of the text store.replace
in interface ITextStore
offset
- the offset of the range to be replacedlength
- the number of characters to be replacedtext
- the substitution textprotected String getContentAsString()
protected int getGapStartIndex()
protected int getGapEndIndex()
Copyright (c) 2000, 2015 Eclipse Contributors and others. All rights reserved.Guidelines for using Eclipse APIs.