123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 |
- //
- // 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_BUFFERS_RANGE_ADAPTOR_HPP
- #define BOOST_BEAST_DETAIL_BUFFERS_RANGE_ADAPTOR_HPP
- #include <boost/beast/core/buffer_traits.hpp>
- #include <iterator>
- #include <type_traits>
- namespace boost {
- namespace beast {
- namespace detail {
- template<class BufferSequence>
- class buffers_range_adaptor
- {
- BufferSequence b_;
- public:
- #if BOOST_BEAST_DOXYGEN
- using value_type = __see_below__;
- #else
- using value_type = buffers_type<BufferSequence>;
- #endif
- class const_iterator
- {
- friend class buffers_range_adaptor;
- using iter_type =
- buffers_iterator_type<BufferSequence>;
- iter_type it_{};
- const_iterator(iter_type const& it)
- : it_(it)
- {
- }
- public:
- using value_type = typename
- buffers_range_adaptor::value_type;
- using pointer = value_type const*;
- using reference = value_type;
- using difference_type = std::ptrdiff_t;
- using iterator_category =
- std::bidirectional_iterator_tag;
- const_iterator() = default;
- bool
- operator==(const_iterator const& other) const
- {
- return it_ == other.it_;
- }
- bool
- operator!=(const_iterator const& other) const
- {
- return !(*this == other);
- }
- reference
- operator*() const
- {
- return *it_;
- }
- pointer
- operator->() const = delete;
- const_iterator&
- operator++()
- {
- ++it_;
- return *this;
- }
- const_iterator
- operator++(int)
- {
- auto temp = *this;
- ++(*this);
- return temp;
- }
- const_iterator&
- operator--()
- {
- --it_;
- return *this;
- }
- const_iterator
- operator--(int)
- {
- auto temp = *this;
- --(*this);
- return temp;
- }
- };
- explicit
- buffers_range_adaptor(BufferSequence const& b)
- : b_(b)
- {
- }
- const_iterator
- begin() const noexcept
- {
- return {net::buffer_sequence_begin(b_)};
- }
- const_iterator
- end() const noexcept
- {
- return {net::buffer_sequence_end(b_)};
- }
- };
- } // detail
- } // beast
- } // boost
- #endif
|