read<T2 extends AbstractKey<Comparable>> method

  1. @override
Future<ReadResult<T2>> read<T2 extends AbstractKey<Comparable>>(
  1. T2 keyType, {
  2. T2? startkey,
  3. T2? endkey,
  4. KeyValueAdapterSession? session,
  5. required bool desc,
  6. required bool inclusiveStart,
  7. required bool inclusiveEnd,
  8. int? skip,
  9. int? limit,
})
override

Implementation

@override
Future<ReadResult<T2>> read<T2 extends AbstractKey<Comparable>>(T2 keyType,
    {T2? startkey,
    T2? endkey,
    KeyValueAdapterSession? session,
    required bool desc,
    required bool inclusiveStart,
    required bool inclusiveEnd,
    int? skip,
    int? limit}) async {
  var boxName = await getBoxName(keyType);
  var tree = _avlTrees[boxName]!;
  var box = _boxes[boxName]!;
  var iterator = desc ? tree.reverseIterator : tree.iterator;
  if (startkey?.key != null) {
    iterator = tree.fromIterator(startkey!,
        reversed: desc, inclusive: inclusiveStart);
  }
  var result = <T2, Map<String, dynamic>>{};
  var keys = tree.map((e) => e).toList();
  while (iterator.moveNext()) {
    if (endkey?.key != null) {
      var matching = (inclusiveEnd ? 1 : 0) * (desc ? -1 : 1);
      var endKeyCmp = iterator.current.compareTo(endkey);
      if (desc && endKeyCmp <= matching) {
        break;
      }
      if (!desc && endKeyCmp >= matching) {
        break;
      }
    }
    if (skip != null && skip > 0) {
      --skip;
    } else {
      var exist = await box.get(encodeKey(iterator.current));
      if (exist != null) {
        result[iterator.current as T2] = jsonDecode(exist);
      }
      if (limit != null) {
        --limit;
      }
    }
    if (limit == 0) {
      break;
    }
  }
  return ReadResult(
      totalRows: await tableSize(keyType), offset: 0, records: result);
}