Rename to flat_static_buffer and flat_static_buffer_base (API Change):

Actions Required:

* Rename static_buffer to flat_static_buffer_base
* Rename static_buffer_n to flat_static_buffer
This commit is contained in:
Vinnie Falco
2017-07-14 20:25:39 -07:00
parent 1d7d7445d5
commit 94e92e75b7
23 changed files with 140 additions and 117 deletions

View File

@@ -10,6 +10,15 @@ WebSocket
* stream uses flat_buffer * stream uses flat_buffer
* accept requires a message * accept requires a message
API Changes:
* Rename to flat_static_buffer and flat_static_buffer_base
Actions Required:
* Rename static_buffer to flat_static_buffer_base
* Rename static_buffer_n to flat_static_buffer
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Version 81: Version 81:

View File

@@ -75,8 +75,8 @@
[def __multi_buffer__ [link beast.ref.beast__multi_buffer `multi_buffer`]] [def __multi_buffer__ [link beast.ref.beast__multi_buffer `multi_buffer`]]
[def __parser__ [link beast.ref.beast__http__parser `parser`]] [def __parser__ [link beast.ref.beast__http__parser `parser`]]
[def __serializer__ [link beast.ref.beast__http__serializer `serializer`]] [def __serializer__ [link beast.ref.beast__http__serializer `serializer`]]
[def __static_buffer__ [link beast.ref.beast__static_buffer `static_buffer`]] [def __flat_static_buffer__ [link beast.ref.beast__flat_static_buffer `flat_static_buffer`]]
[def __static_buffer_n__ [link beast.ref.beast__static_buffer_n `static_buffer_n`]] [def __flat_static_buffer_base__ [link beast.ref.beast__flat_static_buffer_base `flat_static_buffer_base`]]
[import ../../example/common/detect_ssl.hpp] [import ../../example/common/detect_ssl.hpp]
[import ../../example/doc/http_examples.hpp] [import ../../example/doc/http_examples.hpp]

View File

@@ -62,9 +62,10 @@ of scenarios:
[link beast.ref.beast__basic_flat_buffer `basic_flat_buffer`] [link beast.ref.beast__basic_flat_buffer `basic_flat_buffer`]
][ ][
Guarantees that input and output areas are buffer sequences with Guarantees that input and output areas are buffer sequences with
length one. Upon construction an optional upper limit to the total length one.
size of the input and output areas may be set. The basic container Upon construction an optional upper limit to the total size of the
is an input and output areas may be set.
The basic container is an
[@http://en.cppreference.com/w/cpp/concept/AllocatorAwareContainer [*AllocatorAwareContainer]]. [@http://en.cppreference.com/w/cpp/concept/AllocatorAwareContainer [*AllocatorAwareContainer]].
]] ]]
[[ [[
@@ -73,14 +74,16 @@ of scenarios:
][ ][
Uses a sequence of one or more character arrays of varying sizes. Uses a sequence of one or more character arrays of varying sizes.
Additional character array objects are appended to the sequence to Additional character array objects are appended to the sequence to
accommodate changes in the size of the character sequence. The basic accommodate changes in the size of the character sequence.
container is an The basic container is an
[@http://en.cppreference.com/w/cpp/concept/AllocatorAwareContainer [*AllocatorAwareContainer]]. [@http://en.cppreference.com/w/cpp/concept/AllocatorAwareContainer [*AllocatorAwareContainer]].
]] ]]
[[ [[
[link beast.ref.beast__static_buffer `static_buffer`] [link beast.ref.beast__flat_static_buffer `flat_static_buffer`]
[link beast.ref.beast__static_buffer `static_buffer_n`] [link beast.ref.beast__flat_static_buffer_base `flat_static_buffer_base`]
][ ][
Guarantees that input and output areas are buffer sequences with
length one.
Provides the facilities of a dynamic buffer, subject to an upper Provides the facilities of a dynamic buffer, subject to an upper
limit placed on the total size of the input and output areas defined limit placed on the total size of the input and output areas defined
by a constexpr template parameter. The storage for the sequences are by a constexpr template parameter. The storage for the sequences are

View File

@@ -104,9 +104,10 @@ As with message stream operations, parser stream operations require a
persisted __DynamicBuffer__ for holding unused octets from the stream. persisted __DynamicBuffer__ for holding unused octets from the stream.
The basic parser implementation is optimized for the case where this dynamic The basic parser implementation is optimized for the case where this dynamic
buffer stores its input sequence in a single contiguous memory buffer. It is buffer stores its input sequence in a single contiguous memory buffer. It is
advised to use an instance of __flat_buffer__, __static_buffer__, or advised to use an instance of __flat_buffer__, __flat_static_buffer__, or
__static_buffer_n__ for this purpose, although a user defined instance of __flat_static_buffer_base__ for this purpose, although a user defined instance
__DynamicBuffer__ which produces input sequences of length one is also suitable. of __DynamicBuffer__ which produces input sequences of length one is also
suitable.
The parser contains a message constructed internally. Arguments passed The parser contains a message constructed internally. Arguments passed
to the parser's constructor are forwarded into the message container. to the parser's constructor are forwarded into the message container.

View File

@@ -129,8 +129,8 @@ In this table:
* [link beast.ref.beast__basic_multi_buffer `basic_multi_buffer`] * [link beast.ref.beast__basic_multi_buffer `basic_multi_buffer`]
* [link beast.ref.beast__drain_buffer `drain_buffer`] * [link beast.ref.beast__drain_buffer `drain_buffer`]
* [link beast.ref.beast__flat_buffer `flat_buffer`] * [link beast.ref.beast__flat_buffer `flat_buffer`]
* [link beast.ref.beast__flat_static_buffer `flat_static_buffer`]
* [link beast.ref.beast__flat_static_buffer_base `flat_static_buffer_base`]
* [link beast.ref.beast__multi_buffer `multi_buffer`] * [link beast.ref.beast__multi_buffer `multi_buffer`]
* [link beast.ref.beast__static_buffer `static_buffer`]
* [link beast.ref.beast__static_buffer_n `static_buffer_n`]
[endsect] [endsect]

View File

@@ -30,7 +30,7 @@ __MutableBufferSequence__ concepts for passing buffers to functions.
The authors have found the dynamic buffer and buffer sequence interfaces to The authors have found the dynamic buffer and buffer sequence interfaces to
be optimal for interacting with Asio, and for other tasks such as incremental be optimal for interacting with Asio, and for other tasks such as incremental
parsing of data in buffers (for example, parsing websocket frames stored parsing of data in buffers (for example, parsing websocket frames stored
in a [link beast.ref.beast__static_buffer `static_buffer`]). in a [link beast.ref.beast__flat_static_buffer `flat_static_buffer`]).
During the development of Beast the authors have studied other software During the development of Beast the authors have studied other software
packages and in particular the comments left during the Boost Review process packages and in particular the comments left during the Boost Review process

View File

@@ -195,6 +195,8 @@
<member><link linkend="beast.ref.beast__file_stdio">file_stdio</link></member> <member><link linkend="beast.ref.beast__file_stdio">file_stdio</link></member>
<member><link linkend="beast.ref.beast__file_win32">file_win32</link></member> <member><link linkend="beast.ref.beast__file_win32">file_win32</link></member>
<member><link linkend="beast.ref.beast__flat_buffer">flat_buffer</link></member> <member><link linkend="beast.ref.beast__flat_buffer">flat_buffer</link></member>
<member><link linkend="beast.ref.beast__flat_static_buffer">flat_static_buffer</link></member>
<member><link linkend="beast.ref.beast__flat_static_buffer_base">flat_static_buffer_base</link></member>
<member><link linkend="beast.ref.beast__handler_alloc">handler_alloc</link></member> <member><link linkend="beast.ref.beast__handler_alloc">handler_alloc</link></member>
<member><link linkend="beast.ref.beast__handler_ptr">handler_ptr</link></member> <member><link linkend="beast.ref.beast__handler_ptr">handler_ptr</link></member>
<member><link linkend="beast.ref.beast__handler_type">handler_type</link></member> <member><link linkend="beast.ref.beast__handler_type">handler_type</link></member>
@@ -202,8 +204,6 @@
<member><link linkend="beast.ref.beast__iless">iless</link></member> <member><link linkend="beast.ref.beast__iless">iless</link></member>
<member><link linkend="beast.ref.beast__multi_buffer">multi_buffer</link></member> <member><link linkend="beast.ref.beast__multi_buffer">multi_buffer</link></member>
<member><link linkend="beast.ref.beast__span">span</link></member> <member><link linkend="beast.ref.beast__span">span</link></member>
<member><link linkend="beast.ref.beast__static_buffer">static_buffer</link></member>
<member><link linkend="beast.ref.beast__static_buffer_n">static_buffer_n</link></member>
<member><link linkend="beast.ref.beast__static_string">static_string</link></member> <member><link linkend="beast.ref.beast__static_string">static_string</link></member>
<member><link linkend="beast.ref.beast__string_param">string_param</link></member> <member><link linkend="beast.ref.beast__string_param">string_param</link></member>
<member><link linkend="beast.ref.beast__string_view">string_view</link></member> <member><link linkend="beast.ref.beast__string_view">string_view</link></member>

View File

@@ -47,7 +47,7 @@ public:
private: private:
using alloc_t = fields_alloc<char>; using alloc_t = fields_alloc<char>;
using request_body_t = http::basic_dynamic_body<beast::static_buffer_n<1024 * 1024>>; using request_body_t = http::basic_dynamic_body<beast::flat_static_buffer<1024 * 1024>>;
// The acceptor used to listen for incoming connections. // The acceptor used to listen for incoming connections.
tcp::acceptor& acceptor_; tcp::acceptor& acceptor_;
@@ -59,7 +59,7 @@ private:
tcp::socket socket_{acceptor_.get_io_service()}; tcp::socket socket_{acceptor_.get_io_service()};
// The buffer for performing reads // The buffer for performing reads
beast::static_buffer_n<8192> buffer_; beast::flat_static_buffer<8192> buffer_;
// The allocator used for the fields in the request and reply. // The allocator used for the fields in the request and reply.
alloc_t alloc_{8192}; alloc_t alloc_{8192};

View File

@@ -54,7 +54,7 @@ class multi_con
boost::asio::ssl::context& ctx_; boost::asio::ssl::context& ctx_;
// Holds the data we read during ssl detection // Holds the data we read during ssl detection
beast::static_buffer_n<6> buffer_; beast::flat_static_buffer<6> buffer_;
public: public:
// Constructor // Constructor

View File

@@ -31,7 +31,7 @@
#include <beast/core/ostream.hpp> #include <beast/core/ostream.hpp>
#include <beast/core/read_size.hpp> #include <beast/core/read_size.hpp>
#include <beast/core/span.hpp> #include <beast/core/span.hpp>
#include <beast/core/static_buffer.hpp> #include <beast/core/flat_static_buffer.hpp>
#include <beast/core/static_string.hpp> #include <beast/core/static_string.hpp>
#include <beast/core/string.hpp> #include <beast/core/string.hpp>
#include <beast/core/string_param.hpp> #include <beast/core/string_param.hpp>

View File

@@ -5,8 +5,8 @@
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// //
#ifndef BEAST_STATIC_BUFFER_HPP #ifndef BEAST_FLAT_STATIC_BUFFER_HPP
#define BEAST_STATIC_BUFFER_HPP #define BEAST_FLAT_STATIC_BUFFER_HPP
#include <beast/config.hpp> #include <beast/config.hpp>
#include <boost/asio/buffer.hpp> #include <boost/asio/buffer.hpp>
@@ -16,22 +16,24 @@
namespace beast { namespace beast {
/** A @b DynamicBuffer with a fixed size internal buffer. /** A flat @b DynamicBuffer with a fixed size internal buffer.
Buffer sequences returned by @ref data and @ref prepare
will always be of length one.
Ownership of the underlying storage belongs to the derived class. Ownership of the underlying storage belongs to the derived class.
@note Variables are usually declared using the template class @note Variables are usually declared using the template class
@ref static_buffer_n; however, to reduce the number of instantiations @ref flat_static_buffer; however, to reduce the number of instantiations
of template functions receiving static stream buffer arguments in a of template functions receiving static stream buffer arguments in a
deduced context, the signature of the receiving function should use deduced context, the signature of the receiving function should use
@ref static_buffer. @ref flat_static_buffer_base.
When used with @ref static_buffer_n this implements a dynamic When used with @ref flat_static_buffer this implements a dynamic
buffer using no memory allocations. buffer using no memory allocations.
@see @ref static_buffer_n @see @ref flat_static_buffer
*/ */
class static_buffer class flat_static_buffer_base
{ {
char* begin_; char* begin_;
char* in_; char* in_;
@@ -39,17 +41,23 @@ class static_buffer
char* last_; char* last_;
char* end_; char* end_;
static_buffer(static_buffer const& other) = delete; flat_static_buffer_base(flat_static_buffer_base const& other) = delete;
static_buffer& operator=(static_buffer const&) = delete; flat_static_buffer_base& operator=(flat_static_buffer_base const&) = delete;
public: public:
/// The type used to represent the input sequence as a list of buffers. /** The type used to represent the input sequence as a list of buffers.
This buffer sequence is guaranteed to have length 1.
*/
using const_buffers_type = boost::asio::const_buffers_1; using const_buffers_type = boost::asio::const_buffers_1;
/// The type used to represent the output sequence as a list of buffers. /** The type used to represent the output sequence as a list of buffers.
This buffer sequence is guaranteed to have length 1.
*/
using mutable_buffers_type = boost::asio::mutable_buffers_1; using mutable_buffers_type = boost::asio::mutable_buffers_1;
/** Constructor. /** Constructor
This creates a dynamic buffer using the provided storage area. This creates a dynamic buffer using the provided storage area.
@@ -57,7 +65,7 @@ public:
@param n The number of valid bytes pointed to by `p`. @param n The number of valid bytes pointed to by `p`.
*/ */
static_buffer(void* p, std::size_t n) flat_static_buffer_base(void* p, std::size_t n)
{ {
reset_impl(p, n); reset_impl(p, n);
} }
@@ -120,13 +128,13 @@ public:
} }
protected: protected:
/** Default constructor. /** Constructor
The buffer will be in an undefined state. It is necessary The buffer will be in an undefined state. It is necessary
for the derived class to call @ref reset in order to for the derived class to call @ref reset in order to
initialize the object. initialize the object.
*/ */
static_buffer(); flat_static_buffer_base();
/** Reset the pointed-to buffer. /** Reset the pointed-to buffer.
@@ -168,43 +176,45 @@ private:
/** A @b DynamicBuffer with a fixed size internal buffer. /** A @b DynamicBuffer with a fixed size internal buffer.
Buffer sequences returned by @ref data and @ref prepare
will always be of length one.
This implements a dynamic buffer using no memory allocations. This implements a dynamic buffer using no memory allocations.
@tparam N The number of bytes in the internal buffer. @tparam N The number of bytes in the internal buffer.
@note To reduce the number of template instantiations when passing @note To reduce the number of template instantiations when passing
objects of this type in a deduced context, the signature of the objects of this type in a deduced context, the signature of the
receiving function should use @ref static_buffer instead. receiving function should use @ref flat_static_buffer_base instead.
@see @ref static_buffer @see @ref flat_static_buffer_base
*/ */
template<std::size_t N> template<std::size_t N>
class static_buffer_n : public static_buffer class flat_static_buffer : public flat_static_buffer_base
{ {
char buf_[N]; char buf_[N];
public: public:
/// Copy constructor /// Constructor
static_buffer_n(static_buffer_n const&); flat_static_buffer(flat_static_buffer const&);
/// Copy assignment /// Constructor
static_buffer_n& operator=(static_buffer_n const&); flat_static_buffer()
: flat_static_buffer_base(buf_, N)
/// Construct a static buffer.
static_buffer_n()
: static_buffer(buf_, N)
{ {
} }
/// Returns the @ref static_buffer portion of this object /// Assignment
static_buffer& flat_static_buffer& operator=(flat_static_buffer const&);
/// Returns the @ref flat_static_buffer_base portion of this object
flat_static_buffer_base&
base() base()
{ {
return *this; return *this;
} }
/// Returns the @ref static_buffer portion of this object /// Returns the @ref flat_static_buffer_base portion of this object
static_buffer const& flat_static_buffer_base const&
base() const base() const
{ {
return *this; return *this;
@@ -213,6 +223,6 @@ public:
} // beast } // beast
#include <beast/core/impl/static_buffer.ipp> #include <beast/core/impl/flat_static_buffer.ipp>
#endif #endif

View File

@@ -5,8 +5,8 @@
// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
// //
#ifndef BEAST_IMPL_STATIC_BUFFER_IPP #ifndef BEAST_IMPL_FLAT_STATIC_BUFFER_IPP
#define BEAST_IMPL_STATIC_BUFFER_IPP #define BEAST_IMPL_FLAT_STATIC_BUFFER_IPP
#include <beast/core/detail/type_traits.hpp> #include <beast/core/detail/type_traits.hpp>
#include <boost/asio/buffer.hpp> #include <boost/asio/buffer.hpp>
@@ -25,7 +25,7 @@ namespace beast {
inline inline
auto auto
static_buffer:: flat_static_buffer_base::
data() const -> data() const ->
const_buffers_type const_buffers_type
{ {
@@ -34,7 +34,7 @@ data() const ->
inline inline
auto auto
static_buffer:: flat_static_buffer_base::
prepare(std::size_t n) -> prepare(std::size_t n) ->
mutable_buffers_type mutable_buffers_type
{ {
@@ -43,7 +43,7 @@ prepare(std::size_t n) ->
inline inline
void void
static_buffer:: flat_static_buffer_base::
reset(void* p, std::size_t n) reset(void* p, std::size_t n)
{ {
reset_impl(p, n); reset_impl(p, n);
@@ -51,7 +51,7 @@ reset(void* p, std::size_t n)
template<class> template<class>
void void
static_buffer:: flat_static_buffer_base::
reset_impl(void* p, std::size_t n) reset_impl(void* p, std::size_t n)
{ {
begin_ = begin_ =
@@ -64,7 +64,7 @@ reset_impl(void* p, std::size_t n)
template<class> template<class>
auto auto
static_buffer:: flat_static_buffer_base::
prepare_impl(std::size_t n) -> prepare_impl(std::size_t n) ->
mutable_buffers_type mutable_buffers_type
{ {
@@ -87,7 +87,7 @@ prepare_impl(std::size_t n) ->
template<class> template<class>
void void
static_buffer:: flat_static_buffer_base::
consume_impl(std::size_t n) consume_impl(std::size_t n)
{ {
if(n >= size()) if(n >= size())
@@ -102,9 +102,9 @@ consume_impl(std::size_t n)
//------------------------------------------------------------------------------ //------------------------------------------------------------------------------
template<std::size_t N> template<std::size_t N>
static_buffer_n<N>:: flat_static_buffer<N>::
static_buffer_n(static_buffer_n const& other) flat_static_buffer(flat_static_buffer const& other)
: static_buffer(buf_, N) : flat_static_buffer_base(buf_, N)
{ {
using boost::asio::buffer_copy; using boost::asio::buffer_copy;
this->commit(buffer_copy( this->commit(buffer_copy(
@@ -113,9 +113,9 @@ static_buffer_n(static_buffer_n const& other)
template<std::size_t N> template<std::size_t N>
auto auto
static_buffer_n<N>:: flat_static_buffer<N>::
operator=(static_buffer_n const& other) -> operator=(flat_static_buffer const& other) ->
static_buffer_n<N>& flat_static_buffer<N>&
{ {
using boost::asio::buffer_copy; using boost::asio::buffer_copy;
this->consume(this->size()); this->consume(this->size());

View File

@@ -401,7 +401,7 @@ public:
@b ConstBufferSequence that represents the next chunk of @b ConstBufferSequence that represents the next chunk of
message data. If the length of this buffer sequence is message data. If the length of this buffer sequence is
one, the implementation will not allocate additional memory. one, the implementation will not allocate additional memory.
The class @ref flat_buffer is provided as one way to The class @ref beast::flat_buffer is provided as one way to
meet this requirement meet this requirement
@param ec Set to the error, if any occurred. @param ec Set to the error, if any occurred.

View File

@@ -11,7 +11,7 @@
#include <beast/websocket/rfc6455.hpp> #include <beast/websocket/rfc6455.hpp>
#include <beast/websocket/detail/utf8_checker.hpp> #include <beast/websocket/detail/utf8_checker.hpp>
#include <beast/core/consuming_buffers.hpp> #include <beast/core/consuming_buffers.hpp>
#include <beast/core/static_buffer.hpp> #include <beast/core/flat_static_buffer.hpp>
#include <beast/core/static_string.hpp> #include <beast/core/static_string.hpp>
#include <boost/asio/buffer.hpp> #include <boost/asio/buffer.hpp>
#include <boost/assert.hpp> #include <boost/assert.hpp>
@@ -108,11 +108,11 @@ struct frame_header
// holds the largest possible frame header // holds the largest possible frame header
using fh_streambuf = using fh_streambuf =
static_buffer_n<14>; flat_static_buffer<14>;
// holds the largest possible control frame // holds the largest possible control frame
using frame_streambuf = using frame_streambuf =
static_buffer_n< 2 + 8 + 4 + 125 >; flat_static_buffer< 2 + 8 + 4 + 125 >;
inline inline
bool constexpr bool constexpr

View File

@@ -9,7 +9,7 @@
#define BEAST_WEBSOCKET_IMPL_CLOSE_IPP #define BEAST_WEBSOCKET_IMPL_CLOSE_IPP
#include <beast/core/handler_ptr.hpp> #include <beast/core/handler_ptr.hpp>
#include <beast/core/static_buffer.hpp> #include <beast/core/flat_static_buffer.hpp>
#include <beast/core/type_traits.hpp> #include <beast/core/type_traits.hpp>
#include <beast/core/detail/config.hpp> #include <beast/core/detail/config.hpp>
#include <boost/asio/handler_alloc_hook.hpp> #include <boost/asio/handler_alloc_hook.hpp>
@@ -42,7 +42,7 @@ class stream<NextLayer>::close_op
, cr(cr_) , cr(cr_)
{ {
ws.template write_close< ws.template write_close<
static_buffer>(fb, cr); flat_static_buffer_base>(fb, cr);
} }
}; };
@@ -227,7 +227,7 @@ close(close_reason const& cr, error_code& ec)
} }
wr_close_ = true; wr_close_ = true;
detail::frame_streambuf fb; detail::frame_streambuf fb;
write_close<static_buffer>(fb, cr); write_close<flat_static_buffer_base>(fb, cr);
boost::asio::write(stream_, fb.data(), ec); boost::asio::write(stream_, fb.data(), ec);
failed_ = !!ec; failed_ = !!ec;
} }

View File

@@ -43,7 +43,7 @@ class stream<NextLayer>::ping_op
using boost::asio::buffer; using boost::asio::buffer;
using boost::asio::buffer_copy; using boost::asio::buffer_copy;
ws.template write_ping< ws.template write_ping<
static_buffer>(fb, op_, payload); flat_static_buffer_base>(fb, op_, payload);
} }
}; };
@@ -234,7 +234,7 @@ stream<NextLayer>::
ping(ping_data const& payload, error_code& ec) ping(ping_data const& payload, error_code& ec)
{ {
detail::frame_streambuf db; detail::frame_streambuf db;
write_ping<static_buffer>( write_ping<flat_static_buffer_base>(
db, detail::opcode::ping, payload); db, detail::opcode::ping, payload);
boost::asio::write(stream_, db.data(), ec); boost::asio::write(stream_, db.data(), ec);
} }
@@ -256,7 +256,7 @@ stream<NextLayer>::
pong(ping_data const& payload, error_code& ec) pong(ping_data const& payload, error_code& ec)
{ {
detail::frame_streambuf db; detail::frame_streambuf db;
write_ping<static_buffer>( write_ping<flat_static_buffer_base>(
db, detail::opcode::pong, payload); db, detail::opcode::pong, payload);
boost::asio::write(stream_, db.data(), ec); boost::asio::write(stream_, db.data(), ec);
} }

View File

@@ -11,7 +11,7 @@
#include <beast/websocket/teardown.hpp> #include <beast/websocket/teardown.hpp>
#include <beast/core/buffer_prefix.hpp> #include <beast/core/buffer_prefix.hpp>
#include <beast/core/handler_ptr.hpp> #include <beast/core/handler_ptr.hpp>
#include <beast/core/static_buffer.hpp> #include <beast/core/flat_static_buffer.hpp>
#include <beast/core/type_traits.hpp> #include <beast/core/type_traits.hpp>
#include <beast/core/detail/clamp.hpp> #include <beast/core/detail/clamp.hpp>
#include <beast/core/detail/config.hpp> #include <beast/core/detail/config.hpp>
@@ -445,7 +445,7 @@ operator()(error_code ec,
d.state = do_read_fh; d.state = do_read_fh;
break; break;
} }
d.ws.template write_ping<static_buffer>( d.ws.template write_ping<flat_static_buffer_base>(
d.fb, detail::opcode::pong, payload); d.fb, detail::opcode::pong, payload);
if(d.ws.wr_block_) if(d.ws.wr_block_)
{ {
@@ -492,7 +492,7 @@ operator()(error_code ec,
cr.reason = ""; cr.reason = "";
d.fb.consume(d.fb.size()); d.fb.consume(d.fb.size());
d.ws.template write_close< d.ws.template write_close<
static_buffer>(d.fb, cr); flat_static_buffer_base>(d.fb, cr);
if(d.ws.wr_block_) if(d.ws.wr_block_)
{ {
// suspend // suspend
@@ -619,7 +619,7 @@ operator()(error_code ec,
} }
d.fb.consume(d.fb.size()); d.fb.consume(d.fb.size());
d.ws.template write_close< d.ws.template write_close<
static_buffer>(d.fb, code); flat_static_buffer_base>(d.fb, code);
if(d.ws.wr_block_) if(d.ws.wr_block_)
{ {
// suspend // suspend
@@ -806,7 +806,7 @@ read_frame(DynamicBuffer& dynabuf, error_code& ec)
fb.consume(fb.size()); fb.consume(fb.size());
if(ctrl_cb_) if(ctrl_cb_)
ctrl_cb_(frame_type::ping, payload); ctrl_cb_(frame_type::ping, payload);
write_ping<static_buffer>(fb, write_ping<flat_static_buffer_base>(fb,
detail::opcode::pong, payload); detail::opcode::pong, payload);
boost::asio::write(stream_, fb.data(), ec); boost::asio::write(stream_, fb.data(), ec);
failed_ = !!ec; failed_ = !!ec;
@@ -839,7 +839,7 @@ read_frame(DynamicBuffer& dynabuf, error_code& ec)
cr.reason = ""; cr.reason = "";
fb.consume(fb.size()); fb.consume(fb.size());
wr_close_ = true; wr_close_ = true;
write_close<static_buffer>(fb, cr); write_close<flat_static_buffer_base>(fb, cr);
boost::asio::write(stream_, fb.data(), ec); boost::asio::write(stream_, fb.data(), ec);
failed_ = !!ec; failed_ = !!ec;
if(failed_) if(failed_)
@@ -966,7 +966,7 @@ do_close:
{ {
wr_close_ = true; wr_close_ = true;
detail::frame_streambuf fb; detail::frame_streambuf fb;
write_close<static_buffer>(fb, code); write_close<flat_static_buffer_base>(fb, code);
boost::asio::write(stream_, fb.data(), ec); boost::asio::write(stream_, fb.data(), ec);
failed_ = !!ec; failed_ = !!ec;
if(failed_) if(failed_)

View File

@@ -19,7 +19,7 @@
#include <beast/core/buffer_cat.hpp> #include <beast/core/buffer_cat.hpp>
#include <beast/core/buffer_prefix.hpp> #include <beast/core/buffer_prefix.hpp>
#include <beast/core/consuming_buffers.hpp> #include <beast/core/consuming_buffers.hpp>
#include <beast/core/static_buffer.hpp> #include <beast/core/flat_static_buffer.hpp>
#include <beast/core/type_traits.hpp> #include <beast/core/type_traits.hpp>
#include <beast/core/detail/type_traits.hpp> #include <beast/core/detail/type_traits.hpp>
#include <boost/assert.hpp> #include <boost/assert.hpp>

View File

@@ -13,7 +13,7 @@
#include <beast/core/buffer_prefix.hpp> #include <beast/core/buffer_prefix.hpp>
#include <beast/core/consuming_buffers.hpp> #include <beast/core/consuming_buffers.hpp>
#include <beast/core/handler_ptr.hpp> #include <beast/core/handler_ptr.hpp>
#include <beast/core/static_buffer.hpp> #include <beast/core/flat_static_buffer.hpp>
#include <beast/core/type_traits.hpp> #include <beast/core/type_traits.hpp>
#include <beast/core/detail/clamp.hpp> #include <beast/core/detail/clamp.hpp>
#include <beast/core/detail/config.hpp> #include <beast/core/detail/config.hpp>
@@ -215,7 +215,7 @@ loop:
BOOST_ASSERT(d.ws.wr_block_ == &d); BOOST_ASSERT(d.ws.wr_block_ == &d);
d.fh.fin = d.fin; d.fh.fin = d.fin;
d.fh.len = buffer_size(d.cb); d.fh.len = buffer_size(d.cb);
detail::write<static_buffer>( detail::write<flat_static_buffer_base>(
d.fh_buf, d.fh); d.fh_buf, d.fh);
d.ws.wr_.cont = ! d.fin; d.ws.wr_.cont = ! d.fin;
// Send frame // Send frame
@@ -235,7 +235,7 @@ loop:
d.remain -= n; d.remain -= n;
d.fh.len = n; d.fh.len = n;
d.fh.fin = d.fin ? d.remain == 0 : false; d.fh.fin = d.fin ? d.remain == 0 : false;
detail::write<static_buffer>( detail::write<flat_static_buffer_base>(
d.fh_buf, d.fh); d.fh_buf, d.fh);
d.ws.wr_.cont = ! d.fin; d.ws.wr_.cont = ! d.fin;
// Send frame // Send frame
@@ -277,7 +277,7 @@ loop:
d.fh.len = d.remain; d.fh.len = d.remain;
d.fh.key = d.ws.maskgen_(); d.fh.key = d.ws.maskgen_();
detail::prepare_key(d.key, d.fh.key); detail::prepare_key(d.key, d.fh.key);
detail::write<static_buffer>( detail::write<flat_static_buffer_base>(
d.fh_buf, d.fh); d.fh_buf, d.fh);
auto const n = auto const n =
clamp(d.remain, d.ws.wr_.buf_size); clamp(d.remain, d.ws.wr_.buf_size);
@@ -329,7 +329,7 @@ loop:
d.ws.wr_.buf.get(), n); d.ws.wr_.buf.get(), n);
buffer_copy(b, d.cb); buffer_copy(b, d.cb);
detail::mask_inplace(b, d.key); detail::mask_inplace(b, d.key);
detail::write<static_buffer>( detail::write<flat_static_buffer_base>(
d.fh_buf, d.fh); d.fh_buf, d.fh);
d.ws.wr_.cont = ! d.fin; d.ws.wr_.cont = ! d.fin;
// Send frame // Send frame
@@ -402,7 +402,7 @@ loop:
d.fh.fin = ! more; d.fh.fin = ! more;
d.fh.len = n; d.fh.len = n;
detail::fh_streambuf fh_buf; detail::fh_streambuf fh_buf;
detail::write<static_buffer>(fh_buf, d.fh); detail::write<flat_static_buffer_base>(fh_buf, d.fh);
d.ws.wr_.cont = ! d.fin; d.ws.wr_.cont = ! d.fin;
// Send frame // Send frame
d.step = more ? d.step = more ?
@@ -699,7 +699,7 @@ write_frame(bool fin,
fh.fin = ! more; fh.fin = ! more;
fh.len = n; fh.len = n;
detail::fh_streambuf fh_buf; detail::fh_streambuf fh_buf;
detail::write<static_buffer>(fh_buf, fh); detail::write<flat_static_buffer_base>(fh_buf, fh);
wr_.cont = ! fin; wr_.cont = ! fin;
boost::asio::write(stream_, boost::asio::write(stream_,
buffer_cat(fh_buf.data(), b), ec); buffer_cat(fh_buf.data(), b), ec);
@@ -727,7 +727,7 @@ write_frame(bool fin,
fh.fin = fin; fh.fin = fin;
fh.len = remain; fh.len = remain;
detail::fh_streambuf fh_buf; detail::fh_streambuf fh_buf;
detail::write<static_buffer>(fh_buf, fh); detail::write<flat_static_buffer_base>(fh_buf, fh);
wr_.cont = ! fin; wr_.cont = ! fin;
boost::asio::write(stream_, boost::asio::write(stream_,
buffer_cat(fh_buf.data(), buffers), ec); buffer_cat(fh_buf.data(), buffers), ec);
@@ -748,7 +748,7 @@ write_frame(bool fin,
fh.len = n; fh.len = n;
fh.fin = fin ? remain == 0 : false; fh.fin = fin ? remain == 0 : false;
detail::fh_streambuf fh_buf; detail::fh_streambuf fh_buf;
detail::write<static_buffer>(fh_buf, fh); detail::write<flat_static_buffer_base>(fh_buf, fh);
wr_.cont = ! fin; wr_.cont = ! fin;
boost::asio::write(stream_, boost::asio::write(stream_,
buffer_cat(fh_buf.data(), buffer_cat(fh_buf.data(),
@@ -773,7 +773,7 @@ write_frame(bool fin,
detail::prepared_key key; detail::prepared_key key;
detail::prepare_key(key, fh.key); detail::prepare_key(key, fh.key);
detail::fh_streambuf fh_buf; detail::fh_streambuf fh_buf;
detail::write<static_buffer>(fh_buf, fh); detail::write<flat_static_buffer_base>(fh_buf, fh);
consuming_buffers< consuming_buffers<
ConstBufferSequence> cb{buffers}; ConstBufferSequence> cb{buffers};
{ {
@@ -824,7 +824,7 @@ write_frame(bool fin,
fh.fin = fin ? remain == 0 : false; fh.fin = fin ? remain == 0 : false;
wr_.cont = ! fh.fin; wr_.cont = ! fh.fin;
detail::fh_streambuf fh_buf; detail::fh_streambuf fh_buf;
detail::write<static_buffer>(fh_buf, fh); detail::write<flat_static_buffer_base>(fh_buf, fh);
boost::asio::write(stream_, boost::asio::write(stream_,
buffer_cat(fh_buf.data(), b), ec); buffer_cat(fh_buf.data(), b), ec);
failed_ = !!ec; failed_ = !!ec;

View File

@@ -30,13 +30,13 @@ add_executable (core-tests
file_stdio.cpp file_stdio.cpp
file_win32.cpp file_win32.cpp
flat_buffer.cpp flat_buffer.cpp
flat_static_buffer.cpp
handler_alloc.cpp handler_alloc.cpp
handler_ptr.cpp handler_ptr.cpp
multi_buffer.cpp multi_buffer.cpp
ostream.cpp ostream.cpp
read_size.cpp read_size.cpp
span.cpp span.cpp
static_buffer.cpp
static_string.cpp static_string.cpp
string.cpp string.cpp
string_param.cpp string_param.cpp

View File

@@ -24,13 +24,13 @@ unit-test core-tests :
file_stdio.cpp file_stdio.cpp
file_win32.cpp file_win32.cpp
flat_buffer.cpp flat_buffer.cpp
flat_static_buffer.cpp
handler_alloc.cpp handler_alloc.cpp
handler_ptr.cpp handler_ptr.cpp
multi_buffer.cpp multi_buffer.cpp
ostream.cpp ostream.cpp
read_size.cpp read_size.cpp
span.cpp span.cpp
static_buffer.cpp
static_string.cpp static_string.cpp
string.cpp string.cpp
string_param.cpp string_param.cpp

View File

@@ -6,7 +6,7 @@
// //
// Test that header file is self-contained. // Test that header file is self-contained.
#include <beast/core/static_buffer.hpp> #include <beast/core/flat_static_buffer.hpp>
#include "buffer_test.hpp" #include "buffer_test.hpp"
@@ -18,10 +18,10 @@
namespace beast { namespace beast {
static_assert( static_assert(
is_dynamic_buffer<static_buffer>::value, is_dynamic_buffer<flat_static_buffer_base>::value,
"DynamicBuffer requirements not met"); "DynamicBuffer requirements not met");
class static_buffer_test : public beast::unit_test::suite class flat_static_buffer_test : public beast::unit_test::suite
{ {
public: public:
void void
@@ -44,7 +44,7 @@ public:
std::size_t v = sizeof(buf) - (t + u); std::size_t v = sizeof(buf) - (t + u);
{ {
std::memset(buf, 0, sizeof(buf)); std::memset(buf, 0, sizeof(buf));
static_buffer_n<sizeof(buf)> ba; flat_static_buffer<sizeof(buf)> ba;
{ {
auto d = ba.prepare(z); auto d = ba.prepare(z);
BEAST_EXPECT(buffer_size(d) == z); BEAST_EXPECT(buffer_size(d) == z);
@@ -139,32 +139,32 @@ public:
using namespace test; using namespace test;
string_view const s = "Hello, world!"; string_view const s = "Hello, world!";
// static_buffer // flat_static_buffer_base
{ {
char buf[64]; char buf[64];
static_buffer b{buf, sizeof(buf)}; flat_static_buffer_base b{buf, sizeof(buf)};
ostream(b) << s; ostream(b) << s;
BEAST_EXPECT(to_string(b.data()) == s); BEAST_EXPECT(to_string(b.data()) == s);
b.consume(b.size()); b.consume(b.size());
BEAST_EXPECT(to_string(b.data()) == ""); BEAST_EXPECT(to_string(b.data()) == "");
} }
// static_buffer_n // flat_static_buffer
{ {
static_buffer_n<64> b1; flat_static_buffer<64> b1;
BEAST_EXPECT(b1.size() == 0); BEAST_EXPECT(b1.size() == 0);
BEAST_EXPECT(b1.max_size() == 64); BEAST_EXPECT(b1.max_size() == 64);
BEAST_EXPECT(b1.capacity() == 64); BEAST_EXPECT(b1.capacity() == 64);
ostream(b1) << s; ostream(b1) << s;
BEAST_EXPECT(to_string(b1.data()) == s); BEAST_EXPECT(to_string(b1.data()) == s);
{ {
static_buffer_n<64> b2{b1}; flat_static_buffer<64> b2{b1};
BEAST_EXPECT(to_string(b2.data()) == s); BEAST_EXPECT(to_string(b2.data()) == s);
b2.consume(7); b2.consume(7);
BEAST_EXPECT(to_string(b2.data()) == s.substr(7)); BEAST_EXPECT(to_string(b2.data()) == s.substr(7));
} }
{ {
static_buffer_n<64> b2; flat_static_buffer<64> b2;
b2 = b1; b2 = b1;
BEAST_EXPECT(to_string(b2.data()) == s); BEAST_EXPECT(to_string(b2.data()) == s);
b2.consume(7); b2.consume(7);
@@ -174,7 +174,7 @@ public:
// cause memmove // cause memmove
{ {
static_buffer_n<10> b; flat_static_buffer<10> b;
write_buffer(b, "12345"); write_buffer(b, "12345");
b.consume(3); b.consume(3);
write_buffer(b, "67890123"); write_buffer(b, "67890123");
@@ -192,7 +192,7 @@ public:
// read_size // read_size
{ {
static_buffer_n<10> b; flat_static_buffer<10> b;
BEAST_EXPECT(read_size(b, 512) == 10); BEAST_EXPECT(read_size(b, 512) == 10);
b.prepare(4); b.prepare(4);
b.commit(4); b.commit(4);
@@ -206,14 +206,14 @@ public:
// base // base
{ {
static_buffer_n<10> b; flat_static_buffer<10> b;
[&](static_buffer& base) [&](flat_static_buffer_base& base)
{ {
BEAST_EXPECT(base.max_size() == b.capacity()); BEAST_EXPECT(base.max_size() == b.capacity());
} }
(b.base()); (b.base());
[&](static_buffer const& base) [&](flat_static_buffer_base const& base)
{ {
BEAST_EXPECT(base.max_size() == b.capacity()); BEAST_EXPECT(base.max_size() == b.capacity());
} }
@@ -228,6 +228,6 @@ public:
} }
}; };
BEAST_DEFINE_TESTSUITE(static_buffer,core,beast); BEAST_DEFINE_TESTSUITE(flat_static_buffer,core,beast);
} // beastp } // beastp

View File

@@ -11,7 +11,7 @@
#include "test_parser.hpp" #include "test_parser.hpp"
#include <beast/core/ostream.hpp> #include <beast/core/ostream.hpp>
#include <beast/core/static_buffer.hpp> #include <beast/core/flat_static_buffer.hpp>
#include <beast/http/fields.hpp> #include <beast/http/fields.hpp>
#include <beast/http/dynamic_body.hpp> #include <beast/http/dynamic_body.hpp>
#include <beast/http/parser.hpp> #include <beast/http/parser.hpp>
@@ -135,7 +135,7 @@ public:
"10\r\n" "10\r\n"
"****************\r\n" "****************\r\n"
"0\r\n\r\n"; "0\r\n\r\n";
static_buffer_n<1024> b; flat_static_buffer<1024> b;
request<string_body> req; request<string_body> req;
try try
{ {
@@ -159,7 +159,7 @@ public:
"****************\r\n" "****************\r\n"
"0\r\n\r\n"; "0\r\n\r\n";
error_code ec = test::error::fail_error; error_code ec = test::error::fail_error;
static_buffer_n<10> b; flat_static_buffer<10> b;
request<string_body> req; request<string_body> req;
read(p.server, b, req, ec); read(p.server, b, req, ec);
BEAST_EXPECTS(ec == error::buffer_overflow, BEAST_EXPECTS(ec == error::buffer_overflow,