1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017年2月13日 |
---|
#2394 in 算法
9KB
125 行
history_tree
用于撤销/重做的持久历史树
这种数据结构在编辑器环境是开放的,例如托管其他编辑器的编辑器时,使编程变得更加容易。它使得创建游戏中相互依赖的脚本书写组件和新的编辑器功能的基础成为可能。
持久数据结构是一种高效存储不可变数据的数据结构。这允许一种不依赖于通过修改数据结构撤销和重做的编程模式。相反,您将数据存储在由历史树索引引用的块中。
通过读取子关系来控制块之间的关系。数据块可以安全地引用较早的数据块。历史树不需要知道这些引用如何表示,因为这些引用的一致性由复制较早树相同的状态来保证。
此历史树存储指向先前版本和父版本的记录。树是这些记录加上游标的一个函数。游标确定哪些记录是活动的。
当一个记录被新的活动记录指向时,它将被覆盖。一个记录被视为父记录的孩子,当它指向父记录或任何先前版本时。
.add
/.change
/.delete
是 O(1)
操作。
.children
是 O(N * M)
操作,其中 N
是父版本数,M
是记录。
为了使 .children
快速,记录仅存储索引。