Crdt.Clock
crdt · API reference
Logical timestamps and clock vectors
Logical timestamps and clock vectors.
This module implements the clock types from json-joy:
- Timestamp: (session_id, logical_time) pair
- Timespan: Timestamp with a span/length
- ClockVector: Vector clock for multiple sessions
type timestamp = {
sid : int; (* Session ID (53-bit safe integer) *)
time : int; (* Logical time (53-bit safe integer) *)
}A logical timestamp identifying a unique operation
type timespan = {
sid : int;
time : int;
span : int; (* Length of the span *)
}A timespan representing a range of timestamps
val compare_ts : timestamp -> timestamp -> intCompare two timestamps
val equal_ts : timestamp -> timestamp -> boolCheck if two timestamps are equal
val timestamp : int -> int -> timestampCreate a timestamp
val timespan : int -> int -> int -> timespanCreate a timespan
val contains : timespan -> timespan -> boolCheck if a timestamp is contained within a timespan
val timespan_end : timespan -> timestampGet the end timestamp of a timespan (exclusive)
type logical_clock = {
mutable clock_sid : int;
mutable clock_time : int;
}A logical clock for a single session
val create_clock : int -> logical_clockCreate a new logical clock
val tick : logical_clock -> timestampTick the clock and return the new timestamp
type clock_vector = {
local : logical_clock;
mutable peers : (int * int) list; (* (sid, observed_time) pairs *)
}A clock vector tracking multiple sessions
val create_vector : int -> clock_vectorCreate a new clock vector
val observe : clock_vector -> timestamp -> unitObserve a timestamp and update peer knowledge
val fork : clock_vector -> int -> clock_vectorFork the clock vector with a new session ID
val clone : clock_vector -> clock_vectorClone the clock vector