merge method
Merges two CRDTs and updates record and canonical clocks accordingly. See also mergeJson().
Implementation
void merge(Map<K, Record<V>> remoteRecords) {
final localRecords = recordMap();
final updatedRecords = (remoteRecords
..removeWhere((key, value) {
_canonicalTime = Hlc.recv(_canonicalTime, value.hlc);
return localRecords[key] != null &&
localRecords[key]!.hlc >= value.hlc;
}))
.map((key, value) =>
MapEntry(key, Record<V>(value.hlc, value.value, _canonicalTime)));
// Store updated records
putRecords(updatedRecords);
// Increment canonical time
_canonicalTime = Hlc.send(_canonicalTime);
}