mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-01-19 23:03:45 +01:00
d9319b06cfrefactor: unify container presence checks - non-trivial counts (Lőrinc)039307554erefactor: unify container presence checks - trivial counts (Lőrinc)8bb9219b63refactor: unify container presence checks - find (Lőrinc) Pull request description: ### Summary Instead of counting occurrences in sets and maps, the C++20 `::contains` method expresses the intent unambiguously and can return early on first encounter. ### Context Applied clang‑tidy's [readability‑container‑contains](https://clang.llvm.org/extra/clang-tidy/checks/readability/container-contains.html) check, though many cases required manual changes since tidy couldn't fix them automatically. ### Changes The changes made here were: | From | To | |------------------------|------------------| | `m.find(k) == m.end()` | `!m.contains(k)` | | `m.find(k) != m.end()` | `m.contains(k)` | | `m.count(k)` | `m.contains(k)` | | `!m.count(k)` | `!m.contains(k)` | | `m.count(k) == 0` | `!m.contains(k)` | | `m.count(k) != 1` | `!m.contains(k)` | | `m.count(k) == 1` | `m.contains(k)` | | `m.count(k) < 1` | `!m.contains(k)` | | `m.count(k) > 0` | `m.contains(k)` | | `m.count(k) != 0` | `m.contains(k)` | > Note that `== 1`/`!= 1`/`< 1` only apply to simple [maps](https://en.cppreference.com/w/cpp/container/map/contains)/[sets](https://en.cppreference.com/w/cpp/container/set/contains) and had to be changed manually. There are many other cases that could have been changed, but we've reverted most of those to reduce conflict with other open PRs. ----- <details> <summary>clang-tidy command on Mac</summary> ```bash rm -rfd build && \ cmake -B build \ -DCMAKE_C_COMPILER="$(brew --prefix llvm)/bin/clang" \ -DCMAKE_CXX_COMPILER="$(brew --prefix llvm)/bin/clang++" \ -DCMAKE_OSX_SYSROOT="$(xcrun --show-sdk-path)" \ -DCMAKE_C_FLAGS="-target arm64-apple-macos11" \ -DCMAKE_CXX_FLAGS="-target arm64-apple-macos11" \ -DCMAKE_EXPORT_COMPILE_COMMANDS=ON -DBUILD_BENCH=ON -DBUILD_FUZZ_BINARY=ON -DBUILD_FOR_FUZZING=ON "$(brew --prefix llvm)/bin/run-clang-tidy" -quiet -p build -j$(nproc) -checks='-*,readability-container-contains' | grep -v 'clang-tidy' ``` </details> Note: this is a take 2 of https://github.com/bitcoin/bitcoin/pull/33094 with fewer contentious changes. ACKs for top commit: optout21: reACKd9319b06cfsedited: ACKd9319b06cfjanb84: re ACKd9319b06cfpablomartin4btc: re-ACKd9319b06cfryanofsky: Code review ACKd9319b06cf. I manually reviewed the full change, and it seems there are a lot of positive comments about this and no more very significant conflicts, so I will merge it shortly. Tree-SHA512: e4415221676cfb88413ccc446e5f4369df7a55b6642347277667b973f515c3c8ee5bfa9ee0022479c8de945c89fbc9ff61bd8ba086e70f30298cbc1762610fe1