У меня есть 2D текстоподобный буфер (в основном List<List<Object>>
), проиндексированный координатами (строка, столбец). Каждая строка может иметь произвольную длину.
Пусть pos = (row, col)
. Тогда интервал определяется как (fromPos, toPos)
.
Текстовый буфер можно изменить, вставив и удалив символы:
void addRow(int rowIndex, Row<T> newRow);
void removeRow(int rowIndex);
void insert(int row, int col, Collection<? extends T> els);
void delete(int row, int col, int count);
Как мне отразить изменения в тексте в позиции интервалов? Интервалы являются вложенными, но не строго.
Основная проблема заключается в том, что интервалы могут быть пустыми, а порядок и вложение интервалов должны быть сохранены.
Например:
0 1 2 3 4 (interval number)
[a[bcd[]][][ef]gh] (text)
0 123 45 67 (char index)
после вставки X
в 3-м интервале (абсолютная позиция 4) должно стать
0 1 2 3 4 (interval number)
[a[bcd[]][X][ef]ghijk] (text)
Какими способами можно хранить интервалы, чтобы иметь возможность корректно и эффективно отражать изменения текста?