MCPcopy Create free account
hub / github.com/bitcoin/bitcoin / SpanWriter

Class SpanWriter

src/streams.h:129–157  ·  view source on GitHub ↗

Minimal stream for writing to an existing span of bytes. */

Source from the content-addressed store, hash-verified

127/** Minimal stream for writing to an existing span of bytes.
128 */
129class SpanWriter
130{
131private:
132 std::span<std::byte> m_dest;
133
134public:
135 explicit SpanWriter(std::span<std::byte> dest) : m_dest{dest} {}
136 template <typename... Args>
137 SpanWriter(std::span<std::byte> dest, Args&&... args) : SpanWriter{dest}
138 {
139 ::SerializeMany(*this, std::forward<Args>(args)...);
140 }
141
142 void write(std::span<const std::byte> src)
143 {
144 if (src.size() > m_dest.size()) {
145 throw std::ios_base::failure("SpanWriter::write(): exceeded buffer size");
146 }
147 memcpy(m_dest.data(), src.data(), src.size());
148 m_dest = m_dest.subspan(src.size());
149 }
150
151 template<typename T>
152 SpanWriter& operator<<(const T& obj)
153 {
154 ::Serialize(*this, obj);
155 return *this;
156 }
157};
158
159/** Double ended buffer combining vector and stream-like interfaces.
160 *

Callers 1

BOOST_AUTO_TEST_CASEFunction · 0.85

Calls 1

SerializeFunction · 0.70

Tested by 1

BOOST_AUTO_TEST_CASEFunction · 0.68