| gnu.lists.GapVector gnu.jemacs.swt.LineOffsets
LineOffsets | public class LineOffsets extends GapVector (Code) | | The purpose of this class is to maintain an ordered set of line offsets for an
SwtCharBuffer.
With a LineOffsets instance it's possible to map from the number of a line to the text
position where it begins, and back, reasonably fast.
(O(1) for line number to line offset, O(log(#lines)) for line offset to line number)
LineOffsets extends GapVector with an U32Vector as base, allowing new line offsets to be inserted
quickly during normal text typing.
Instances of SwtCharBuffer should hold an instance LineOffsets class and notify it whenever the it's text changes.
The notification happens through the methods:
-
textRegionMoved, which should be called when the gap (of SwtCharBuffer) changes
(position or size).
-
textInserted.
-
textDeleted.
TODO: decouple this, using a more general event model..
Assume that lineOffset is an instance of LineOffsets, held by swtCharBuffer an instance of
SwtCharBuffer.
Then a value of o at index i in lineOffsets.base
means that the line with line number
n = (i < lOff.gapStart ? i : i + lOff.gapEnd - lOff.gapStart)
starts at text position
p = (o < swtCB.gapStart ? o : o + swtCB.gapEnd - swtCB.gapStart)
author: Christian Surlykke author: 12-07-2004 |
Constructor Summary | |
public | LineOffsets(int initialSize) |
minGapSize | final public static int minGapSize(Code) | | |
LineOffsets | public LineOffsets(int initialSize)(Code) | | |
deleteLines | public void deleteLines(int firstLine, int numberOfLines)(Code) | | |
index2offset | public int index2offset(int index)(Code) | | |
insertLine | public void insertLine(int index, int offSet)(Code) | | |
insertLines | public void insertLines(int index, int[] offsets)(Code) | | |
isLineDelimiter | public boolean isLineDelimiter(char c)(Code) | | |
linesInRange | public int linesInRange(int startOffset, int endOffset)(Code) | | |
offset2index | public int offset2index(int offset)(Code) | | We seek the line containing a given text offset using a halfing of intervals algorithm. Therefore
the method will use O(log(n)) time, n being the number of lines.
See Also: org.eclipse.swt.custom.StyledTextContent.getLineAtOffset(int) |
textDeleted | public void textDeleted(int startOffset, int endOffset)(Code) | | |
textRegionMoved | public void textRegionMoved(int regionStart, int regionEnd, int displacement)(Code) | | |
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)
|
|
|