| 1610 | } |
| 1611 | |
| 1612 | std::unique_ptr<Cluster> TxGraphImpl::ExtractCluster(int level, QualityLevel quality, ClusterSetIndex setindex) noexcept |
| 1613 | { |
| 1614 | Assume(quality != QualityLevel::NONE); |
| 1615 | |
| 1616 | auto& clusterset = GetClusterSet(level); |
| 1617 | auto& quality_clusters = clusterset.m_clusters[int(quality)]; |
| 1618 | Assume(setindex < quality_clusters.size()); |
| 1619 | |
| 1620 | // Extract the Cluster-owning unique_ptr. |
| 1621 | std::unique_ptr<Cluster> ret = std::move(quality_clusters[setindex]); |
| 1622 | ret->m_quality = QualityLevel::NONE; |
| 1623 | ret->m_setindex = ClusterSetIndex(-1); |
| 1624 | |
| 1625 | // Clean up space in quality_cluster. |
| 1626 | auto max_setindex = quality_clusters.size() - 1; |
| 1627 | if (setindex != max_setindex) { |
| 1628 | // If the cluster was not the last element of quality_clusters, move that to take its place. |
| 1629 | quality_clusters.back()->m_setindex = setindex; |
| 1630 | quality_clusters[setindex] = std::move(quality_clusters.back()); |
| 1631 | } |
| 1632 | // The last element of quality_clusters is now unused; drop it. |
| 1633 | quality_clusters.pop_back(); |
| 1634 | |
| 1635 | return ret; |
| 1636 | } |
| 1637 | |
| 1638 | ClusterSetIndex TxGraphImpl::InsertCluster(int level, std::unique_ptr<Cluster>&& cluster, QualityLevel quality) noexcept |
| 1639 | { |
no test coverage detected