Tune up static_buffer (API Change):

The static buffer is updated:

* reset() is no longer a member. Use b.consume(b.size()) instead.

* Simplified implementaton, uses asio instead of custom types

* Better stream performance: consuming the input makes room
  available in the output. This class is now suitable for
  HTTP reads.

These changes permit the static_buffer wrapper to adapt a user
memory buffer if desired, including a stack based array.
The static_buffer_n class may also be used for this purpose,
it comes with its own storage.
This commit is contained in:
Vinnie Falco
2017-06-07 19:21:33 -07:00
parent 20c59b7e22
commit 53cbeea596
9 changed files with 187 additions and 441 deletions
+8 -8
View File
@@ -440,7 +440,7 @@ operator()(error_code ec,
{
ping_data payload;
detail::read(payload, d.fb.data());
d.fb.reset();
d.fb.consume(d.fb.size());
if(d.ws.ping_cb_)
d.ws.ping_cb_(false, payload);
if(d.ws.wr_close_)
@@ -469,7 +469,7 @@ operator()(error_code ec,
detail::read(payload, d.fb.data());
if(d.ws.ping_cb_)
d.ws.ping_cb_(true, payload);
d.fb.reset();
d.fb.consume(d.fb.size());
d.state = do_read_fh;
break;
}
@@ -488,7 +488,7 @@ operator()(error_code ec,
if(cr.code == close_code::none)
cr.code = close_code::normal;
cr.reason = "";
d.fb.reset();
d.fb.consume(d.fb.size());
d.ws.template write_close<
static_buffer>(d.fb, cr);
if(d.ws.wr_block_)
@@ -535,7 +535,7 @@ operator()(error_code ec,
BOOST_ASSERT(d.ws.wr_block_ == &d);
d.ws.wr_block_ = nullptr;
}
d.fb.reset();
d.fb.consume(d.fb.size());
d.state = do_read_fh;
break;
}
@@ -550,7 +550,7 @@ operator()(error_code ec,
return;
case do_pong + 1:
d.fb.reset();
d.fb.consume(d.fb.size());
d.state = do_read_fh;
d.ws.wr_block_ = nullptr;
break;
@@ -621,7 +621,7 @@ operator()(error_code ec,
d.state = do_fail + 4;
break;
}
d.fb.reset();
d.fb.consume(d.fb.size());
d.ws.template write_close<
static_buffer>(d.fb, code);
if(d.ws.wr_block_)
@@ -793,7 +793,7 @@ read_frame(frame_info& fi, DynamicBuffer& dynabuf, error_code& ec)
{
ping_data payload;
detail::read(payload, fb.data());
fb.reset();
fb.consume(fb.size());
if(ping_cb_)
ping_cb_(false, payload);
write_ping<static_buffer>(
@@ -823,7 +823,7 @@ read_frame(frame_info& fi, DynamicBuffer& dynabuf, error_code& ec)
if(cr.code == close_code::none)
cr.code = close_code::normal;
cr.reason = "";
fb.reset();
fb.consume(fb.size());
wr_close_ = true;
write_close<static_buffer>(fb, cr);
boost::asio::write(stream_, fb.data(), ec);
+2 -2
View File
@@ -279,7 +279,7 @@ operator()(error_code ec,
case do_nomask_frag + 2:
d.cb.consume(
bytes_transferred - d.fh_buf.size());
d.fh_buf.reset();
d.fh_buf.consume(d.fh_buf.size());
d.fh.op = opcode::cont;
if(d.ws.wr_block_ == &d)
d.ws.wr_block_ = nullptr;
@@ -384,7 +384,7 @@ operator()(error_code ec,
case do_mask_frag + 2:
d.cb.consume(
bytes_transferred - d.fh_buf.size());
d.fh_buf.reset();
d.fh_buf.consume(d.fh_buf.size());
d.fh.op = opcode::cont;
BOOST_ASSERT(d.ws.wr_block_ == &d);
d.ws.wr_block_ = nullptr;