Skip to content

Commit 23cdb14

Browse files
committed
Reverse inventory_items inventory::select() ordering.
1 parent d6c2775 commit 23cdb14

File tree

4 files changed

+15
-11
lines changed

4 files changed

+15
-11
lines changed

src/messages/peer/detail/get_data.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <bitcoin/network/messages/peer/detail/get_data.hpp>
2020

2121
#include <algorithm>
22+
#include <ranges>
2223
#include <bitcoin/network/messages/peer/enums/identifier.hpp>
2324
#include <bitcoin/network/messages/peer/enums/level.hpp>
2425
#include <bitcoin/network/messages/peer/enums/magic_numbers.hpp>
@@ -92,12 +93,13 @@ size_t get_data::size(uint32_t version) const NOEXCEPT
9293
(items.size() * item::size(version));
9394
}
9495

96+
// Populated in reverse order for efficient removals.
9597
inventory_items get_data::select(selector types) const NOEXCEPT
9698
{
9799
inventory_items out{};
98100
out.reserve(count(types));
99-
100-
for (const auto& item: items)
101+
102+
for (const auto& item: std::views::reverse(items))
101103
if (item.is_selected(types))
102104
out.push_back(item);
103105

src/messages/peer/detail/inventory.cpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
#include <bitcoin/network/messages/peer/detail/inventory.hpp>
2020

2121
#include <algorithm>
22+
#include <ranges>
2223
#include <utility>
2324
#include <bitcoin/network/messages/peer/enums/identifier.hpp>
2425
#include <bitcoin/network/messages/peer/enums/level.hpp>
@@ -122,12 +123,13 @@ size_t inventory::size(uint32_t version) const NOEXCEPT
122123
(items.size() * item::size(version));
123124
}
124125

126+
// Populated in reverse order for efficient removals.
125127
inventory_items inventory::select(selector types) const NOEXCEPT
126128
{
127129
inventory_items out{};
128130
out.reserve(count(types));
129131

130-
for (const auto& item: items)
132+
for (const auto& item: std::views::reverse(items))
131133
if (item.is_selected(types))
132134
out.push_back(item);
133135

test/messages/peer/detail/get_data.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -72,17 +72,17 @@ BOOST_AUTO_TEST_CASE(get_data__select__selectors__expected_items)
7272

7373
const auto txs = inv.select(inventory_item::selector::txids);
7474
BOOST_REQUIRE_EQUAL(txs.size(), 2u);
75-
BOOST_CHECK(txs[0].type == inventory_item::type_id::transaction);
76-
BOOST_CHECK(txs[1].type == inventory_item::type_id::witness_tx);
75+
BOOST_CHECK(txs[0].type == inventory_item::type_id::witness_tx);
76+
BOOST_CHECK(txs[1].type == inventory_item::type_id::transaction);
7777

7878
const auto wtxs = inv.select(inventory_item::selector::wtxids);
7979
BOOST_REQUIRE_EQUAL(wtxs.size(), 1u);
8080
BOOST_CHECK(wtxs[0].type == inventory_item::type_id::wtxid);
8181

8282
const auto blocks = inv.select(inventory_item::selector::blocks);
8383
BOOST_REQUIRE_EQUAL(blocks.size(), 2u);
84-
BOOST_CHECK(blocks[0].type == inventory_item::type_id::block);
85-
BOOST_CHECK(blocks[1].type == inventory_item::type_id::witness_block);
84+
BOOST_CHECK(blocks[0].type == inventory_item::type_id::witness_block);
85+
BOOST_CHECK(blocks[1].type == inventory_item::type_id::block);
8686

8787
const auto filters = inv.select(inventory_item::selector::filters);
8888
BOOST_REQUIRE_EQUAL(filters.size(), 1u);

test/messages/peer/detail/inventory.cpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -70,17 +70,17 @@ BOOST_AUTO_TEST_CASE(inventory__select__selectors__expected_items)
7070

7171
const auto txs = inv.select(inventory_item::selector::txids);
7272
BOOST_REQUIRE_EQUAL(txs.size(), 2u);
73-
BOOST_CHECK(txs[0].type == inventory_item::type_id::transaction);
74-
BOOST_CHECK(txs[1].type == inventory_item::type_id::witness_tx);
73+
BOOST_CHECK(txs[0].type == inventory_item::type_id::witness_tx);
74+
BOOST_CHECK(txs[1].type == inventory_item::type_id::transaction);
7575

7676
const auto wtxs = inv.select(inventory_item::selector::wtxids);
7777
BOOST_REQUIRE_EQUAL(wtxs.size(), 1u);
7878
BOOST_CHECK(wtxs[0].type == inventory_item::type_id::wtxid);
7979

8080
const auto blocks = inv.select(inventory_item::selector::blocks);
8181
BOOST_REQUIRE_EQUAL(blocks.size(), 2u);
82-
BOOST_CHECK(blocks[0].type == inventory_item::type_id::block);
83-
BOOST_CHECK(blocks[1].type == inventory_item::type_id::witness_block);
82+
BOOST_CHECK(blocks[0].type == inventory_item::type_id::witness_block);
83+
BOOST_CHECK(blocks[1].type == inventory_item::type_id::block);
8484

8585
const auto filters = inv.select(inventory_item::selector::filters);
8686
BOOST_REQUIRE_EQUAL(filters.size(), 1u);

0 commit comments

Comments
 (0)