getGroups method

Iterable<GroupedRangeList<E>> getGroups([
  1. RangeList? range
])

Returns all groups that intersects with the specified range.

Implementation

Iterable<GroupedRangeList<E>> getGroups([RangeList? range]) {
  if (range == null) {
    return _groups.getRange(0, _groups.length);
  }

  final length = _groups.length;
  final left = _findNearestIndex(0, length, range.start);
  var firstIndex = -1;
  var lastIndex = -1;
  for (var i = left; i < length; i++) {
    if (_groups[i].intersect(range)) {
      if (firstIndex == -1) {
        firstIndex = i;
        lastIndex = i;
      } else {
        lastIndex = i;
      }
    } else if (firstIndex != -1) {
      break;
    }
  }

  if (firstIndex == -1) {
    return <GroupedRangeList<E>>[];
  }

  return _groups.getRange(firstIndex, lastIndex + 1);
}