コード例 #1
0
std::size_t read_at(SyncRandomAccessReadDevice& d,
    uint64_t offset, const MutableBufferSequence& buffers,
    CompletionCondition completion_condition, lslboost::system::error_code& ec)
{
  ec = lslboost::system::error_code();
  lslboost::asio::detail::consuming_buffers<
    mutable_buffer, MutableBufferSequence> 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.read_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;
}
コード例 #2
0
std::size_t read_at(SyncRandomAccessReadDevice& d,
    uint64_t offset, lslboost::asio::basic_streambuf<Allocator>& b,
    CompletionCondition completion_condition, lslboost::system::error_code& ec)
{
  ec = lslboost::system::error_code();
  std::size_t total_transferred = 0;
  std::size_t max_size = detail::adapt_completion_condition_result(
        completion_condition(ec, total_transferred));
  std::size_t bytes_available = read_size_helper(b, max_size);
  while (bytes_available > 0)
  {
    std::size_t bytes_transferred = d.read_some_at(
        offset + total_transferred, b.prepare(bytes_available), ec);
    b.commit(bytes_transferred);
    total_transferred += bytes_transferred;
    max_size = detail::adapt_completion_condition_result(
          completion_condition(ec, total_transferred));
    bytes_available = read_size_helper(b, max_size);
  }
  return total_transferred;
}
コード例 #3
0
ファイル: read_at.hpp プロジェクト: DINKIN/mongo
 std::size_t read_at_buffer_sequence(SyncRandomAccessReadDevice& d,
     uint64_t offset, const MutableBufferSequence& buffers,
     const MutableBufferIterator&, CompletionCondition completion_condition,
     asio::error_code& ec)
 {
   ec = asio::error_code();
   asio::detail::consuming_buffers<mutable_buffer,
       MutableBufferSequence, MutableBufferIterator> 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.read_some_at(offset + tmp.total_consumed(),
             tmp.prepare(max_size), ec));
     }
     else
       break;
   }
   return tmp.total_consumed();;
 }