Merge bitcoin/bitcoin#31519: refactor: Use std::span over Span
ffff4a293abench: Update span-serialize comment (MarcoFalke)fa4d6ec97brefactor: Avoid false-positive gcc warning (MarcoFalke)fa942332b4scripted-diff: Bump copyright headers after std::span changes (MarcoFalke)fa0c6b7179refactor: Remove unused Span alias (MarcoFalke)fade0b5e5escripted-diff: Use std::span over Span (MarcoFalke)fadccc26c0refactor: Make Span an alias of std::span (MarcoFalke)fa27e36717test: Fix broken span_tests (MarcoFalke)fadf02ef8brefactor: Return std::span from MakeUCharSpan (MarcoFalke)fa720b94berefactor: Return std::span from MakeByteSpan (MarcoFalke) Pull request description: `Span` has some issues: * It does not support fixed-size spans, which are available through `std::span`. * It is confusing to have it available and in use at the same time with `std::span`. * It does not obey the standard library iterator build hardening flags. See https://github.com/bitcoin/bitcoin/issues/31272 for a discussion. For example, this allows to catch issues like the one fixed in commitfabeca3458. Both types are type-safe and can even implicitly convert into each other in most contexts. However, exclusively using `std::span` seems less confusing, so do it here with a scripted-diff. ACKs for top commit: l0rinc: reACKffff4a293atheuni: ACKffff4a293a. Tree-SHA512: 9cc2f1f43551e2c07cc09f38b1f27d11e57e9e9bc0c6138c8fddd0cef54b91acd8b14711205ff949be874294a121910d0aceffe0e8914c4cff07f1e0e87ad5b8
This commit is contained in:
122 files changed
+695
-890
No files matched your search
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2018-2022 The Bitcoin Core developers
|
||||
// Copyright (c) 2018-present The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
|
||||
inline std::ostream& operator<<(std::ostream& os, const std::pair<const SerializeData, SerializeData>& kv)
|
||||
{
|
||||
Span key{kv.first}, value{kv.second};
|
||||
std::span key{kv.first}, value{kv.second};
|
||||
os << "(\"" << std::string_view{reinterpret_cast<const char*>(key.data()), key.size()} << "\", \""
|
||||
<< std::string_view{reinterpret_cast<const char*>(value.data()), value.size()} << "\")";
|
||||
return os;
|
||||
@@ -43,7 +43,7 @@ static SerializeData StringData(std::string_view str)
|
||||
return SerializeData{bytes.begin(), bytes.end()};
|
||||
}
|
||||
|
||||
static void CheckPrefix(DatabaseBatch& batch, Span<const std::byte> prefix, MockableData expected)
|
||||
static void CheckPrefix(DatabaseBatch& batch, std::span<const std::byte> prefix, MockableData expected)
|
||||
{
|
||||
std::unique_ptr<DatabaseCursor> cursor = batch.GetNewPrefixCursor(prefix);
|
||||
MockableData actual;
|
||||
@@ -212,7 +212,7 @@ BOOST_AUTO_TEST_CASE(db_cursor_prefix_byte_test)
|
||||
} else {
|
||||
// Write elements to it if not berkeleyro
|
||||
for (const auto& [k, v] : {e, p, ps, f, fs, ff, ffs}) {
|
||||
batch->Write(Span{k}, Span{v});
|
||||
batch->Write(std::span{k}, std::span{v});
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -44,7 +44,7 @@ FUZZ_TARGET(wallet_bdb_parser, .init = initialize_wallet_bdb_parser)
|
||||
|
||||
{
|
||||
AutoFile outfile{fsbridge::fopen(wallet_path, "wb")};
|
||||
outfile << Span{buffer};
|
||||
outfile << std::span{buffer};
|
||||
}
|
||||
|
||||
const DatabaseOptions options{};
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2021-2022 The Bitcoin Core developers
|
||||
// Copyright (c) 2021-present The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -94,7 +94,7 @@ CTxDestination getNewDestination(CWallet& w, OutputType output_type)
|
||||
return *Assert(w.GetNewDestination(output_type, ""));
|
||||
}
|
||||
|
||||
MockableCursor::MockableCursor(const MockableData& records, bool pass, Span<const std::byte> prefix)
|
||||
MockableCursor::MockableCursor(const MockableData& records, bool pass, std::span<const std::byte> prefix)
|
||||
{
|
||||
m_pass = pass;
|
||||
std::tie(m_cursor, m_cursor_end) = records.equal_range(BytePrefix{prefix});
|
||||
@@ -166,7 +166,7 @@ bool MockableBatch::HasKey(DataStream&& key)
|
||||
return m_records.count(key_data) > 0;
|
||||
}
|
||||
|
||||
bool MockableBatch::ErasePrefix(Span<const std::byte> prefix)
|
||||
bool MockableBatch::ErasePrefix(std::span<const std::byte> prefix)
|
||||
{
|
||||
if (!m_pass) {
|
||||
return false;
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
// Copyright (c) 2021-2022 The Bitcoin Core developers
|
||||
// Copyright (c) 2021-present The Bitcoin Core developers
|
||||
// Distributed under the MIT software license, see the accompanying
|
||||
// file COPYING or http://www.opensource.org/licenses/mit-license.php.
|
||||
|
||||
@@ -59,7 +59,7 @@ public:
|
||||
bool m_pass;
|
||||
|
||||
explicit MockableCursor(const MockableData& records, bool pass) : m_cursor(records.begin()), m_cursor_end(records.end()), m_pass(pass) {}
|
||||
MockableCursor(const MockableData& records, bool pass, Span<const std::byte> prefix);
|
||||
MockableCursor(const MockableData& records, bool pass, std::span<const std::byte> prefix);
|
||||
~MockableCursor() = default;
|
||||
|
||||
Status Next(DataStream& key, DataStream& value) override;
|
||||
@@ -75,7 +75,7 @@ private:
|
||||
bool WriteKey(DataStream&& key, DataStream&& value, bool overwrite=true) override;
|
||||
bool EraseKey(DataStream&& key) override;
|
||||
bool HasKey(DataStream&& key) override;
|
||||
bool ErasePrefix(Span<const std::byte> prefix) override;
|
||||
bool ErasePrefix(std::span<const std::byte> prefix) override;
|
||||
|
||||
public:
|
||||
explicit MockableBatch(MockableData& records, bool pass) : m_records(records), m_pass(pass) {}
|
||||
@@ -88,7 +88,7 @@ public:
|
||||
{
|
||||
return std::make_unique<MockableCursor>(m_records, m_pass);
|
||||
}
|
||||
std::unique_ptr<DatabaseCursor> GetNewPrefixCursor(Span<const std::byte> prefix) override {
|
||||
std::unique_ptr<DatabaseCursor> GetNewPrefixCursor(std::span<const std::byte> prefix) override {
|
||||
return std::make_unique<MockableCursor>(m_records, m_pass, prefix);
|
||||
}
|
||||
bool TxnBegin() override { return m_pass; }
|
||||
|
||||
Reference in new issue
Block a user