merge method

void merge(
  1. Map<K, Record<V>> remoteRecords
)

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);
}