This is a Dart port of the hybrid logical clock implementation described by Jared Forsyth in this article.
HLCs are a useful primitive for CRDT implementations.
In pubspec.yaml
:
dependencies:
hlc: ^1.0.0
Import the library:
import 'package:hlc/hlc.dart';
Initialize a local HLC with the current wall clock:
var hlc = HLC.now();
Perform a local action that requires advancing the local HLC:
hlc = hlc.increment();
Receive a remote HLC, applying it to the local one:
final remoteHlc = HLC.now(); // From somewhere in the network.
hlc = hlc.receive(remoteHlc);
Serialize/deserialize an HLC while maintaining its topological ordering:
final serialized = hlc.pack();
final deserialized = HLC.unpack(serialized);