mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-02-13 11:25:02 -05:00
serialization: Add ParamsStream GetStream() method
Add GetStream() method useful for accessing underlying stream. Use to improve ParamsStream test coverage.
This commit is contained in:
parent
951203bcc4
commit
8d491ae9ec
2 changed files with 31 additions and 6 deletions
|
@ -1103,6 +1103,10 @@ size_t GetSerializeSize(const T& t)
|
||||||
return (SizeComputer() << t).size();
|
return (SizeComputer() << t).size();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Check if type contains a stream by seeing if has a GetStream() method.
|
||||||
|
template<typename T>
|
||||||
|
concept ContainsStream = requires(T t) { t.GetStream(); };
|
||||||
|
|
||||||
/** Wrapper that overrides the GetParams() function of a stream. */
|
/** Wrapper that overrides the GetParams() function of a stream. */
|
||||||
template <typename SubStream, typename Params>
|
template <typename SubStream, typename Params>
|
||||||
class ParamsStream
|
class ParamsStream
|
||||||
|
@ -1126,11 +1130,11 @@ public:
|
||||||
|
|
||||||
template <typename U> ParamsStream& operator<<(const U& obj) { ::Serialize(*this, obj); return *this; }
|
template <typename U> ParamsStream& operator<<(const U& obj) { ::Serialize(*this, obj); return *this; }
|
||||||
template <typename U> ParamsStream& operator>>(U&& obj) { ::Unserialize(*this, obj); return *this; }
|
template <typename U> ParamsStream& operator>>(U&& obj) { ::Unserialize(*this, obj); return *this; }
|
||||||
void write(Span<const std::byte> src) { m_substream.write(src); }
|
void write(Span<const std::byte> src) { GetStream().write(src); }
|
||||||
void read(Span<std::byte> dst) { m_substream.read(dst); }
|
void read(Span<std::byte> dst) { GetStream().read(dst); }
|
||||||
void ignore(size_t num) { m_substream.ignore(num); }
|
void ignore(size_t num) { GetStream().ignore(num); }
|
||||||
bool eof() const { return m_substream.eof(); }
|
bool eof() const { return GetStream().eof(); }
|
||||||
size_t size() const { return m_substream.size(); }
|
size_t size() const { return GetStream().size(); }
|
||||||
|
|
||||||
//! Get reference to stream parameters.
|
//! Get reference to stream parameters.
|
||||||
template <typename P>
|
template <typename P>
|
||||||
|
@ -1142,6 +1146,24 @@ public:
|
||||||
return m_substream.template GetParams<P>();
|
return m_substream.template GetParams<P>();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//! Get reference to underlying stream.
|
||||||
|
auto& GetStream()
|
||||||
|
{
|
||||||
|
if constexpr (ContainsStream<SubStream>) {
|
||||||
|
return m_substream.GetStream();
|
||||||
|
} else {
|
||||||
|
return m_substream;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
const auto& GetStream() const
|
||||||
|
{
|
||||||
|
if constexpr (ContainsStream<SubStream>) {
|
||||||
|
return m_substream.GetStream();
|
||||||
|
} else {
|
||||||
|
return m_substream;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -412,11 +412,14 @@ BOOST_AUTO_TEST_CASE(with_params_multi)
|
||||||
//! Test creating a ParamsStream that moves from a stream argument.
|
//! Test creating a ParamsStream that moves from a stream argument.
|
||||||
BOOST_AUTO_TEST_CASE(with_params_move)
|
BOOST_AUTO_TEST_CASE(with_params_move)
|
||||||
{
|
{
|
||||||
UncopyableStream stream{};
|
UncopyableStream stream{MakeByteSpan(std::string_view{"abc"})};
|
||||||
ParamsStream pstream{std::move(stream), RAW, HEX, RAW};
|
ParamsStream pstream{std::move(stream), RAW, HEX, RAW};
|
||||||
|
BOOST_CHECK_EQUAL(pstream.GetStream().str(), "abc");
|
||||||
|
pstream.GetStream().clear();
|
||||||
|
|
||||||
Base base1{0x20};
|
Base base1{0x20};
|
||||||
pstream << base1;
|
pstream << base1;
|
||||||
|
BOOST_CHECK_EQUAL(pstream.GetStream().str(), "\x20");
|
||||||
|
|
||||||
Base base2;
|
Base base2;
|
||||||
pstream >> base2;
|
pstream >> base2;
|
||||||
|
|
Loading…
Add table
Reference in a new issue