mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-06-11 15:19:19 +02:00
clusterlin: add GetConnectedComponent
This abstracts out the finding of the connected component that includes a given element from FindConnectedComponent (which just finds any connected component). Use this in the txgraph fuzz test, which was effectively reimplementing this logic. At the same time, improve its performance by replacing a vector with a set.
This commit is contained in:
@@ -250,10 +250,8 @@ public:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/** Find some connected component within the subset "todo" of this graph.
|
||||
*
|
||||
* Specifically, this finds the connected component which contains the first transaction of
|
||||
* todo (if any).
|
||||
/** Get the connected component within the subset "todo" that contains tx (which must be in
|
||||
* todo).
|
||||
*
|
||||
* Two transactions are considered connected if they are both in `todo`, and one is an ancestor
|
||||
* of the other in the entire graph (so not just within `todo`), or transitively there is a
|
||||
@@ -262,10 +260,11 @@ public:
|
||||
*
|
||||
* Complexity: O(ret.Count()).
|
||||
*/
|
||||
SetType FindConnectedComponent(const SetType& todo) const noexcept
|
||||
SetType GetConnectedComponent(const SetType& todo, DepGraphIndex tx) const noexcept
|
||||
{
|
||||
if (todo.None()) return todo;
|
||||
auto to_add = SetType::Singleton(todo.First());
|
||||
Assume(todo[tx]);
|
||||
Assume(todo.IsSubsetOf(m_used));
|
||||
auto to_add = SetType::Singleton(tx);
|
||||
SetType ret;
|
||||
do {
|
||||
SetType old = ret;
|
||||
@@ -279,6 +278,19 @@ public:
|
||||
return ret;
|
||||
}
|
||||
|
||||
/** Find some connected component within the subset "todo" of this graph.
|
||||
*
|
||||
* Specifically, this finds the connected component which contains the first transaction of
|
||||
* todo (if any).
|
||||
*
|
||||
* Complexity: O(ret.Count()).
|
||||
*/
|
||||
SetType FindConnectedComponent(const SetType& todo) const noexcept
|
||||
{
|
||||
if (todo.None()) return todo;
|
||||
return GetConnectedComponent(todo, todo.First());
|
||||
}
|
||||
|
||||
/** Determine if a subset is connected.
|
||||
*
|
||||
* Complexity: O(subset.Count()).
|
||||
|
||||
Reference in New Issue
Block a user