source/StronglyConnectedComponents.h (24 lines of code) (raw):
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <vector>
#include <mariana-trench/Dependencies.h>
#include <mariana-trench/Method.h>
namespace marianatrench {
/*
* Compute strongly connected components of a graph.
*
* The strongly connected components are in reverse topological order (from
* leaves to roots).
*/
class StronglyConnectedComponents final {
public:
explicit StronglyConnectedComponents(
const Methods& methods,
const Dependencies& dependencies);
StronglyConnectedComponents(const StronglyConnectedComponents&) = default;
StronglyConnectedComponents(StronglyConnectedComponents&&) = default;
StronglyConnectedComponents& operator=(const StronglyConnectedComponents&) =
default;
StronglyConnectedComponents& operator=(StronglyConnectedComponents&&) =
default;
~StronglyConnectedComponents() = default;
const std::vector<std::vector<const Method*>>& components() const {
return components_;
}
private:
std::vector<std::vector<const Method*>> components_;
};
} // namespace marianatrench