Буфер разрыва - Википедия - Gap buffer

А буфер промежутка в Информатика это динамический массив что позволяет выполнять эффективные операции вставки и удаления в одном месте. Промежуточные буферы особенно распространены в текстовые редакторы, где большинство изменений текста происходит в текущем местоположении курсор. Текст хранится в большом буфере в двух смежных сегментах с промежутком между ними для вставки нового текста. Перемещение курсора подразумевает копирование текста с одной стороны промежутка на другую (иногда копирование откладывается до следующей операции, которая изменяет текст). Вставка добавляет новый текст в конец первого сегмента; удаление удаляет его.

Текст в буфере пробелов представлен двумя струны, которые занимают очень мало места и которые можно найти и отобразить очень быстро, по сравнению с более сложными структуры данных Такие как связанные списки. Однако операции в разных местах текста и операции, заполняющие пробел (требующие создания нового пробела), могут потребовать копирования большей части текста, что особенно неэффективно для больших файлов. Использование буферов пропусков основано на предположении, что такое повторное копирование происходит достаточно редко, и его стоимость может быть снижена. амортизированный над более распространенными дешевыми операциями. Это делает буфер зазора более простой альтернативой веревка для использования в текстовых редакторах[1] Такие как Emacs.[2]

Пример

Ниже приведены несколько примеров работы с буферными промежутками. Промежуток представлен пустым пространством между квадратными скобками. Это представление немного обманчиво: в типичной реализации конечные точки разрыва отслеживаются с помощью указатели или индексы массива, а содержимое пробела игнорируется; это позволяет, например, выполнять удаления, регулируя указатель без изменения текста в буфере. Обычной практикой программирования является использование полуоткрытого интервала для указателей пробелов, т. Е. Начало интервала указывает на недопустимый символ, следующий за последним символом в первом буфере, а конец пробела указывает на первый. допустимый символ во втором буфере (или, что эквивалентно, указатели считаются указывающими «между» символами).

Начальное состояние:

Это выход [].

Пользователь вставляет новый текст:

Так мир начинался [].

Пользователь перемещает курсор перед «начато»; система перемещает "начало" из первого буфера во второй буфер.

Так начинался мир [].

Пользователь добавляет текст, заполняя пробел; система создает новый пробел:

Так возник мир, каким мы его знаем [].

Смотрите также

Рекомендации

  1. ^ Марк К. Чу-Кэрролл. "Промежуточные буферы, или не связываться веревками? " НаукаБлоги, 2009-02-18. Проверено 30 января 2013 г.
  2. ^ информация о буфере пробелов emacs Проверено 30 января 2013 г.

внешняя ссылка