3#include <xrpl/beast/utility/instrumentation.h>
5#include <boost/asio/buffer.hpp>
7#include <google/protobuf/io/zero_copy_stream.h>
16template <
class Buffers>
20 using iterator =
typename Buffers::const_iterator;
32 Next(
void const** data,
int* size)
override;
35 BackUp(
int count)
override;
38 Skip(
int count)
override;
40 google::protobuf::int64
49template <
class Buffers>
51 : last_(buffers.end()), first_(buffers.begin()), pos_((first_ != last_) ? *first_ :
const_buffer(nullptr, 0))
55template <
class Buffers>
60 *size = boost::asio::buffer_size(pos_);
64 pos_ = (++first_ != last_) ? *first_ :
const_buffer(
nullptr, 0);
68template <
class Buffers>
73 pos_ = *first_ + (boost::asio::buffer_size(*first_) - count);
77template <
class Buffers>
85 auto const size = boost::asio::buffer_size(pos_);
93 if (++first_ == last_)
107template <
class Streambuf>
112 using iterator =
typename buffers_type::const_iterator;
128 Next(
void** data,
int* size)
override;
131 BackUp(
int count)
override;
133 google::protobuf::int64
142template <
class Streambuf>
144 : streambuf_(streambuf), blockSize_(blockSize), buffers_(streambuf_.prepare(blockSize_)), pos_(buffers_.begin())
148template <
class Streambuf>
152 streambuf_.commit(commit_);
155template <
class Streambuf>
161 streambuf_.commit(commit_);
165 if (pos_ == buffers_.end())
167 buffers_ = streambuf_.prepare(blockSize_);
168 pos_ = buffers_.begin();
171 *data = *pos_.data();
172 *size = boost::asio::buffer_size(*pos_);
178template <
class Streambuf>
182 XRPL_ASSERT(count <= commit_,
"xrpl::ZeroCopyOutputStream::BackUp : valid input");
183 auto const n = commit_ - count;
184 streambuf_.commit(n);
Implements ZeroCopyOutputStream around a Streambuf.
typename Streambuf::mutable_buffers_type buffers_type
void BackUp(int count) override
google::protobuf::int64 count_
boost::asio::mutable_buffer mutable_buffer
ZeroCopyOutputStream(Streambuf &streambuf, std::size_t blockSize)
google::protobuf::int64 ByteCount() const override
typename buffers_type::const_iterator iterator
bool Next(void **data, int *size) override
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.