| Crates.io | threshold |
| lib.rs | threshold |
| version | 0.9.1 |
| created_at | 2019-08-08 14:14:21.777771+00 |
| updated_at | 2021-03-14 21:49:29.049532+00 |
| description | Threshold data structures |
| homepage | https://github.com/vitorenesduarte/threshold-rs |
| repository | https://github.com/vitorenesduarte/threshold-rs.git |
| max_upload_size | |
| id | 155034 |
| size | 133,033 |
threshold-rs: threshold data structures in Rust!Assume multiset X is {10: 1, 8: 2, 6: 3, 5: 1}.
This means that event 10 was seen once, event 8 twice, and so on.
Assume that these events come from vector clocks, and thus seeing event 10 means seeing all events from 1 to 10.
If, for example, we want the event that was seen at least 4 times (i.e. our threshold is 4), we should get event 6.
Assume threshold(u64, X) -> Option<u64> where the first argument is the threshold desired and the output the event that passes the threshold (in case there's one). Then:
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) = Noneuse 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);
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.