13std::set<T> computeClosure(
14 std::set<T> startElts,
15 std::function<std::set<T>(
const T &)> getEdges
18 std::set<T> res, queue = std::move(startElts);
20 while (!queue.empty()) {
23 for (
auto & e : queue) {
24 if (res.insert(e).second) {
25 next.merge(getEdges(e));
29 queue = std::move(next);
36kj::Promise<Result<std::set<T>>> computeClosureAsync(
37 std::set<T> startElts,
38 std::function<kj::Promise<Result<std::set<T>>>(
const T &)> getEdges
41 std::set<T> res, queue = std::move(startElts);
43 while (!queue.empty()) {
46 for (
auto & e : queue) {
47 if (res.insert(e).second) {
48 next.merge(LIX_TRY_AWAIT(getEdges(e)));
52 queue = std::move(next);
57 co_return result::current_exception();