1#ifndef XRPL_OVERLAY_ZEROCOPYSTREAM_H_INCLUDED 
    2#define XRPL_OVERLAY_ZEROCOPYSTREAM_H_INCLUDED 
    4#include <xrpl/beast/utility/instrumentation.h> 
    6#include <boost/asio/buffer.hpp> 
    8#include <google/protobuf/io/zero_copy_stream.h> 
   17template <
class Buffers>
 
   21    using iterator = 
typename Buffers::const_iterator;
 
   33    Next(
void const** data, 
int* size) 
override;
 
   36    BackUp(
int count) 
override;
 
   39    Skip(
int count) 
override;
 
   41    google::protobuf::int64
 
 
   50template <
class Buffers>
 
   52    : last_(buffers.end())
 
   53    , first_(buffers.begin())
 
   54    , pos_((first_ != last_) ? *first_ : 
const_buffer(nullptr, 0))
 
 
   58template <
class Buffers>
 
   63    *size = boost::asio::buffer_size(pos_);
 
   67    pos_ = (++first_ != last_) ? *first_ : 
const_buffer(
nullptr, 0);
 
 
   71template <
class Buffers>
 
   76    pos_ = *first_ + (boost::asio::buffer_size(*first_) - count);
 
 
   80template <
class Buffers>
 
   88        auto const size = boost::asio::buffer_size(pos_);
 
   96        if (++first_ == last_)
 
 
  110template <
class Streambuf>
 
  115    using iterator = 
typename buffers_type::const_iterator;
 
  131    Next(
void** data, 
int* size) 
override;
 
  134    BackUp(
int count) 
override;
 
  136    google::protobuf::int64
 
 
  145template <
class Streambuf>
 
  147    Streambuf& streambuf,
 
  149    : streambuf_(streambuf)
 
  150    , blockSize_(blockSize)
 
  151    , buffers_(streambuf_.prepare(blockSize_))
 
  152    , pos_(buffers_.begin())
 
 
  156template <
class Streambuf>
 
  160        streambuf_.commit(commit_);
 
 
  163template <
class Streambuf>
 
  169        streambuf_.commit(commit_);
 
  173    if (pos_ == buffers_.end())
 
  175        buffers_ = streambuf_.prepare(blockSize_);
 
  176        pos_ = buffers_.begin();
 
  179    *data = *pos_.data();
 
  180    *size = boost::asio::buffer_size(*pos_);
 
 
  186template <
class Streambuf>
 
  191        count <= commit_, 
"ripple::ZeroCopyOutputStream::BackUp : valid input");
 
  192    auto const n = commit_ - count;
 
  193    streambuf_.commit(n);
 
 
Implements ZeroCopyOutputStream around a Streambuf.
 
google::protobuf::int64 ByteCount() const override
 
google::protobuf::int64 count_
 
typename Streambuf::mutable_buffers_type buffers_type
 
void BackUp(int count) override
 
ZeroCopyOutputStream(Streambuf &streambuf, std::size_t blockSize)
 
typename buffers_type::const_iterator iterator
 
boost::asio::mutable_buffer mutable_buffer
 
bool Next(void **data, int *size) override
 
Use hash_* containers for keys that do not need a cryptographically secure hashing algorithm.