2 个稳定版本

使用旧的 Rust 2015

1.1.0 2016 年 2 月 26 日
1.0.0 2016 年 2 月 25 日

#2146算法

MIT 许可证

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。 ASource 将是我们插入的第一个元组,因此需要稍后 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

无运行时依赖