From e6221279bd3eae09c47bfee62bf9a42d3151fe28 Mon Sep 17 00:00:00 2001 From: evoskuil Date: Sun, 18 Aug 2024 21:05:38 -0400 Subject: [PATCH] Avoid new. --- src/protocols/protocol_address_in_31402.cpp | 14 +++++--------- src/protocols/protocol_seed_31402.cpp | 14 +++++--------- 2 files changed, 10 insertions(+), 18 deletions(-) diff --git a/src/protocols/protocol_address_in_31402.cpp b/src/protocols/protocol_address_in_31402.cpp index 4e8a729e9..610a49d72 100644 --- a/src/protocols/protocol_address_in_31402.cpp +++ b/src/protocols/protocol_address_in_31402.cpp @@ -87,19 +87,15 @@ address::cptr protocol_address_in_31402::filter( // Returns zero if minimum > maximum. const size_t select = pseudo_random::next(minimum, maximum); - if (is_zero(select)) return to_shared
(); - // CLang doesn't like emplacement with default constructors, so use new. - BC_PUSH_WARNING(NO_NEW_OR_DELETE) - const auto message = std::shared_ptr
(new address{ items }); - BC_POP_WARNING() - // Shuffle, reduce, and filter to the target amount. - pseudo_random::shuffle(message->addresses); - message->addresses.resize(select); - std::erase_if(message->addresses, [&](const auto& address) NOEXCEPT + const auto message = to_shared
(items); + auto& addresses = const_cast(message->addresses); + pseudo_random::shuffle(addresses); + addresses.resize(select); + std::erase_if(addresses, [&](const auto& address) NOEXCEPT { return settings().excluded(address); }); diff --git a/src/protocols/protocol_seed_31402.cpp b/src/protocols/protocol_seed_31402.cpp index 301759957..5c5598056 100644 --- a/src/protocols/protocol_seed_31402.cpp +++ b/src/protocols/protocol_seed_31402.cpp @@ -128,19 +128,15 @@ address::cptr protocol_seed_31402::filter( // Returns zero if minimum > maximum. const size_t select = pseudo_random::next(minimum, maximum); - if (is_zero(select)) return to_shared
(); - // CLang doesn't like emplacement with default constructors, so use new. - BC_PUSH_WARNING(NO_NEW_OR_DELETE) - const auto message = std::shared_ptr
(new address{ items }); - BC_POP_WARNING() - // Shuffle, reduce, and filter to the target amount. - pseudo_random::shuffle(message->addresses); - message->addresses.resize(select); - std::erase_if(message->addresses, [&](const auto& address) NOEXCEPT + const auto message = to_shared
(new address{ items }); + auto& addresses = const_cast(message->addresses); + pseudo_random::shuffle(addresses); + addresses.resize(select); + std::erase_if(addresses, [&](const auto& address) NOEXCEPT { return settings().excluded(address); });