what is boost.asio.detail.read_op means?

what is boost.asio.detail.read_op means?

本文关键字:op means read detail is boost asio what      更新时间:2023-10-16

我阅读了boost.1.50源代码中的asio,方法是什么?

void operator()(const boost::system::error_code& ec,
    std::size_t bytes_transferred, int start = 0)
{
  switch (start)
  {
    case 1:
    buffers_.prepare(this->check_for_completion(ec, total_transferred_));
    for (;;)
    {
      stream_.async_read_some(buffers_,
          BOOST_ASIO_MOVE_CAST(read_op)(*this));
      return; default:
      total_transferred_ += bytes_transferred;
      buffers_.consume(bytes_transferred);
      buffers_.prepare(this->check_for_completion(ec, total_transferred_));
      if ((!ec && bytes_transferred == 0)
          || buffers_.begin() == buffers_.end())
        break;
    }
    handler_(ec, static_cast<const std::size_t&>(total_transferred_));
  }
}

代码取自boost_1_50_0\boost\asio\impl\read.hpp。开关盒样式看起来很奇怪,"return;default:"???

这是一个管理组合读取操作的函子。

当第一次调用(start == 1)时,它准备缓冲区,发出第一次读取,将自己作为完成处理程序传递,然后返回。

现在,每次作为完成处理程序调用时,它都会直接跳到default标签,更新缓冲区和内部计数器,并在需要时发出另一次读取。

实际上,可以将此运算符拆分为两个单独的运算符:一个用于初始读取,另一个用于后续调用。但也许这样的方法会生成更多的代码,因此被库作者拒绝了。