diff --git a/src/txgraph.cpp b/src/txgraph.cpp index c8ff7537fe1..d8810db6dac 100644 --- a/src/txgraph.cpp +++ b/src/txgraph.cpp @@ -15,6 +15,7 @@ #include #include #include +#include #include namespace { @@ -98,6 +99,7 @@ struct TrimTxData class Cluster { friend class TxGraphImpl; + friend class BlockBuilderImpl; using GraphIndex = TxGraph::GraphIndex; using SetType = BitSet; /** The DepGraph for this cluster, holding all feerates, and ancestors/descendants. */ @@ -643,8 +645,8 @@ class BlockBuilderImpl final : public TxGraph::BlockBuilder /** Which TxGraphImpl this object is doing block building for. It will have its * m_main_chunkindex_observers incremented as long as this BlockBuilderImpl exists. */ TxGraphImpl* const m_graph; - /** Clusters which we're not including further transactions from. */ - std::set m_excluded_clusters; + /** Cluster sequence numbers which we're not including further transactions from. */ + std::unordered_set m_excluded_clusters; /** Iterator to the current chunk in the chunk index. end() if nothing further remains. */ TxGraphImpl::ChunkIndex::const_iterator m_cur_iter; /** Which cluster the current chunk belongs to, so we can exclude further transactions from it @@ -2546,7 +2548,7 @@ void BlockBuilderImpl::Next() noexcept m_cur_cluster = chunk_end_entry.m_locator[0].cluster; m_known_end_of_cluster = false; // If we previously skipped a chunk from this cluster we cannot include more from it. - if (!m_excluded_clusters.contains(m_cur_cluster)) break; + if (!m_excluded_clusters.contains(m_cur_cluster->m_sequence)) break; } } @@ -2620,7 +2622,7 @@ void BlockBuilderImpl::Skip() noexcept // chunk of the cluster. This may significantly reduce the size of m_excluded_clusters, // especially when many singleton clusters are ignored. if (m_cur_cluster != nullptr && !m_known_end_of_cluster) { - m_excluded_clusters.insert(m_cur_cluster); + m_excluded_clusters.insert(m_cur_cluster->m_sequence); } Next(); }