refactor: unify container presence checks - non-trivial counts
What changed, and why it matters
This commit is a code cleanup that replaces old-style 'count the number of matching entries' checks with newer, clearer 'does this container contain the key' checks. It does not change program behavior, fix a bug, or address a security issue. It is purely a readability and maintainability improvement.
No security action required. Treat as a normal refactoring commit during code review.
Security signals we found
No strong security signals were identified.
Evidence from the diff
The commit refactors container presence checks across five files. It replaces expressions such as m.count(k) == 1, m.count(k) == 0, m.count(k) != 1, and m.count(k) < 1 with m.contains(k) or !m.contains(k). For the containers involved (std::unordered_map, std::set, QMap, and a Boost multi_index ByPeer index), the semantics are equivalent because keys are unique or the check is only for absence. The mapTxSpends case is an unordered_multimap, but the original < 1 check is logically identical to !contains. No functional or security change is introduced.
Changed components
src/addrman.cppsrc/init.cppsrc/qt/walletframe.cppsrc/txrequest.cppsrc/wallet/wallet.cppInspect captured patch +10 / −10
diff --git a/src/addrman.cpp b/src/addrman.cpp
index f1529375..b879a73b 100644
--- a/src/addrman.cpp
+++ b/src/addrman.cpp
@@ -516,7 +516,7 @@ void AddrManImpl::MakeTried(AddrInfo& info, nid_type nId)
if (vvTried[nKBucket][nKBucketPos] != -1) {
// find an item to evict
nid_type nIdEvict = vvTried[nKBucket][nKBucketPos];
- assert(mapInfo.count(nIdEvict) == 1);
+ assert(mapInfo.contains(nIdEvict));
AddrInfo& infoOld = mapInfo[nIdEvict];
// Remove the to-be-evicted item from the tried set.
@@ -919,7 +919,7 @@ void AddrManImpl::ResolveCollisions_()
bool erase_collision = false;
// If id_new not found in mapInfo remove it from m_tried_collisions
- if (mapInfo.count(id_new) != 1) {
+ if (!mapInfo.contains(id_new)) {
erase_collision = true;
} else {
AddrInfo& info_new = mapInfo[id_new];
@@ -985,7 +985,7 @@ std::pair<CAddress, NodeSeconds> AddrManImpl::SelectTriedCollision_()
nid_type id_new = *it;
// If id_new not found in mapInfo remove it from m_tried_collisions
- if (mapInfo.count(id_new) != 1) {
+ if (!mapInfo.contains(id_new)) {
m_tried_collisions.erase(it);
return {};
}
diff --git a/src/init.cpp b/src/init.cpp
index bfb9483a..02b0826d 100644
--- a/src/init.cpp
+++ b/src/init.cpp
@@ -968,7 +968,7 @@ bool AppInitParameterInteraction(const ArgsManager& args)
// Signal NODE_COMPACT_FILTERS if peerblockfilters and basic filters index are both enabled.
if (args.GetBoolArg("-peerblockfilters", DEFAULT_PEERBLOCKFILTERS)) {
- if (g_enabled_filter_types.count(BlockFilterType::BASIC) != 1) {
+ if (!g_enabled_filter_types.contains(BlockFilterType::BASIC)) {
return InitError(_("Cannot set -peerblockfilters without -blockfilterindex."));
}
diff --git a/src/qt/walletframe.cpp b/src/qt/walletframe.cpp
index 7a8a0539..269c9b4e 100644
--- a/src/qt/walletframe.cpp
+++ b/src/qt/walletframe.cpp
@@ -70,7 +70,7 @@ bool WalletFrame::addView(WalletView* walletView)
{
if (!clientModel) return false;
- if (mapWalletViews.count(walletView->getWalletModel()) > 0) return false;
+ if (mapWalletViews.contains(walletView->getWalletModel())) return false;
walletView->setClientModel(clientModel);
walletView->showOutOfSyncWarning(bOutOfSync);
@@ -90,7 +90,7 @@ bool WalletFrame::addView(WalletView* walletView)
void WalletFrame::setCurrentWallet(WalletModel* wallet_model)
{
- if (mapWalletViews.count(wallet_model) == 0) return;
+ if (!mapWalletViews.contains(wallet_model)) return;
// Stop the effect of hidden widgets on the size hint of the shown one in QStackedWidget.
WalletView* view_about_to_hide = currentWalletView();
@@ -116,7 +116,7 @@ void WalletFrame::setCurrentWallet(WalletModel* wallet_model)
void WalletFrame::removeWallet(WalletModel* wallet_model)
{
- if (mapWalletViews.count(wallet_model) == 0) return;
+ if (!mapWalletViews.contains(wallet_model)) return;
WalletView *walletView = mapWalletViews.take(wallet_model);
walletStack->removeWidget(walletView);
diff --git a/src/txrequest.cpp b/src/txrequest.cpp
index 4d7240be..bb013b0f 100644
--- a/src/txrequest.cpp
+++ b/src/txrequest.cpp
@@ -580,7 +580,7 @@ public:
// Bail out if we already have a CANDIDATE_BEST announcement for this (txhash, peer) combination. The case
// where there is a non-CANDIDATE_BEST announcement already will be caught by the uniqueness property of the
// ByPeer index when we try to emplace the new object below.
- if (m_index.get<ByPeer>().count(ByPeerView{peer, true, gtxid.ToUint256()})) return;
+ if (m_index.get<ByPeer>().contains(ByPeerView{peer, true, gtxid.ToUint256()})) return;
// Try creating the announcement with CANDIDATE_DELAYED state (which will fail due to the uniqueness
// of the ByPeer index if a non-CANDIDATE_BEST announcement already exists with the same txhash and peer).
diff --git a/src/wallet/wallet.cpp b/src/wallet/wallet.cpp
index 48601a59..5e285b23 100644
--- a/src/wallet/wallet.cpp
+++ b/src/wallet/wallet.cpp
@@ -265,7 +265,7 @@ void WaitForDeleteWallet(std::shared_ptr<CWallet>&& wallet)
wallet.reset();
{
WAIT_LOCK(g_wallet_release_mutex, lock);
- while (g_unloading_wallet_set.count(name) == 1) {
+ while (g_unloading_wallet_set.contains(name)) {
g_wallet_release_cv.wait(lock);
}
}
@@ -1525,7 +1525,7 @@ void CWallet::blockDisconnected(const interfaces::BlockInfo& block)
for (const CTxIn& tx_in : ptx->vin) {
// No other wallet transactions conflicted with this transaction
- if (mapTxSpends.count(tx_in.prevout) < 1) continue;
+ if (!mapTxSpends.contains(tx_in.prevout)) continue;
std::pair<TxSpends::const_iterator, TxSpends::const_iterator> range = mapTxSpends.equal_range(tx_in.prevout);
Why this scored 15/100
Community notes
Notes can correct, qualify, or add evidence to the AI analysis. Every note shown here has been validated by a human moderator.
The AI analysis stands alone for now. Submit a note if you can add evidence or important context.