forEachEntryPrefix method

void forEachEntryPrefix(
  1. Uint8List prefix,
  2. void visit(
    1. Uint8List key,
    2. DocView? document
    )
)

Visits entries whose key starts with prefix, in key order.

Implementation

void forEachEntryPrefix(
  Uint8List prefix,
  void Function(Uint8List key, DocView? document) visit,
) {
  if (prefix.isEmpty) {
    forEachEntry(visit);
    return;
  }
  // Lower bound: first entry whose key is >= prefix.
  var low = 0;
  var high = _indexCount - 1;
  while (low <= high) {
    final middle = (low + high) >> 1;
    final comparison = _compareEntry(middle, prefix);
    if (comparison < 0) {
      low = middle + 1;
    } else {
      high = middle - 1;
    }
  }
  for (var i = low; i < _indexCount; i++) {
    final entryStart = _entryStart(i);
    final keyLength = VxsLe.u16(buffer, entryStart);
    if (keyLength < prefix.length ||
        !_rangeStartsWith(entryStart + 2, keyLength, prefix)) {
      break;
    }
    _visitEntry(i, visit);
  }
}