apply method

void apply(
  1. Map<BytesKey, Uint8List?> pending
)

Apply a set of pending changes as a new delta version.

Implementation

void apply(final Map<BytesKey, Uint8List?> pending) {
  _guardReadonly();
  final version = _store.current + 1;
  final timestamp = DateTime.now().millisecondsSinceEpoch;

  // Serialize delta
  final needed = DeltaBlock.required(pending);
  final pointer = _dbm.pool.allocate(needed);
  final delta = DeltaBlock.encode(version, timestamp, pending, pointer);
  delta.block.write(_dbm.file);

  // Append to version list
  _store.append(VersionEntry(version, timestamp, pointer));

  // Write version list — flush header before freeing old block
  final old = _dbm.header.list;
  final listPtr = _store.write(old);
  _dbm.header.list = listPtr;
  _dbm.header.counter = version;
  _flush();
  if (old.isNotEmpty && old != listPtr) {
    _dbm.pool.free(old);
  }
}