yaa*_*ami 11 c programming-languages data-structures
我打算在c中做一个文本编辑器.所以只想知道保存文本的数据结构是什么.我阅读使用链表是一种方法,但效率不高.请指出一些参考资料,我可以很好地了解需要使用的内容.我打算使用ncurses库来获取用户输入和捕获键和UI.
使用现有编辑器的源代码有点过于复杂,所有文本编辑器都很庞大,甚至只有控制台编辑器.任何简单的控制台编辑器源代码供参考?
阅读有关Emacs缓冲区的信息,您将受益匪浅.另请参阅此博客,特别是最后评论,引用此处以便于参考:
许多版本的Emacs,包括GNU,使用一个连续的字符数组,实际上分为两个部分,由间隙分隔.插入间隙首先移动到插入点.插入的字符填入间隙,减小其大小.如果没有足够的空间来容纳字符,则整个缓冲区将重新分配到新的更大尺寸,并且间隙在前一个插入点处合并.
天真地看待这一点,并说由于所涉及的所有复制,性能必须很差.错误.复制操作非常快,可以通过多种方式进行优化.间隙缓冲区还利用了使用模式.在聚焦和插入文本之前,您可能会跳过窗口.间隙不会移动显示 - 仅用于插入(或删除).
另一方面,在500MB文件的头部插入一个字符块,然后在末尾插入另一个字符块是间隙方法的最坏情况,特别是如果超出间隙的大小.这种情况多久发生一次?
连续内存块在虚拟内存环境中受到重视,因为涉及的分页较少.此外,读取和写入都是简单的,因为不必解析文件并将其分解为其他一些数据结构.相反,间隙缓冲区中文件的内部表示与磁盘相同,可以最佳地读写.写入本身可以通过单个系统调用完成(在*nix上).
间隙缓冲区是以一般方式编辑文本的最佳算法.它使用最少的内存,并且在各种用例中具有最高的聚合性能.将间隙缓冲区转换为可视窗口有点棘手,因为必须不断维护行上下文.