Пример #1
0
 std::size_t write_at_buffer_sequence(SyncRandomAccessWriteDevice& d,
     uint64_t offset, const ConstBufferSequence& buffers,
     const ConstBufferIterator&, CompletionCondition completion_condition,
     boost::system::error_code& ec)
 {
   ec = boost::system::error_code();
   boost::asio::detail::consuming_buffers<const_buffer,
       ConstBufferSequence, ConstBufferIterator> tmp(buffers);
   while (!tmp.empty())
   {
     if (std::size_t max_size = detail::adapt_completion_condition_result(
           completion_condition(ec, tmp.total_consumed())))
     {
       tmp.consume(d.write_some_at(offset + tmp.total_consumed(),
             tmp.prepare(max_size), ec));
     }
     else
       break;
   }
   return tmp.total_consumed();;
 }
Пример #2
0
std::size_t write_at(SyncRandomAccessWriteDevice& d,
    lslboost::uint64_t offset, const ConstBufferSequence& buffers,
    CompletionCondition completion_condition, lslboost::system::error_code& ec)
{
  ec = lslboost::system::error_code();
  lslboost::asio::detail::consuming_buffers<
    const_buffer, ConstBufferSequence> tmp(buffers);
  std::size_t total_transferred = 0;
  tmp.prepare(detail::adapt_completion_condition_result(
        completion_condition(ec, total_transferred)));
  while (tmp.begin() != tmp.end())
  {
    std::size_t bytes_transferred = d.write_some_at(
        offset + total_transferred, tmp, ec);
    tmp.consume(bytes_transferred);
    total_transferred += bytes_transferred;
    tmp.prepare(detail::adapt_completion_condition_result(
          completion_condition(ec, total_transferred)));
  }
  return total_transferred;
}