8 个版本
0.2.0 | 2023 年 1 月 14 日 |
---|---|
0.1.6 | 2019 年 9 月 27 日 |
0.1.5 | 2019 年 7 月 9 日 |
#1093 in 算法
用于 2 crates
27KB
489 行
将 Delta 算法移植到 Rust
此算法在 fossil 中使用,该算法已在 C-99 中实现。此 crate 包含用 Rust 实现的相同算法。
它导出两个函数:delta(a:&str, b:&str) -> String
和 deltainv(b:&str, d:&str) -> String
。
// creating delta between a and its next version b
let d = delta(a, b);
// applying delta to b to get previous version a
let s = deltainv(b, d);
assert_eq!(s, a);
假设我们有一些文本值 a
,用户将其更改为值 b
。使用 delta
函数,我们可以获取一个压缩的差分值 d
,我们可以将其存储并与其新文本值 b
一起保存。如果以后用户想查看之前的文本版本,我们可以使用 deltainv(b, d)
来获取之前的值 a
。如果我们保留所有连续的差分,我们可以多次使用 deltainv
来获取任何早期的文本版本。
在两个 utf-8 编码字符串之间计算出的差分值本身是 utf-8 编码的字符串。
该算法在 fossil wiki 中的 这里 有很好的描述。
此存储库的代码最佳查看方式是使用Leo 编辑器。包含代码的概要文件在单个文件中:fossil-delta-ref.leo。
此存储库还包含两个 Rust 包,py-fossil-delta
,它将 fossil-delta 函数作为扩展模块导出到 Python。
第三个包是leo-ver-serv
,这是一个二进制(可执行)的 Web 服务器,可以接收来自 Leo 的快照,计算与上一个快照的差异,并将所有差异存储在数据库中。另一方面,此服务器提供一个小型 Web 应用程序,允许用户浏览已知的 Leo 文件的历史记录。