blob: ffa24b5e5f097c954c9d4f237eeaf7b7e0c56be3 [file] [log] [blame]
// Copyright (c) 2017, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.
import 'dart:collection';
import 'utils.dart';
/// A representation of a Graph since none is specified in `lib/`.
class Graph {
final Map<String, List<String>?> _graph;
Graph(this._graph);
List<String> edges(String node) => _graph[node] ?? <Never>[];
Iterable<String> get allNodes => _graph.keys;
}
class BadGraph {
final Map<X, List<X>?> _graph;
BadGraph(Map<String, List<String>?> values)
: _graph = LinkedHashMap(equals: xEquals, hashCode: xHashCode)
..addEntries(
values.entries
.map((e) => MapEntry(X(e.key), e.value?.map(X.new).toList())),
);
List<X> edges(X node) => _graph[node] ?? <Never>[];
Iterable<X> get allNodes => _graph.keys;
}
/// A representation of a Graph where keys can asynchronously be resolved to
/// real values or to edges.
class AsyncGraph {
final Map<String, List<String>?> graph;
AsyncGraph(this.graph);
Future<String?> readNode(String node) async =>
graph.containsKey(node) ? node : null;
Future<Iterable<String>> edges(String key, String? node) async =>
graph[key] ?? <Never>[];
}