diff --git a/CHANGELOG.md b/CHANGELOG.md index 84dc9247..9b0394f4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,6 +3,7 @@ Version 54: * static_buffer coverage * flat_buffer coverage * multi_buffer coverage +* consuming_buffers members and coverage -------------------------------------------------------------------------------- diff --git a/include/beast/core/consuming_buffers.hpp b/include/beast/core/consuming_buffers.hpp index a51e529c..8d80fdd6 100644 --- a/include/beast/core/consuming_buffers.hpp +++ b/include/beast/core/consuming_buffers.hpp @@ -80,21 +80,15 @@ public: #endif - /// Default constructor. + /// Constructor consuming_buffers(); - /// Move constructor. + /// Move constructor consuming_buffers(consuming_buffers&&); - /// Copy constructor. + /// Copy constructor consuming_buffers(consuming_buffers const&); - /// Move assignment. - consuming_buffers& operator=(consuming_buffers&&); - - /// Copy assignment. - consuming_buffers& operator=(consuming_buffers const&); - /** Construct to represent a buffer sequence. A copy of the buffer sequence is made. Ownership of the @@ -110,6 +104,12 @@ public: template consuming_buffers(boost::in_place_init_t, Args&&... args); + /// Move assignment + consuming_buffers& operator=(consuming_buffers&&); + + /// Copy assignmen + consuming_buffers& operator=(consuming_buffers const&); + /// Get a bidirectional iterator to the first element. const_iterator begin() const; diff --git a/include/beast/core/impl/consuming_buffers.ipp b/include/beast/core/impl/consuming_buffers.ipp index d22ddf2b..48689a6b 100644 --- a/include/beast/core/impl/consuming_buffers.ipp +++ b/include/beast/core/impl/consuming_buffers.ipp @@ -17,13 +17,13 @@ namespace beast { -template -class consuming_buffers::const_iterator +template +class consuming_buffers::const_iterator { - friend class consuming_buffers; + friend class consuming_buffers; using iter_type = - typename BufferSequence::const_iterator; + typename Buffers::const_iterator; iter_type it_; consuming_buffers const* b_ = nullptr; @@ -109,16 +109,18 @@ private: } }; -template -consuming_buffers:: +//------------------------------------------------------------------------------ + +template +consuming_buffers:: consuming_buffers() : begin_(bs_.begin()) , end_(bs_.end()) { } -template -consuming_buffers:: +template +consuming_buffers:: consuming_buffers(consuming_buffers&& other) : consuming_buffers(std::move(other), std::distance( @@ -126,8 +128,8 @@ consuming_buffers(consuming_buffers&& other) { } -template -consuming_buffers:: +template +consuming_buffers:: consuming_buffers(consuming_buffers const& other) : consuming_buffers(other, std::distance( @@ -135,9 +137,36 @@ consuming_buffers(consuming_buffers const& other) { } -template +template +consuming_buffers:: +consuming_buffers(Buffers const& bs) + : bs_(bs) + , begin_(bs_.begin()) +{ + static_assert( + is_const_buffer_sequence::value|| + is_mutable_buffer_sequence::value, + "BufferSequence requirements not met"); +} + +template +template +consuming_buffers:: +consuming_buffers(boost::in_place_init_t, Args&&... args) + : bs_(std::forward(args)...) + , begin_(bs_.begin()) + , end_(bs_.end()) +{ + static_assert(sizeof...(Args) > 0, + "Missing constructor arguments"); + static_assert( + std::is_constructible::value, + "Buffers not constructible from arguments"); +} + +template auto -consuming_buffers:: +consuming_buffers:: operator=(consuming_buffers&& other) -> consuming_buffers& { @@ -149,9 +178,9 @@ operator=(consuming_buffers&& other) -> return *this; } -template +template auto -consuming_buffers:: +consuming_buffers:: operator=(consuming_buffers const& other) -> consuming_buffers& { @@ -163,56 +192,29 @@ operator=(consuming_buffers const& other) -> return *this; } -template -consuming_buffers:: -consuming_buffers(BufferSequence const& bs) - : bs_(bs) - , begin_(bs_.begin()) -{ - static_assert( - is_const_buffer_sequence::value|| - is_mutable_buffer_sequence::value, - "BufferSequence requirements not met"); -} - -template -template -consuming_buffers:: -consuming_buffers(boost::in_place_init_t, Args&&... args) - : bs_(std::forward(args)...) - , begin_(bs_.begin()) - , end_(bs_.end()) -{ - static_assert(sizeof...(Args) > 0, - "Missing constructor arguments"); - static_assert( - std::is_constructible::value, - "BufferSequence is not constructible from arguments"); -} - -template +template inline auto -consuming_buffers:: +consuming_buffers:: begin() const -> const_iterator { return const_iterator{*this, begin_}; } -template +template inline auto -consuming_buffers:: +consuming_buffers:: end() const -> const_iterator { return const_iterator{*this, bs_.end()}; } -template +template void -consuming_buffers:: +consuming_buffers:: consume(std::size_t n) { using boost::asio::buffer_size; diff --git a/test/core/consuming_buffers.cpp b/test/core/consuming_buffers.cpp index 17e3e843..64a96770 100644 --- a/test/core/consuming_buffers.cpp +++ b/test/core/consuming_buffers.cpp @@ -9,6 +9,7 @@ #include #include "buffer_test.hpp" + #include #include #include @@ -20,15 +21,6 @@ namespace beast { class consuming_buffers_test : public beast::unit_test::suite { public: - template - static - std::string - to_string(ConstBufferSequence const& bs) - { - return boost::lexical_cast< - std::string>(buffers(bs)); - } - template static consuming_buffers @@ -44,6 +36,7 @@ public: bool eq(Buffers1 const& lhs, Buffers2 const& rhs) { + using namespace test; return to_string(lhs) == to_string(rhs); } @@ -57,9 +50,24 @@ public: BEAST_EXPECT(test::size_rev_post(buffers) == n); } + void + testMembers() + { + char buf[12]; + consuming_buffers< + boost::asio::const_buffers_1> cb1{ + boost::in_place_init, buf, sizeof(buf)}; + consuming_buffers< + boost::asio::const_buffers_1> cb2{ + boost::in_place_init, nullptr, 0}; + cb2 = cb1; + cb1 = std::move(cb2); + } + void testMatrix() { + using namespace test; using boost::asio::buffer; using boost::asio::const_buffer; char buf[12]; @@ -104,6 +112,7 @@ public: void testDefaultCtor() { + using namespace test; class test_buffer : public boost::asio::const_buffers_1 { public: @@ -120,6 +129,7 @@ public: void testInPlace() { + using namespace test; consuming_buffers> cb( @@ -157,6 +167,7 @@ public: void run() override { + testMembers(); testMatrix(); testDefaultCtor(); testInPlace();