Tree Clocks
Various Tree Clock data structures including the original Interval Tree Clock data structure from the 2008 paper "Interval Tree Clocks: A Logical Clock for Dynamic Systems"[pdf] as well as extensions on the idea.
Features
- Implementation of the
IdTree
andEventTree
from the original paper - A higher-level
ItcPair
abstraction for ease of use - A new
ItcIndex
to go fromEventTree
toSet<IdTree>
Usage
Add to your Cargo.toml
:
$ cargo add treeclocks
ItcPair
The ItcPair
provides a higher-level abstraction around the IdTree
and EventTree
data-structures.
use ItcPair;
let mut n0 = new;
let mut n1 = n0.fork;
let mut n2 = n1.fork;
n0.event;
n0.event;
n2.event;
// Sync to update the `EventTree` without merging `IdTree`s
n1.sync;
// Join to merge both `EventTree` and `IdTree`s
n0.join;
assert!;
ItcMap
The ItcMap
provides an in-memory key-value store with operations to keep the map in sync with minimal overhead in a distributed system.
use ;
let mut map_a = new;
let mut map_b = new;
let id_a = new;
let = id_a.fork;
map_a.insert;
map_b.insert;
let patch_for_b = map_a.diff;
let patch_for_a = map_b.diff;
map_a.apply;
map_b.apply;
assert_eq!
License
Licensed under either of:
- Apache License, Version 2.0, (LICENSE-APACHE or https://www.apache.org/licenses/LICENSE-2.0)
- MIT license (LICENSE-MIT or https://opensource.org/licenses/MIT)
at your option.
Contribution
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.