length property
The number of elements in this Iterable.
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;
}
}