На старом добром ZX-Spectrum один (или более, я не знаю) текстовый редактор использовал очень простую структуру.
Был один большой буфер, который занимал всю свободную оперативную память.Текст был разделен на две части в позиции курсора.Часть перед курсором была помещена в начало буфера, а остальная часть - в конец буфера.При вводе текста данные просто добавляются в конец первой части, а когда курсор перемещается, текст копируется вперед и назад.
Макет буфера:
Hello, World!
^------Cursor here
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|H|e|l|l|o|,| |W| <free> |o|r|l|d|!|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| ^ ^ |
begin cur1 cur2 end
Вот как некоторые редактируютбыло выполнено операций:
Type a char: buffer[cur1++] = character
Backspace: cur1--
Cursor left: buffer[--cur2] = buffer[--cur1]
Cursor right: buffer[cur1++] = buffer[cur2++]
Буфер в действии:
Hello, W..............orld!
Press right ^ ^
Hello, Wo..............rld!
Press backspace ^ ^
Hello, W...............rld!
Press 0 ^ ^
Hello, W0..............rld!
^ ^