diff --git a/include/boost/beast/_experimental/http/impl/icy_stream.hpp b/include/boost/beast/_experimental/http/impl/icy_stream.hpp index 8e9a46b8..c9dadb2f 100644 --- a/include/boost/beast/_experimental/http/impl/icy_stream.hpp +++ b/include/boost/beast/_experimental/http/impl/icy_stream.hpp @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include #include diff --git a/include/boost/beast/_experimental/test/impl/stream.hpp b/include/boost/beast/_experimental/test/impl/stream.hpp index c117bbbd..05209cd6 100644 --- a/include/boost/beast/_experimental/test/impl/stream.hpp +++ b/include/boost/beast/_experimental/test/impl/stream.hpp @@ -11,9 +11,10 @@ #define BOOST_BEAST_TEST_IMPL_STREAM_HPP #include -#include +#include #include #include +#include #include #include #include diff --git a/include/boost/beast/_experimental/test/impl/stream.ipp b/include/boost/beast/_experimental/test/impl/stream.ipp index 665221c1..8d58be10 100644 --- a/include/boost/beast/_experimental/test/impl/stream.ipp +++ b/include/boost/beast/_experimental/test/impl/stream.ipp @@ -12,7 +12,7 @@ #include #include -#include +#include #include #include #include diff --git a/include/boost/beast/core.hpp b/include/boost/beast/core.hpp index dd610837..0c1f5df4 100644 --- a/include/boost/beast/core.hpp +++ b/include/boost/beast/core.hpp @@ -15,7 +15,6 @@ #include #include #include -#include #include #include #include diff --git a/include/boost/beast/core/buffer_size.hpp b/include/boost/beast/core/buffer_size.hpp index 19af739e..60bf0bfa 100644 --- a/include/boost/beast/core/buffer_size.hpp +++ b/include/boost/beast/core/buffer_size.hpp @@ -11,133 +11,6 @@ #define BOOST_BEAST_BUFFER_SIZE_HPP #include -#include -#include -#include -#include -#include - -namespace boost { -namespace beast { - -namespace detail { - -template -struct has_buffer_size_impl : std::false_type -{ -}; - -template -struct has_buffer_size_impl() = - std::declval().buffer_size_impl())>> - : std::true_type -{ -}; - -struct buffer_size_impl -{ - template< - class B, - class = typename std::enable_if< - std::is_convertible< - B, net::const_buffer>::value>::type> - std::size_t - operator()(B const& b) const - { - return net::const_buffer(b).size(); - } - - template< - class B, - class = typename std::enable_if< - ! std::is_convertible< - B, net::const_buffer>::value>::type, - class = typename std::enable_if< - net::is_const_buffer_sequence::value && - ! has_buffer_size_impl::value>::type> - std::size_t - operator()(B const& b) const - { - using net::buffer_size; - return buffer_size(b); - } - - template< - class B, - class = typename std::enable_if< - ! std::is_convertible::value>::type, - class = typename std::enable_if< - net::is_const_buffer_sequence::value>::type, - class = typename std::enable_if< - has_buffer_size_impl::value>::type> - std::size_t - operator()(B const& b) const - { - return b.buffer_size_impl(); - } -}; - -/** Return `true` if a buffer sequence is empty - - This is sometimes faster than using @ref buffer_size -*/ -template -bool -buffers_empty(ConstBufferSequence const& buffers) -{ - auto it = net::buffer_sequence_begin(buffers); - auto end = net::buffer_sequence_end(buffers); - while(it != end) - { - if(net::const_buffer(*it).size() > 0) - return false; - ++it; - } - return true; -} - -} // detail - -/** Return the total number of bytes in a buffer or buffer sequence - - This function returns the total number of bytes in a buffer, - buffer sequence, or object convertible to a buffer. Specifically - it may be passed: - - @li A ConstBufferSequence or MutableBufferSequence - - @li A `net::const_buffer` or `net::mutable_buffer` - - @li An object convertible to `net::const_buffer` - - This function is designed as an easier-to-use replacement for - `net::buffer_size`. It recognizes customization points found through - argument-dependent lookup. The call `beast::buffer_size(b)` is - equivalent to performing: - @code - using namespace net; - buffer_size(b); - @endcode - In addition this handles types which are convertible to - `net::const_buffer`; these are not handled by `net::buffer_size`. - - @note It is expected that a future version of Networking will - incorporate the features of this function. - - @param buffers The buffer or buffer sequence to calculate the size of. - - @return The total number of bytes in the buffer or sequence. -*/ -#if BOOST_BEAST_DOXYGEN -template -void -buffer_size(Buffers const& buffers); -#else -BOOST_BEAST_INLINE_VARIABLE(buffer_size, detail::buffer_size_impl) -#endif - -} // beast -} // boost +#include #endif diff --git a/include/boost/beast/core/buffer_traits.hpp b/include/boost/beast/core/buffer_traits.hpp index 07d72b21..2e2286d7 100644 --- a/include/boost/beast/core/buffer_traits.hpp +++ b/include/boost/beast/core/buffer_traits.hpp @@ -11,6 +11,8 @@ #define BOOST_BEAST_BUFFER_TRAITS_HPP #include +#include +#include #include #include #include @@ -104,35 +106,6 @@ using buffers_type = typename std::conditional< net::mutable_buffer, net::const_buffer>::type; #endif -#if BOOST_WORKAROUND(BOOST_MSVC, < 1910) - -namespace detail { -template -struct buffers_iterator_type_helper -{ - using type = decltype( - net::buffer_sequence_begin( - std::declval())); -}; - -template<> -struct buffers_iterator_type_helper< - net::const_buffer> -{ - using type = net::const_buffer const*; -}; - -template<> -struct buffers_iterator_type_helper< - net::mutable_buffer> -{ - using type = net::mutable_buffer const*; -}; - -} // detail - -#endif - /** Type alias for the iterator type of a buffer sequence type. This metafunction is used to determine the type of iterator @@ -156,6 +129,44 @@ using buffers_iterator_type = std::declval())); #endif +/** Return the total number of bytes in a buffer or buffer sequence + + This function returns the total number of bytes in a buffer, + buffer sequence, or object convertible to a buffer. Specifically + it may be passed: + + @li A ConstBufferSequence or MutableBufferSequence + + @li A `net::const_buffer` or `net::mutable_buffer` + + @li An object convertible to `net::const_buffer` + + This function is designed as an easier-to-use replacement for + `net::buffer_size`. It recognizes customization points found through + argument-dependent lookup. The call `beast::buffer_size(b)` is + equivalent to performing: + @code + using namespace net; + buffer_size(b); + @endcode + In addition this handles types which are convertible to + `net::const_buffer`; these are not handled by `net::buffer_size`. + + @note It is expected that a future version of Networking will + incorporate the features of this function. + + @param buffers The buffer or buffer sequence to calculate the size of. + + @return The total number of bytes in the buffer or sequence. +*/ +#if BOOST_BEAST_DOXYGEN +template +void +buffer_size(Buffers const& buffers); +#else +BOOST_BEAST_INLINE_VARIABLE(buffer_size, detail::buffer_size_impl) +#endif + } // beast } // boost diff --git a/include/boost/beast/core/buffers_prefix.hpp b/include/boost/beast/core/buffers_prefix.hpp index e47bdd67..a3774969 100644 --- a/include/boost/beast/core/buffers_prefix.hpp +++ b/include/boost/beast/core/buffers_prefix.hpp @@ -11,7 +11,6 @@ #define BOOST_BEAST_BUFFERS_PREFIX_HPP #include -#include #include #include // for in_place_init_t #include diff --git a/include/boost/beast/core/buffers_to_string.hpp b/include/boost/beast/core/buffers_to_string.hpp index 45e552a7..7ae5a5ff 100644 --- a/include/boost/beast/core/buffers_to_string.hpp +++ b/include/boost/beast/core/buffers_to_string.hpp @@ -11,7 +11,7 @@ #define BOOST_BEAST_BUFFERS_TO_STRING_HPP #include -#include +#include #include #include #include diff --git a/include/boost/beast/core/detail/buffer_traits.hpp b/include/boost/beast/core/detail/buffer_traits.hpp new file mode 100644 index 00000000..9123971a --- /dev/null +++ b/include/boost/beast/core/detail/buffer_traits.hpp @@ -0,0 +1,128 @@ +// +// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) +// +// Distributed under the Boost Software License, Version 1.0. (See accompanying +// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// +// Official repository: https://github.com/boostorg/beast +// + +#ifndef BOOST_BEAST_DETAIL_BUFFER_TRAITS_HPP +#define BOOST_BEAST_DETAIL_BUFFER_TRAITS_HPP + +#include +#include +#include +#include +#include + +namespace boost { +namespace beast { +namespace detail { + +#if BOOST_WORKAROUND(BOOST_MSVC, < 1910) + +template +struct buffers_iterator_type_helper +{ + using type = decltype( + net::buffer_sequence_begin( + std::declval())); +}; + +template<> +struct buffers_iterator_type_helper< + net::const_buffer> +{ + using type = net::const_buffer const*; +}; + +template<> +struct buffers_iterator_type_helper< + net::mutable_buffer> +{ + using type = net::mutable_buffer const*; +}; + +#endif + +template +struct has_buffer_size_impl : std::false_type +{ +}; + +template +struct has_buffer_size_impl() = + std::declval().buffer_size_impl())>> + : std::true_type +{ +}; + +struct buffer_size_impl +{ + template< + class B, + class = typename std::enable_if< + std::is_convertible< + B, net::const_buffer>::value>::type> + std::size_t + operator()(B const& b) const + { + return net::const_buffer(b).size(); + } + + template< + class B, + class = typename std::enable_if< + ! std::is_convertible< + B, net::const_buffer>::value>::type, + class = typename std::enable_if< + net::is_const_buffer_sequence::value && + ! has_buffer_size_impl::value>::type> + std::size_t + operator()(B const& b) const + { + using net::buffer_size; + return buffer_size(b); + } + + template< + class B, + class = typename std::enable_if< + ! std::is_convertible::value>::type, + class = typename std::enable_if< + net::is_const_buffer_sequence::value>::type, + class = typename std::enable_if< + has_buffer_size_impl::value>::type> + std::size_t + operator()(B const& b) const + { + return b.buffer_size_impl(); + } +}; + +/** Return `true` if a buffer sequence is empty + + This is sometimes faster than using @ref buffer_size +*/ +template +bool +buffers_empty(ConstBufferSequence const& buffers) +{ + auto it = net::buffer_sequence_begin(buffers); + auto end = net::buffer_sequence_end(buffers); + while(it != end) + { + if(net::const_buffer(*it).size() > 0) + return false; + ++it; + } + return true; +} + +} // detail +} // beast +} // boost + +#endif diff --git a/include/boost/beast/core/detail/flat_stream.hpp b/include/boost/beast/core/detail/flat_stream.hpp index 0765bf12..d5ee6c87 100644 --- a/include/boost/beast/core/detail/flat_stream.hpp +++ b/include/boost/beast/core/detail/flat_stream.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_CORE_DETAIL_FLAT_STREAM_HPP #define BOOST_BEAST_CORE_DETAIL_FLAT_STREAM_HPP -#include +#include #include #include diff --git a/include/boost/beast/core/impl/basic_stream.hpp b/include/boost/beast/core/impl/basic_stream.hpp index 0a1f3635..46b55a74 100644 --- a/include/boost/beast/core/impl/basic_stream.hpp +++ b/include/boost/beast/core/impl/basic_stream.hpp @@ -11,7 +11,7 @@ #define BOOST_BEAST_CORE_IMPL_BASIC_STREAM_HPP #include -#include +#include #include #include #include diff --git a/include/boost/beast/core/impl/buffers_adaptor.hpp b/include/boost/beast/core/impl/buffers_adaptor.hpp index 01c44bc1..d6196cf6 100644 --- a/include/boost/beast/core/impl/buffers_adaptor.hpp +++ b/include/boost/beast/core/impl/buffers_adaptor.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_IMPL_BUFFERS_ADAPTOR_HPP #define BOOST_BEAST_IMPL_BUFFERS_ADAPTOR_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/core/impl/buffers_prefix.hpp b/include/boost/beast/core/impl/buffers_prefix.hpp index daffa8b9..a1623186 100644 --- a/include/boost/beast/core/impl/buffers_prefix.hpp +++ b/include/boost/beast/core/impl/buffers_prefix.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_IMPL_BUFFERS_PREFIX_HPP #define BOOST_BEAST_IMPL_BUFFERS_PREFIX_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/core/impl/buffers_suffix.hpp b/include/boost/beast/core/impl/buffers_suffix.hpp index 748a07ed..670689b9 100644 --- a/include/boost/beast/core/impl/buffers_suffix.hpp +++ b/include/boost/beast/core/impl/buffers_suffix.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_IMPL_BUFFERS_SUFFIX_HPP #define BOOST_BEAST_IMPL_BUFFERS_SUFFIX_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/core/impl/multi_buffer.hpp b/include/boost/beast/core/impl/multi_buffer.hpp index ea9ec293..aa320ddf 100644 --- a/include/boost/beast/core/impl/multi_buffer.hpp +++ b/include/boost/beast/core/impl/multi_buffer.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_IMPL_MULTI_BUFFER_HPP #define BOOST_BEAST_IMPL_MULTI_BUFFER_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/core/make_printable.hpp b/include/boost/beast/core/make_printable.hpp index 9dafcee4..08f690ea 100644 --- a/include/boost/beast/core/make_printable.hpp +++ b/include/boost/beast/core/make_printable.hpp @@ -11,7 +11,7 @@ #define BOOST_BEAST_MAKE_PRINTABLE_HPP #include -#include +#include #include #include diff --git a/include/boost/beast/http/basic_dynamic_body.hpp b/include/boost/beast/http/basic_dynamic_body.hpp index e64e2fff..f9d908c5 100644 --- a/include/boost/beast/http/basic_dynamic_body.hpp +++ b/include/boost/beast/http/basic_dynamic_body.hpp @@ -11,7 +11,7 @@ #define BOOST_BEAST_HTTP_BASIC_DYNAMIC_BODY_HPP #include -#include +#include #include #include #include diff --git a/include/boost/beast/http/buffer_body.hpp b/include/boost/beast/http/buffer_body.hpp index 6d8bc10d..2cc17b92 100644 --- a/include/boost/beast/http/buffer_body.hpp +++ b/include/boost/beast/http/buffer_body.hpp @@ -11,7 +11,7 @@ #define BOOST_BEAST_HTTP_BUFFER_BODY_HPP #include -#include +#include #include #include #include diff --git a/include/boost/beast/http/impl/basic_parser.hpp b/include/boost/beast/http/impl/basic_parser.hpp index 6303439d..cde1047b 100644 --- a/include/boost/beast/http/impl/basic_parser.hpp +++ b/include/boost/beast/http/impl/basic_parser.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_HTTP_IMPL_BASIC_PARSER_HPP #define BOOST_BEAST_HTTP_IMPL_BASIC_PARSER_HPP -#include +#include #include #include diff --git a/include/boost/beast/http/impl/basic_parser.ipp b/include/boost/beast/http/impl/basic_parser.ipp index ae329f71..3d8670e4 100644 --- a/include/boost/beast/http/impl/basic_parser.ipp +++ b/include/boost/beast/http/impl/basic_parser.ipp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/include/boost/beast/http/impl/chunk_encode.hpp b/include/boost/beast/http/impl/chunk_encode.hpp index 032b3121..dcb46134 100644 --- a/include/boost/beast/http/impl/chunk_encode.hpp +++ b/include/boost/beast/http/impl/chunk_encode.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_HTTP_IMPL_CHUNK_ENCODE_HPP #define BOOST_BEAST_HTTP_IMPL_CHUNK_ENCODE_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/http/impl/serializer.hpp b/include/boost/beast/http/impl/serializer.hpp index e059c027..c44d31c0 100644 --- a/include/boost/beast/http/impl/serializer.hpp +++ b/include/boost/beast/http/impl/serializer.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_HTTP_IMPL_SERIALIZER_HPP #define BOOST_BEAST_HTTP_IMPL_SERIALIZER_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/http/span_body.hpp b/include/boost/beast/http/span_body.hpp index 72bad0eb..41fafd42 100644 --- a/include/boost/beast/http/span_body.hpp +++ b/include/boost/beast/http/span_body.hpp @@ -11,7 +11,7 @@ #define BOOST_BEAST_HTTP_SPAN_BODY_HPP #include -#include +#include #include #include #include diff --git a/include/boost/beast/http/string_body.hpp b/include/boost/beast/http/string_body.hpp index 121a718a..9076ed8a 100644 --- a/include/boost/beast/http/string_body.hpp +++ b/include/boost/beast/http/string_body.hpp @@ -11,7 +11,7 @@ #define BOOST_BEAST_HTTP_STRING_BODY_HPP #include -#include +#include #include #include #include diff --git a/include/boost/beast/http/vector_body.hpp b/include/boost/beast/http/vector_body.hpp index 78cf637f..94539a56 100644 --- a/include/boost/beast/http/vector_body.hpp +++ b/include/boost/beast/http/vector_body.hpp @@ -11,7 +11,7 @@ #define BOOST_BEAST_HTTP_VECTOR_BODY_HPP #include -#include +#include #include #include #include diff --git a/include/boost/beast/websocket/detail/frame.hpp b/include/boost/beast/websocket/detail/frame.hpp index 0f9be02e..c9d21950 100644 --- a/include/boost/beast/websocket/detail/frame.hpp +++ b/include/boost/beast/websocket/detail/frame.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_WEBSOCKET_DETAIL_FRAME_HPP #define BOOST_BEAST_WEBSOCKET_DETAIL_FRAME_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/websocket/detail/impl_base.hpp b/include/boost/beast/websocket/detail/impl_base.hpp index 5ac308d8..1e4e4bb9 100644 --- a/include/boost/beast/websocket/detail/impl_base.hpp +++ b/include/boost/beast/websocket/detail/impl_base.hpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/include/boost/beast/websocket/impl/accept.hpp b/include/boost/beast/websocket/impl/accept.hpp index fb1c33f4..dbde7737 100644 --- a/include/boost/beast/websocket/impl/accept.hpp +++ b/include/boost/beast/websocket/impl/accept.hpp @@ -18,7 +18,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/include/boost/beast/websocket/impl/read.hpp b/include/boost/beast/websocket/impl/read.hpp index dac24146..2ef16eb8 100644 --- a/include/boost/beast/websocket/impl/read.hpp +++ b/include/boost/beast/websocket/impl/read.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_WEBSOCKET_IMPL_READ_HPP #define BOOST_BEAST_WEBSOCKET_IMPL_READ_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/websocket/impl/stream.hpp b/include/boost/beast/websocket/impl/stream.hpp index 4de523f6..c3ebf122 100644 --- a/include/boost/beast/websocket/impl/stream.hpp +++ b/include/boost/beast/websocket/impl/stream.hpp @@ -10,7 +10,7 @@ #ifndef BOOST_BEAST_WEBSOCKET_IMPL_STREAM_HPP #define BOOST_BEAST_WEBSOCKET_IMPL_STREAM_HPP -#include +#include #include #include #include diff --git a/include/boost/beast/websocket/impl/write.hpp b/include/boost/beast/websocket/impl/write.hpp index 2da69efb..7186eab3 100644 --- a/include/boost/beast/websocket/impl/write.hpp +++ b/include/boost/beast/websocket/impl/write.hpp @@ -13,7 +13,7 @@ #include #include #include -#include +#include #include #include #include diff --git a/test/beast/core/CMakeLists.txt b/test/beast/core/CMakeLists.txt index bf0dbd01..d76d54ef 100644 --- a/test/beast/core/CMakeLists.txt +++ b/test/beast/core/CMakeLists.txt @@ -34,7 +34,6 @@ add_executable (tests-beast-core async_base.cpp basic_stream.cpp bind_handler.cpp - buffer_size.cpp buffer_traits.cpp buffered_read_stream.cpp buffers_adapter.cpp diff --git a/test/beast/core/Jamfile b/test/beast/core/Jamfile index f3175efd..9f61acc4 100644 --- a/test/beast/core/Jamfile +++ b/test/beast/core/Jamfile @@ -22,7 +22,6 @@ local SOURCES = async_base.cpp basic_stream.cpp bind_handler.cpp - buffer_size.cpp buffer_traits.cpp buffered_read_stream.cpp buffers_adapter.cpp diff --git a/test/beast/core/buffer_size.cpp b/test/beast/core/buffer_size.cpp deleted file mode 100644 index 793e6595..00000000 --- a/test/beast/core/buffer_size.cpp +++ /dev/null @@ -1,98 +0,0 @@ -// -// Copyright (c) 2016-2019 Vinnie Falco (vinnie dot falco at gmail dot com) -// -// Distributed under the Boost Software License, Version 1.0. (See accompanying -// file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -// -// Official repository: https://github.com/boostorg/beast -// - -// Test that header file is self-contained. -#include - -#include -#include - -namespace boost { -namespace beast { - -namespace { - -struct sequence -{ - struct value_type - { - operator net::const_buffer() const noexcept - { - return {"Hello, world!", 13}; - } - }; - - using const_iterator = value_type const*; - - const_iterator begin() const noexcept - { - return &v_; - } - - const_iterator end() const noexcept - { - return begin() + 1; - } - -private: - value_type v_; -}; - -struct not_sequence -{ -}; - -} // (anon) - -class buffer_size_test : public beast::unit_test::suite -{ -public: - void - testJavadocs() - { - pass(); - } - - void - testFunction() - { - BEAST_EXPECT(buffer_size( - net::const_buffer("Hello, world!", 13)) == 13); - - BEAST_EXPECT(buffer_size( - net::mutable_buffer{}) == 0); - - { - sequence s; - BEAST_EXPECT(buffer_size(s) == 13); - } - - { - std::array s({{ - net::const_buffer("Hello, world!", 13), - net::const_buffer("Hello, world!", 13)}}); - BEAST_EXPECT(buffer_size(s) == 26); - } - - BOOST_STATIC_ASSERT(! detail::is_invocable< - detail::buffer_size_impl, - std::size_t(not_sequence const&)>::value); - } - - void run() override - { - testFunction(); - testJavadocs(); - } -}; - -BEAST_DEFINE_TESTSUITE(beast,core,buffer_size); - -} // beast -} // boost diff --git a/test/beast/core/buffer_traits.cpp b/test/beast/core/buffer_traits.cpp index 8c8cbffd..72f03857 100644 --- a/test/beast/core/buffer_traits.cpp +++ b/test/beast/core/buffer_traits.cpp @@ -11,11 +11,46 @@ #include #include +#include #include namespace boost { namespace beast { +namespace { + +struct sequence +{ + struct value_type + { + operator net::const_buffer() const noexcept + { + return {"Hello, world!", 13}; + } + }; + + using const_iterator = value_type const*; + + const_iterator begin() const noexcept + { + return &v_; + } + + const_iterator end() const noexcept + { + return begin() + 1; + } + +private: + value_type v_; +}; + +struct not_sequence +{ +}; + +} // (anon) + class buffer_traits_test : public beast::unit_test::suite { public: @@ -168,9 +203,36 @@ public: pass(); } + void + testFunction() + { + BEAST_EXPECT(buffer_size( + net::const_buffer("Hello, world!", 13)) == 13); + + BEAST_EXPECT(buffer_size( + net::mutable_buffer{}) == 0); + + { + sequence s; + BEAST_EXPECT(buffer_size(s) == 13); + } + + { + std::array s({{ + net::const_buffer("Hello, world!", 13), + net::const_buffer("Hello, world!", 13)}}); + BEAST_EXPECT(buffer_size(s) == 26); + } + + BOOST_STATIC_ASSERT(! detail::is_invocable< + detail::buffer_size_impl, + std::size_t(not_sequence const&)>::value); + } + void run() override { testJavadocs(); + testFunction(); } }; diff --git a/test/beast/core/buffers_adaptor.cpp b/test/beast/core/buffers_adaptor.cpp index b531b741..1fdae985 100644 --- a/test/beast/core/buffers_adaptor.cpp +++ b/test/beast/core/buffers_adaptor.cpp @@ -12,7 +12,7 @@ #include "test_buffer.hpp" -#include +#include #include #include #include diff --git a/test/beast/core/buffers_cat.cpp b/test/beast/core/buffers_cat.cpp index 3906857b..37a9b82c 100644 --- a/test/beast/core/buffers_cat.cpp +++ b/test/beast/core/buffers_cat.cpp @@ -13,7 +13,7 @@ #include "test_buffer.hpp" #include -#include +#include #include #include #include diff --git a/test/beast/core/buffers_prefix.cpp b/test/beast/core/buffers_prefix.cpp index e74f7372..4a92c1ba 100644 --- a/test/beast/core/buffers_prefix.cpp +++ b/test/beast/core/buffers_prefix.cpp @@ -12,7 +12,7 @@ #include "test_buffer.hpp" -#include +#include #include #include #include diff --git a/test/beast/core/buffers_suffix.cpp b/test/beast/core/buffers_suffix.cpp index cb798a41..aab11c90 100644 --- a/test/beast/core/buffers_suffix.cpp +++ b/test/beast/core/buffers_suffix.cpp @@ -12,7 +12,7 @@ #include "test_buffer.hpp" -#include +#include #include #include #include diff --git a/test/beast/core/flat_static_buffer.cpp b/test/beast/core/flat_static_buffer.cpp index a175e271..28a20d6b 100644 --- a/test/beast/core/flat_static_buffer.cpp +++ b/test/beast/core/flat_static_buffer.cpp @@ -12,7 +12,7 @@ #include "test_buffer.hpp" -#include +#include #include #include #include diff --git a/test/beast/core/make_printable.cpp b/test/beast/core/make_printable.cpp index 962dfe23..b2d9d7ba 100644 --- a/test/beast/core/make_printable.cpp +++ b/test/beast/core/make_printable.cpp @@ -11,7 +11,7 @@ #include #include -#include +#include #include #include diff --git a/test/beast/core/multi_buffer.cpp b/test/beast/core/multi_buffer.cpp index 376b4aaa..14127bc2 100644 --- a/test/beast/core/multi_buffer.cpp +++ b/test/beast/core/multi_buffer.cpp @@ -12,7 +12,7 @@ #include "test_buffer.hpp" -#include +#include #include #include #include diff --git a/test/beast/core/static_buffer.cpp b/test/beast/core/static_buffer.cpp index 703e7e24..4651d928 100644 --- a/test/beast/core/static_buffer.cpp +++ b/test/beast/core/static_buffer.cpp @@ -12,7 +12,7 @@ #include "test_buffer.hpp" -#include +#include #include #include #include diff --git a/test/beast/core/test_buffer.hpp b/test/beast/core/test_buffer.hpp index c5cfdc5c..f1960bc6 100644 --- a/test/beast/core/test_buffer.hpp +++ b/test/beast/core/test_buffer.hpp @@ -12,7 +12,6 @@ #include #include -#include #include #include #include diff --git a/test/beast/http/basic_parser.cpp b/test/beast/http/basic_parser.cpp index b3f43fa2..9f4ef936 100644 --- a/test/beast/http/basic_parser.cpp +++ b/test/beast/http/basic_parser.cpp @@ -13,7 +13,7 @@ #include "message_fuzz.hpp" #include "test_parser.hpp" -#include +#include #include #include #include diff --git a/test/beast/http/file_body.cpp b/test/beast/http/file_body.cpp index f3e25649..0b6053f0 100644 --- a/test/beast/http/file_body.cpp +++ b/test/beast/http/file_body.cpp @@ -10,7 +10,7 @@ // Test that header file is self-contained. #include -#include +#include #include #include #include diff --git a/test/beast/http/parser.cpp b/test/beast/http/parser.cpp index 6b0060e1..513e7257 100644 --- a/test/beast/http/parser.cpp +++ b/test/beast/http/parser.cpp @@ -14,7 +14,7 @@ #include #include -#include +#include #include #include #include diff --git a/test/beast/http/serializer.cpp b/test/beast/http/serializer.cpp index 0cc81b23..b791f18c 100644 --- a/test/beast/http/serializer.cpp +++ b/test/beast/http/serializer.cpp @@ -10,7 +10,7 @@ // Test that header file is self-contained. #include -#include +#include #include #include diff --git a/test/beast/http/span_body.cpp b/test/beast/http/span_body.cpp index ee3ecf34..d4f8e6f4 100644 --- a/test/beast/http/span_body.cpp +++ b/test/beast/http/span_body.cpp @@ -10,7 +10,7 @@ // Test that header file is self-contained. #include -#include +#include #include #include diff --git a/test/beast/websocket/test.hpp b/test/beast/websocket/test.hpp index 3161ad5c..a5508b26 100644 --- a/test/beast/websocket/test.hpp +++ b/test/beast/websocket/test.hpp @@ -11,7 +11,7 @@ #define BEAST_TEST_WEBSOCKET_TEST_HPP #include -#include +#include #include #include #include diff --git a/test/bench/parser/bench_parser.cpp b/test/bench/parser/bench_parser.cpp index a6d67f77..719fa6d3 100644 --- a/test/bench/parser/bench_parser.cpp +++ b/test/bench/parser/bench_parser.cpp @@ -12,7 +12,7 @@ #include "test/beast/http/message_fuzz.hpp" #include -#include +#include #include #include #include diff --git a/test/doc/exemplars.cpp b/test/doc/exemplars.cpp index db71da75..73e9d6be 100644 --- a/test/doc/exemplars.cpp +++ b/test/doc/exemplars.cpp @@ -7,7 +7,7 @@ // Official repository: https://github.com/boostorg/beast // -#include +#include #include #include #include