48 个版本
0.9.1 | 2021 年 3 月 14 日 |
---|---|
0.8.16 | 2021 年 3 月 13 日 |
0.8.15 | 2020 年 8 月 20 日 |
0.8.9 | 2020 年 7 月 19 日 |
0.2.6 | 2019 年 8 月 14 日 |
#622 in 数据结构
120KB
2K SLoC
threshold-rs
: Rust 中的阈值数据结构!
示例
假设多重集合 X
是 {10: 1, 8: 2, 6: 3, 5: 1}
。这意味着事件 10
发生了一次,事件 8
发生了两次,依此类推。
假设这些事件来自向量时钟,因此看到事件 10 意味着看到从 1 到 10 的所有事件。
例如,如果我们想找到至少被看到 4 次的事件(即我们的 阈值 是 4),我们应该得到事件 6
。
假设 threshold(u64, X) -> Option<u64>
,其中第一个参数是期望的阈值,输出是超过阈值的事件(如果有的话)。然后
threshold(1,X) = Some(10)
threshold(2,X) = Some(8)
threshold(3,X) = Some(8)
threshold(4,X) = Some(6)
threshold(7,X) = Some(5)
threshold(8,X) = None
代码示例
use threshold::{clock, *};
let vclock_0 = clock::vclock_from_seqs(vec![10, 5, 5]);
let vclock_1 = clock::vclock_from_seqs(vec![8, 10, 6]);
let vclock_2 = clock::vclock_from_seqs(vec![9, 8, 7]);
let mut tclock = TClock::new();
tclock.add(vclock_0);
tclock.add(vclock_1);
tclock.add(vclock_2);
let vclock_t1 = clock::vclock_from_seqs(vec![10, 10, 7]);
let vclock_t2 = clock::vclock_from_seqs(vec![9, 8, 6]);
let vclock_t3 = clock::vclock_from_seqs(vec![8, 5, 5]);
assert_eq!(tclock.threshold_union(1), vclock_t1);
assert_eq!(tclock.threshold_union(2), vclock_t2);
assert_eq!(tclock.threshold_union(3), vclock_t3);
许可证
根据您选择,许可如下
- Apache 许可证 2.0 版,(LICENSE-APACHE 或 https://apache.ac.cn/licenses/LICENSE-2.0)
- MIT 许可证 (LICENSE-MIT 或 http://opensource.org/licenses/MIT)
。
贡献
除非您明确声明,否则根据Apache-2.0许可定义的您有意提交的包含在工作中的任何贡献,都应按上述方式双授权,不附加任何额外条款或条件。
依赖项
~0.4–1MB
~22K SLoC