length property

  1. @override
int length
override

The number of elements in this.

Counting all elements may involve iterating through all elements and can therefore be slow. Some iterables have a more efficient way to find the number of elements. These must override the default implementation of length.

Implementation

@override
int get length {
  if (step.inMicroseconds == 0) throw Exception('Step cannot be 0');
  if (!step.isNegative) {
    if (start.isAfter(stop)) {
      throw Exception('start cannot be after stop when step is positive!');
    }
    int ret =
        (stop.difference(start).inMicroseconds / step.inMicroseconds).ceil();
    final last = start.add(step * ret);
    if (last.isBefore(stop) || last.isAtSameMomentAs(stop)) ret++;
    return ret;
  } else {
    if (start.isBefore(stop)) {
      throw Exception('start cannot be before stop when step is negative!');
    }
    int ret =
        (start.difference(stop).inMicroseconds / -step.inMicroseconds).ceil();
    final last = start.add(step * ret);
    if (last.isAfter(stop) || last.isAtSameMomentAs(stop)) ret++;
    return ret;
  }
}