JavaScript is disabled on your browser.
Skip navigation links
gnu.jemacs.swt

Class LineOffsets

  • All Implemented Interfaces:
    BoundedHashable, Array<UInt>, AVector<UInt>, Consumable, GVector<UInt>, Sequence<UInt>, java.io.Externalizable, java.io.Serializable, java.lang.Comparable, java.lang.Iterable<UInt>, java.util.Collection<UInt>, java.util.List<UInt>, java.util.RandomAccess


    public class LineOffsets
    extends U32Vector 
    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 U32Vector with a GapManager, 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)

    See Also:
    Serialized Form
    • Constructor Detail

      • LineOffsets

        public LineOffsets(int initialSize)
    • Method Detail

      • insertLine

        public void insertLine(int index,
         int offSet)
      • index2offset

        public int index2offset(int index)
      • offset2index

        public int offset2index(int offset)
        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.
      • deleteLines

        public void deleteLines(int firstLine,
         int numberOfLines)
      • insertLines

        public void insertLines(int index,
         int[] offsets)
      • countLines

        public int countLines(java.lang.String newText)
      • linesInRange

        public int linesInRange(int startOffset,
         int endOffset)
      • textRegionMoved

        public void textRegionMoved(int regionStart,
         int regionEnd,
         int displacement)
      • textInserted

        public void textInserted(int startOffset,
         java.lang.CharSequence seq)
      • textDeleted

        public void textDeleted(int startOffset,
         int endOffset)
      • isLineDelimiter

        public boolean isLineDelimiter(char c)
Skip navigation links

AltStyle によって変換されたページ (->オリジナル) /