~singpolyma/biboumi

aa4255224eb19ca55a963574fb527e1f07ff9cba — louiz’ 7 years ago ce06c25
Optimize tcp_socket::on_send by using vector::erase() only once per call
1 files changed, 7 insertions(+), 6 deletions(-)

M louloulibs/network/tcp_socket_handler.cpp
M louloulibs/network/tcp_socket_handler.cpp => louloulibs/network/tcp_socket_handler.cpp +7 -6
@@ 305,23 305,24 @@ void TCPSocketHandler::on_send()
  else
    {
      // remove all the strings that were successfully sent.
      for (auto it = this->out_buf.begin();
           it != this->out_buf.end();)
      auto it = this->out_buf.begin();
      while (it != this->out_buf.end())
        {
          if (static_cast<size_t>(res) >= (*it).size())
          if (static_cast<size_t>(res) >= it->size())
            {
              res -= (*it).size();
              it = this->out_buf.erase(it);
              res -= it->size();
              ++it;
            }
          else
            {
              // If one string has partially been sent, we use substr to
              // crop it
              if (res > 0)
                (*it) = (*it).substr(res, std::string::npos);
                *it = it->substr(res, std::string::npos);
              break;
            }
        }
      this->out_buf.erase(this->out_buf.begin(), it);
      if (this->out_buf.empty())
        this->poller->stop_watching_send_events(this);
    }