2 个稳定版本
使用旧的 Rust 2015
1.1.0 | 2016 年 2 月 26 日 |
---|---|
1.0.0 | 2016 年 2 月 25 日 |
#2146 在 算法 中
6KB
84 行
Ackr
Ackr 是 Storm acking 算法的 Rust 实现,允许跟踪 DAG 中任意元组的状态,需要的静态内存仅为 ~20 字节。
入门指南
使用 Cargo 安装它
[dependencies]
ackr = "1.0.0"
并在您的 src/lib.rs
中包含该包
extern crate ackr;
use ackr::{Tuple, Source, Task, Ackr};
创建新的源
每个 Ackr 可以跟踪多个 DAG 的元组及其状态。
let mut ackr = Ackr::new();
ackr.insert(Source(1), Task(1));
任务可以是任意的,它们只是 u32
的包装,但它们能够跟踪 ack 的来源。
源是源元组 ID,即 u64
。如果您有以下 DAG
A(1)
|
B(2)
每个元组都应该关联一个随机 ID。 A
或 Source
将是我们插入的第一个元组,因此需要稍后 ack 以使其被视为 "完成"。
assert!(ackr.has_completed(Source(1)));
由于我们使用初始 Source 作为第一个元组,因此 has_completed
将返回 false
,因为我们还没有 ack 它。
ackr.ack(Source(1), Tuple(1));
assert!(ackr.has_completed(Source(1)));
现在这将返回 true
,因为我们已经 ack 了 1
的 Source/Tuple。
ack 元组
插入和 ack 实际上是同一件事。ack 一个元组一次相当于插入,ack 两次相当于移除,从而 "完成" 元组。
但是,为了使其更清晰,有两个不同的 API。
ackr.insert(Source(1), Tuple(2));
回到之前的 DAG 示例 A(1) -> B(2)
,我们正在插入 DAG 的下一个元组。
ackr.ack(Source(1), Tuple(2));
现在我们已经 ack/完成这个元组。
一旦所有元组(包括源 DAG)都被 ack,has_completed
将返回 true
。
许可证
MIT