EasySync协同技术指南(译)
1 文档
-
一个文档(document)是一个字符(char)列表或一个字符串(string)
-
一个文档也可以被表示为一个变更集(changeset)列表
2 变更集
-
一个变更集表示对文档的一个更改
-
一个变更集可以被应用于一个文档以产生一个新的文档
-
当一个文档被表示为一个变更集列表时,我们认为第一个变更集应用于空文档 []。
3 变更集表示
(l→l′)[c1, c2, c3, ...]
l代表文档更改前的长度,
l′代表文档更改后的长度,
[c1, c2, c3,...]是描述更改后文档的一个字符数组(长为l′)。
满足0 ≤ i ≤ l′ 的任意ci 是一个数字整型(int)或一个字符
-
数字表示在原始文档中保留的字符
-
字符表示插入
4 变更集约束
-
变更集是遵循一定规范的,因而具有可比较性。在计算机内存中, 我们总是对相同的变更集有着同样的表示。如果两个变更集的内存表示有区别,它们一定是不同的变更集。
-
变更集是简洁的。因此,如果在计算机内存中有两种方式表示一个变更集,我们总是使用占用最少字节的那一种。
稍后我们会讨论对变更集表示的优化(采用“strips”和其他类似的技术)。任何变更集表示都必须满足这两个约束条件。
5 符号表示
-
我们用代数乘法符号来表示变更集的应用
-
当变更集被定义为对文档的操作时,文档本身被表示为一个变更集列表,初始化于一个空文档
举例 A = (0→5)[“hello”] B = (5→11)[0−4,“world”]
我们可以把文档 “hello world” 写作A·B或者AB. 注意初始文档可以被表示为变更集 (0→N)[“<文档内容>”]。
当A和B是变更集时,我们也可以把 (AB) 称为A和B的组合,变更集在组合后是封闭的。
6 变更集组合
对于任意两个变更集,类似
A = (n1→n2)[···]
B = (n2→n3)[···]
很明显存在第三个变更集C = (n1→n3)[···] 应用于文档X能与先应用A后应用B得到同样的结果。在这种

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



