Skip to content

Commit

Permalink
Avoid new.
Browse files Browse the repository at this point in the history
  • Loading branch information
evoskuil committed Aug 19, 2024
1 parent a13df3f commit e622127
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 18 deletions.
14 changes: 5 additions & 9 deletions src/protocols/protocol_address_in_31402.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<address>();

// CLang doesn't like emplacement with default constructors, so use new.
BC_PUSH_WARNING(NO_NEW_OR_DELETE)
const auto message = std::shared_ptr<address>(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<address>(items);
auto& addresses = const_cast<address_items&>(message->addresses);
pseudo_random::shuffle(addresses);
addresses.resize(select);
std::erase_if(addresses, [&](const auto& address) NOEXCEPT
{
return settings().excluded(address);
});
Expand Down
14 changes: 5 additions & 9 deletions src/protocols/protocol_seed_31402.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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<address>();

// CLang doesn't like emplacement with default constructors, so use new.
BC_PUSH_WARNING(NO_NEW_OR_DELETE)
const auto message = std::shared_ptr<address>(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<address>(new address{ items });
auto& addresses = const_cast<address_items&>(message->addresses);
pseudo_random::shuffle(addresses);
addresses.resize(select);
std::erase_if(addresses, [&](const auto& address) NOEXCEPT
{
return settings().excluded(address);
});
Expand Down

0 comments on commit e622127

Please sign in to comment.