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 -> int

Compare two timestamps

val equal_ts : timestamp -> timestamp -> bool

Check if two timestamps are equal

val timestamp : int -> int -> timestamp

Create a timestamp

val timespan : int -> int -> int -> timespan

Create a timespan

val contains : timespan -> timespan -> bool

Check if a timestamp is contained within a timespan

val timespan_end : timespan -> timestamp

Get 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_clock

Create a new logical clock

val tick : logical_clock -> timestamp

Tick 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_vector

Create a new clock vector

val observe : clock_vector -> timestamp -> unit

Observe a timestamp and update peer knowledge

val fork : clock_vector -> int -> clock_vector

Fork the clock vector with a new session ID

val clone : clock_vector -> clock_vector

Clone the clock vector