mirror of
https://github.com/bitcoin/bitcoin.git
synced 2026-02-20 22:33:38 +01:00
Merge bitcoin/bitcoin#34179: refactor: Enable transparent lookup for setBlockIndexCandidates to remove const_cast
3bd98b4508refactor: use transparent comparator for setBlockIndexCandidates lookups (joaonevess) Pull request description: ### Rationale This PR improves code safety by removing a `const_cast` in `src/validation.cpp`. Currently, `setBlockIndexCandidates` stores mutable `CBlockIndex*`. However, validation logic (like `CVerifyDB`) often holds `const CBlockIndex*`. Previously, checking for existence in the set required casting away constness. While currently benign, this bypasses compiler safety checks and could mask accidental modifications in future refactors. ### Description 1. **Enable Heterogeneous Lookup:** Added `using is_transparent = void;` to `CBlockIndexWorkComparator` in `src/node/blockstorage.h`. This allows the `std::set` to natively accept `const CBlockIndex*` for lookup (utilizing C++14 heterogeneous lookup). 2. **Remove Cast:** Removed the now unnecessary `const_cast<CBlockIndex*>` in `src/validation.cpp`, allowing the compiler to strictly enforce const-correctness. ### Notes - **Refactoring only:** No behavioral change. - **Verification:** `validation_tests` and `blockmanager_tests` pass. ACKs for top commit: maflcko: review ACK3bd98b4508🚪 frankomosh: ACK3bd98b4508. Good use of transparent comparator to eliminate `const_cast` in this specific code path. sedited: ACK3bd98b4508Tree-SHA512: 0f76bdce2a54b759dfec99633afce1e95586e62f4057ecf1e82eed1a073eb8ecb2d659ccbf28a7a139f0aa09a30f058ac6966cafdfbf1f2ee878fa2d86b2c487
This commit is contained in:
@@ -136,6 +136,7 @@ using BlockMap = std::unordered_map<uint256, CBlockIndex, BlockHasher>;
|
||||
|
||||
struct CBlockIndexWorkComparator {
|
||||
bool operator()(const CBlockIndex* pa, const CBlockIndex* pb) const;
|
||||
using is_transparent = void;
|
||||
};
|
||||
|
||||
struct CBlockIndexHeightOnlyComparator {
|
||||
|
||||
Reference in New Issue
Block a user