Iterable Function()

in lib/src/shortest_path.dart [71:106]


  Iterable<T> Function(T) edges, {
  T? target,
  bool Function(T, T)? equals,
  int Function(T)? hashCode,
}) {
  final distances = HashMap<T, _Tail<T>>(equals: equals, hashCode: hashCode);
  distances[start] = _Tail<T>();

  final nonNullEquals = equals ??= _defaultEquals;
  final isTarget =
      target == null ? _neverTarget : (T node) => nonNullEquals(node, target);
  if (isTarget(start)) {
    return distances;
  }

  final toVisit = ListQueue<T>()..add(start);

  while (toVisit.isNotEmpty) {
    final current = toVisit.removeFirst();
    final currentPath = distances[current]!;

    for (var edge in edges(current)) {
      final existingPath = distances[edge];

      if (existingPath == null) {
        distances[edge] = currentPath.append(edge);
        if (isTarget(edge)) {
          return distances;
        }
        toVisit.add(edge);
      }
    }
  }

  return distances;
}