extent<T> function

Extent<T> extent <T>(
  1. Iterable<T> i,
  2. [Comparator<T> compare]
)

Returns the minimum and maximum values in i, according to the order specified by the compare function, in an Extent instance. Always returns an Extent, but Extent.min and Extent.max may be null if i is empty.

The compare function must act as a Comparator. If compare is omitted, Comparable.compare is used. If i contains null elements, an exception will be thrown.

If i is empty, an Extent is returned with null values for min and max, since there are no valid values for them.

Implementation

Extent<T> extent<T>(Iterable<T> i, [Comparator<T> compare]) {
  if (i.isEmpty) return Extent(null, null);
  final Comparator<T> _compare = compare ?? Comparable.compare;
  var iterator = i.iterator;
  var hasNext = iterator.moveNext();
  if (!hasNext) return Extent(null, null);
  var max = iterator.current;
  var min = iterator.current;
  while (iterator.moveNext()) {
    if (_compare(max, iterator.current) < 0) max = iterator.current;
    if (_compare(min, iterator.current) > 0) min = iterator.current;
  }
  return Extent(min, max);
}