crypt of decay - piece chains, again [entries|archive|friends|userinfo]
ketmar

[ userinfo | ljr userinfo ]
[ archive | journal archive ]

piece chains, again [Nov. 15th, 2013|11:07 pm]
Previous Entry Add to Memories Tell A Friend Next Entry
~35 килобайт сишного кода. нет реализации API курсоров (без них тоже можно, но с ними быстрее шариться по тексту и движок сам будет поддерживать консистентность при изменениях) и нет undo-буфера.

курсоры — это, понятно, элементарно. undo-буфер чуть сложней, но не намного (те же кусочки создавать, только добавлять к ним позицию, откуда сковырнули). все структуры — opaque pointers, все модификации идут через две функции: «вставить» и «удалить». так что undo buffer можно добавить без ломания API вообще.

также поддерживаются «стили». точнее, у каждого куска может быть некое void *udata.

в принципе, вышел универсальный движок для работы с текстовым потоком.

куски, ноды, курсоры и буфера выделяются простым malloc(). это не то, чтобы дико эффективно, но в текущем применении я не рассчитываю редактировать гигабайты текстов, а для сотни-другой килобайт вполне покатит. сделать какой-нибудь zone/pool allocator не проблема, все элементы всё равно создаются фнукцией-конструктором и уничтожаются функцией-деструктором, так что раскиданых по коду malloc()/free() нет.

добью курсоры и undo — выложу на repo.or.cz, наверное. не то, чтобы это ещё кому-нибудь было надо, но лишний бэкап не помешает.

а если немного подпилить (ну, или вообще взять как есть) — вполне можно использовать как замену rope. собственно, это верёвочка и получилась, разве что нет выделеных операций split и concat. может, добавлю потом, операции, в общем-то, тривиальные.

WTFPL, как обычно.
Linkmeow!