Буфер разрыва

Структура данных, используемая в текстовых редакторах

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

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

Пример

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

Исходное состояние:

Это выход [ ].

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

Вот как возник мир.

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

Вот как возник мир [ ].

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

Именно так начинался мир, каким мы его знаем.

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

Ссылки

  1. ^ Марк К. Чу-Кэрролл. «Буферы зазоров, или не связывайтесь веревками?» ScienceBlogs , 18.02.2009. Дата обращения 30.01.2013.
  2. ^ Информация о буфере пробелов emacs Доступно 30.01.2013.
  • Реализация на языке C
  • Обзор и реализация в .NET/C#
  • Краткий обзор и пример кода C++
  • Реализация циклического сортированного буфера пробелов в .NET/C#
  • Использование буфера пробелов в раннем редакторе. (Впервые написано где-то между 1969 и 1971 годами)
  • Информация о буфере зазоров emacs (справочник по буферу зазоров Emacs)
  • Flexichain: редактируемая последовательность и ее реализация с использованием буфера зазоров
  • Текстовое противостояние: буферы зазоров против канатов
Взято с "https://en.wikipedia.org/w/index.php?title=Gap_buffer&oldid=1240474495"