diff options
author | Kyle Edwards <kyle.edwards@kitware.com> | 2020-07-28 19:30:56 (GMT) |
---|---|---|
committer | Kyle Edwards <kyle.edwards@kitware.com> | 2020-07-28 19:30:56 (GMT) |
commit | bd0d03386b0f02aa34da5438d8f78575cf2642e7 (patch) | |
tree | 31cf890670f8121a5668a2b65516ba3ec220f660 /Source | |
parent | 7788494257e0a1a22468b5542f9d8c5cb8c3dfed (diff) | |
download | CMake-bd0d03386b0f02aa34da5438d8f78575cf2642e7.zip CMake-bd0d03386b0f02aa34da5438d8f78575cf2642e7.tar.gz CMake-bd0d03386b0f02aa34da5438d8f78575cf2642e7.tar.bz2 |
cmComputeComponentGraph: Move work out of constructor into Compute() method
The computation of Tarjan's algorithm is an expensive operation which
should not be done in the constructor. Move this work into a dedicated
Compute() method, and call this method explicitly.
Diffstat (limited to 'Source')
-rw-r--r-- | Source/cmComputeComponentGraph.cxx | 8 | ||||
-rw-r--r-- | Source/cmComputeComponentGraph.h | 3 | ||||
-rw-r--r-- | Source/cmComputeLinkDepends.cxx | 1 | ||||
-rw-r--r-- | Source/cmComputeTargetDepends.cxx | 1 |
4 files changed, 11 insertions, 2 deletions
diff --git a/Source/cmComputeComponentGraph.cxx b/Source/cmComputeComponentGraph.cxx index 81cd878..6591fb1 100644 --- a/Source/cmComputeComponentGraph.cxx +++ b/Source/cmComputeComponentGraph.cxx @@ -8,6 +8,12 @@ cmComputeComponentGraph::cmComputeComponentGraph(Graph const& input) : InputGraph(input) { +} + +cmComputeComponentGraph::~cmComputeComponentGraph() = default; + +void cmComputeComponentGraph::Compute() +{ // Identify components. this->Tarjan(); @@ -17,8 +23,6 @@ cmComputeComponentGraph::cmComputeComponentGraph(Graph const& input) this->TransferEdges(); } -cmComputeComponentGraph::~cmComputeComponentGraph() = default; - void cmComputeComponentGraph::Tarjan() { int n = static_cast<int>(this->InputGraph.size()); diff --git a/Source/cmComputeComponentGraph.h b/Source/cmComputeComponentGraph.h index 202888c..b873131 100644 --- a/Source/cmComputeComponentGraph.h +++ b/Source/cmComputeComponentGraph.h @@ -31,6 +31,9 @@ public: cmComputeComponentGraph(Graph const& input); ~cmComputeComponentGraph(); + /** Run the computation. */ + void Compute(); + /** Get the adjacency list of the component graph. */ Graph const& GetComponentGraph() const { return this->ComponentGraph; } EdgeList const& GetComponentGraphEdges(int c) const diff --git a/Source/cmComputeLinkDepends.cxx b/Source/cmComputeLinkDepends.cxx index 607b948..8ca2168 100644 --- a/Source/cmComputeLinkDepends.cxx +++ b/Source/cmComputeLinkDepends.cxx @@ -626,6 +626,7 @@ void cmComputeLinkDepends::OrderLinkEntires() // constraints disallow it. this->CCG = cm::make_unique<cmComputeComponentGraph>(this->EntryConstraintGraph); + this->CCG->Compute(); // The component graph is guaranteed to be acyclic. Start a DFS // from every entry to compute a topological order for the diff --git a/Source/cmComputeTargetDepends.cxx b/Source/cmComputeTargetDepends.cxx index 6b4d110..42c8a04 100644 --- a/Source/cmComputeTargetDepends.cxx +++ b/Source/cmComputeTargetDepends.cxx @@ -118,6 +118,7 @@ bool cmComputeTargetDepends::Compute() // Identify components. cmComputeComponentGraph ccg(this->InitialGraph); + ccg.Compute(); if (this->DebugMode) { this->DisplayComponents(ccg); } |