extent<T> function

Extent<T> extent <T>(Iterable<T> i, [ 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 new Extent(null, null);
  final Comparator<T> _compare = compare ?? Comparable.compare;
  var iterator = i.iterator;
  var hasNext = iterator.moveNext();
  if (!hasNext) return new 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 new Extent(min, max);
}