From 59058aa5d137a6bf6240ca366591464caf15ebf3 Mon Sep 17 00:00:00 2001 From: evoskuil Date: Thu, 11 Dec 2025 21:36:03 -0500 Subject: [PATCH] Use non-const& for cancel atomic. --- .../bitcoin/database/impl/query/optional.ipp | 30 +++++++++---------- include/bitcoin/database/query.hpp | 30 +++++++++---------- test/query/optional.cpp | 24 +++++++-------- 3 files changed, 41 insertions(+), 43 deletions(-) diff --git a/include/bitcoin/database/impl/query/optional.ipp b/include/bitcoin/database/impl/query/optional.ipp index da8f887e..2ba4e162 100644 --- a/include/bitcoin/database/impl/query/optional.ipp +++ b/include/bitcoin/database/impl/query/optional.ipp @@ -37,7 +37,7 @@ namespace database { // private/static TEMPLATE template -inline code CLASS::parallel_address_transform(const std::atomic_bool& cancel, +inline code CLASS::parallel_address_transform(std::atomic_bool& cancel, outpoints& out, const output_links& links, Functor&& functor) NOEXCEPT { constexpr auto parallel = poolstl::execution::par; @@ -65,8 +65,8 @@ inline code CLASS::parallel_address_transform(const std::atomic_bool& cancel, // protected TEMPLATE -code CLASS::to_address_outputs(const std::atomic_bool& cancel, - output_links& out, const hash_digest& key) const NOEXCEPT +code CLASS::to_address_outputs(std::atomic_bool& cancel, output_links& out, + const hash_digest& key) const NOEXCEPT { // Pushing into the vector is more efficient than precomputation of size. out.clear(); @@ -87,8 +87,8 @@ code CLASS::to_address_outputs(const std::atomic_bool& cancel, // protected TEMPLATE -code CLASS::get_address_outputs_turbo(const std::atomic_bool& cancel, - outpoints& out, const hash_digest& key) const NOEXCEPT +code CLASS::get_address_outputs_turbo(std::atomic_bool& cancel, outpoints& out, + const hash_digest& key) const NOEXCEPT { out.clear(); output_links links{}; @@ -106,8 +106,8 @@ code CLASS::get_address_outputs_turbo(const std::atomic_bool& cancel, } TEMPLATE -code CLASS::get_address_outputs(const std::atomic_bool& cancel, - outpoints& out, const hash_digest& key, bool turbo) const NOEXCEPT +code CLASS::get_address_outputs(std::atomic_bool& cancel, outpoints& out, + const hash_digest& key, bool turbo) const NOEXCEPT { if (turbo && store_.turbo()) return get_address_outputs_turbo(cancel, out, key); @@ -130,7 +130,7 @@ code CLASS::get_address_outputs(const std::atomic_bool& cancel, // protected TEMPLATE -code CLASS::get_confirmed_unspent_outputs_turbo(const std::atomic_bool& cancel, +code CLASS::get_confirmed_unspent_outputs_turbo(std::atomic_bool& cancel, outpoints& out, const hash_digest& key) const NOEXCEPT { out.clear(); @@ -151,7 +151,7 @@ code CLASS::get_confirmed_unspent_outputs_turbo(const std::atomic_bool& cancel, } TEMPLATE -code CLASS::get_confirmed_unspent_outputs(const std::atomic_bool& cancel, +code CLASS::get_confirmed_unspent_outputs(std::atomic_bool& cancel, outpoints& out, const hash_digest& key, bool turbo) const NOEXCEPT { if (turbo && store_.turbo()) @@ -176,7 +176,7 @@ code CLASS::get_confirmed_unspent_outputs(const std::atomic_bool& cancel, // protected TEMPLATE -code CLASS::get_minimum_unspent_outputs_turbo(const std::atomic_bool& cancel, +code CLASS::get_minimum_unspent_outputs_turbo(std::atomic_bool& cancel, outpoints& out, const hash_digest& key, uint64_t minimum) const NOEXCEPT { out.clear(); @@ -207,9 +207,9 @@ code CLASS::get_minimum_unspent_outputs_turbo(const std::atomic_bool& cancel, } TEMPLATE -code CLASS::get_minimum_unspent_outputs(const std::atomic_bool& cancel, - outpoints& out, const hash_digest& key, - uint64_t minimum, bool turbo) const NOEXCEPT +code CLASS::get_minimum_unspent_outputs(std::atomic_bool& cancel, + outpoints& out, const hash_digest& key, uint64_t minimum, + bool turbo) const NOEXCEPT { if (turbo && store_.turbo()) return get_minimum_unspent_outputs_turbo(cancel, out, key, minimum); @@ -239,8 +239,8 @@ code CLASS::get_minimum_unspent_outputs(const std::atomic_bool& cancel, } TEMPLATE -code CLASS::get_confirmed_balance(const std::atomic_bool& cancel, - uint64_t& balance, const hash_digest& key, bool turbo) const NOEXCEPT +code CLASS::get_confirmed_balance(std::atomic_bool& cancel, uint64_t& balance, + const hash_digest& key, bool turbo) const NOEXCEPT { outpoints outs{}; if (code ec = get_confirmed_unspent_outputs(cancel, outs, key, turbo)) diff --git a/include/bitcoin/database/query.hpp b/include/bitcoin/database/query.hpp index 90dcd471..8ee9b3a5 100644 --- a/include/bitcoin/database/query.hpp +++ b/include/bitcoin/database/query.hpp @@ -314,8 +314,8 @@ class query tx_link top_tx(size_t bucket) const NOEXCEPT; /// optional enumeration - code to_address_outputs(const std::atomic_bool& cancel, - output_links& out, const hash_digest& key) const NOEXCEPT; + code to_address_outputs(std::atomic_bool& cancel, output_links& out, + const hash_digest& key) const NOEXCEPT; /// Archive reads. /// ----------------------------------------------------------------------- @@ -553,14 +553,13 @@ class query /// Optional Tables. /// ----------------------------------------------------------------------- - code get_address_outputs(const std::atomic_bool& cancel, - outpoints& out, const hash_digest& key, bool turbo=false) const NOEXCEPT; - code get_confirmed_unspent_outputs(const std::atomic_bool& cancel, - outpoints& out, const hash_digest& key, bool turbo=false) const NOEXCEPT; - code get_minimum_unspent_outputs(const std::atomic_bool& cancel, - outpoints& out, const hash_digest& key, uint64_t value, - bool turbo=false) const NOEXCEPT; - code get_confirmed_balance(const std::atomic_bool& cancel, + code get_address_outputs(std::atomic_bool& cancel, outpoints& out, + const hash_digest& key, bool turbo=false) const NOEXCEPT; + code get_confirmed_unspent_outputs(std::atomic_bool& cancel, outpoints& out, + const hash_digest& key, bool turbo=false) const NOEXCEPT; + code get_minimum_unspent_outputs(std::atomic_bool& cancel, outpoints& out, + const hash_digest& key, uint64_t value, bool turbo=false) const NOEXCEPT; + code get_confirmed_balance(std::atomic_bool& cancel, uint64_t& balance, const hash_digest& key, bool turbo=false) const NOEXCEPT; bool is_filtered_body(const header_link& link) const NOEXCEPT; @@ -695,11 +694,11 @@ class query /// address /// ----------------------------------------------------------------------- - code get_address_outputs_turbo(const std::atomic_bool& cancel, + code get_address_outputs_turbo(std::atomic_bool& cancel, outpoints& out, const hash_digest& key) const NOEXCEPT; - code get_confirmed_unspent_outputs_turbo(const std::atomic_bool& cancel, + code get_confirmed_unspent_outputs_turbo(std::atomic_bool& cancel, outpoints& out, const hash_digest& key) const NOEXCEPT; - code get_minimum_unspent_outputs_turbo(const std::atomic_bool& cancel, + code get_minimum_unspent_outputs_turbo(std::atomic_bool& cancel, outpoints& out, const hash_digest& key, uint64_t minimum) const NOEXCEPT; /// tx_fk must be allocated. @@ -712,9 +711,8 @@ class query static inline bool push_bool(std_vector& stack, const Bool& element) NOEXCEPT; template - static inline code parallel_address_transform( - const std::atomic_bool& cancel, outpoints& out, - const output_links& links, Functor&& functor) NOEXCEPT; + static inline code parallel_address_transform(std::atomic_bool& cancel, + outpoints& out, const output_links& links, Functor&& functor) NOEXCEPT; // Not thread safe. size_t get_fork_() const NOEXCEPT; diff --git a/test/query/optional.cpp b/test/query/optional.cpp index 2a463ba0..abdb68b5 100644 --- a/test/query/optional.cpp +++ b/test/query/optional.cpp @@ -39,7 +39,7 @@ BOOST_AUTO_TEST_CASE(query_optional__to_address_outputs__genesis__expected) BOOST_REQUIRE(query.initialize(test::genesis)); output_links out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.to_address_outputs(cancel, out, genesis_address)); BOOST_REQUIRE_EQUAL(out.size(), 1u); BOOST_REQUIRE_EQUAL(out.front(), query.to_output(0, 0)); @@ -57,7 +57,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__turbo_genesis__expecte BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_address_outputs(cancel, out, genesis_address, true)); BOOST_REQUIRE_EQUAL(out.size(), 1u); ////BOOST_REQUIRE_EQUAL(out.front(), query.to_output(0, 0)); @@ -73,7 +73,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__genesis__expected) BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_address_outputs(cancel, out, genesis_address)); BOOST_REQUIRE_EQUAL(out.size(), 1u); ////BOOST_REQUIRE_EQUAL(out.front(), query.to_output(0, 0)); @@ -89,7 +89,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_address_outputs__cancel__canceled_false BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{ true }; + std::atomic_bool cancel{ true }; BOOST_REQUIRE_EQUAL(query.get_address_outputs(cancel, out, genesis_address), error::canceled); BOOST_REQUIRE(out.empty()); } @@ -106,7 +106,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_unspent_outputs__turbo_genesi BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_confirmed_unspent_outputs(cancel, out, genesis_address, true)); BOOST_REQUIRE_EQUAL(out.size(), 1u); ////BOOST_REQUIRE_EQUAL(out.front(), 0); @@ -122,7 +122,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_unspent_outputs__genesis__exp BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_confirmed_unspent_outputs(cancel, out, genesis_address)); BOOST_REQUIRE_EQUAL(out.size(), 1u); ////BOOST_REQUIRE_EQUAL(out.front(), 0); @@ -140,7 +140,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__turbo_above__e BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address, 5000000001, true)); BOOST_REQUIRE(out.empty()); } @@ -155,7 +155,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__above__exclude BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address, 5000000001)); BOOST_REQUIRE(out.empty()); } @@ -170,7 +170,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__at__included) BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address, 5000000000)); BOOST_REQUIRE_EQUAL(out.size(), 1u); ////BOOST_REQUIRE_EQUAL(out.front(), 0); @@ -186,7 +186,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_minimum_unspent_outputs__below__include BOOST_REQUIRE(query.initialize(test::genesis)); outpoints out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_minimum_unspent_outputs(cancel, out, genesis_address, 0)); BOOST_REQUIRE_EQUAL(out.size(), 1u); ////BOOST_REQUIRE_EQUAL(out.front(), 0); @@ -207,7 +207,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_balance__turbo_genesis__expec BOOST_REQUIRE(query.initialize(test::genesis)); uint64_t out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_confirmed_balance(cancel, out, genesis_address, true)); BOOST_REQUIRE_EQUAL(out, 5000000000u); } @@ -222,7 +222,7 @@ BOOST_AUTO_TEST_CASE(query_optional__get_confirmed_balance__genesis__expected) BOOST_REQUIRE(query.initialize(test::genesis)); uint64_t out{}; - const std::atomic_bool cancel{}; + std::atomic_bool cancel{}; BOOST_REQUIRE(!query.get_confirmed_balance(cancel, out, genesis_address)); BOOST_REQUIRE_EQUAL(out, 5000000000u); }