/usr/include/boost/beast/core/impl
NameSizeModeActions
async_base.hpp36370644editdlrm
basic_stream.hpp268060644editdlrm
buffered_read_stream.hpp71960644editdlrm
buffers_adaptor.hpp158870644editdlrm
buffers_cat.hpp106250644editdlrm
buffers_prefix.hpp74710644editdlrm
buffers_suffix.hpp49690644editdlrm
error.hpp8580644editdlrm
error.ipp19950644editdlrm
file_posix.ipp68970644editdlrm
file_stdio.ipp60790644editdlrm
file_win32.ipp99720644editdlrm
flat_buffer.hpp119000644editdlrm
flat_static_buffer.hpp10150644editdlrm
flat_static_buffer.ipp17620644editdlrm
flat_stream.hpp77920644editdlrm
multi_buffer.hpp306130644editdlrm
read_size.hpp19890644editdlrm
saved_handler.hpp42940644editdlrm
saved_handler.ipp13910644editdlrm
static_buffer.hpp10390644editdlrm
static_buffer.ipp29580644editdlrm
static_string.hpp143160644editdlrm
string.ipp14440644editdlrm
string_param.hpp21500644editdlrm
Edit: /usr/include/boost/beast/core/impl/buffers_suffix.hpp (4969B)
// // 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_IMPL_BUFFERS_SUFFIX_HPP #define BOOST_BEAST_IMPL_BUFFERS_SUFFIX_HPP #include #include #include #include #include #include #include #include namespace boost { namespace beast { template class buffers_suffix::const_iterator { friend class buffers_suffix; using iter_type = buffers_iterator_type; iter_type it_{}; buffers_suffix const* b_ = nullptr; public: #if BOOST_WORKAROUND(BOOST_MSVC, < 1910) using value_type = typename std::conditional< boost::is_convertible::value_type, net::mutable_buffer>::value, net::mutable_buffer, net::const_buffer>::type; #else using value_type = buffers_type; #endif 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; const_iterator( const_iterator const& other) = default; const_iterator& operator=( const_iterator const& other) = default; bool operator==(const_iterator const& other) const { return b_ == other.b_ && it_ == other.it_; } bool operator!=(const_iterator const& other) const { return !(*this == other); } reference operator*() const { if(it_ == b_->begin_) return value_type(*it_) + b_->skip_; return value_type(*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; } private: const_iterator( buffers_suffix const& b, iter_type it) : it_(it) , b_(&b) { } }; //------------------------------------------------------------------------------ template buffers_suffix:: buffers_suffix() : begin_(net::buffer_sequence_begin(bs_)) { } template buffers_suffix:: buffers_suffix(buffers_suffix const& other) : buffers_suffix(other, std::distance( net::buffer_sequence_begin( other.bs_), other.begin_)) { } template buffers_suffix:: buffers_suffix(Buffers const& bs) : bs_(bs) , begin_(net::buffer_sequence_begin(bs_)) { static_assert( net::is_const_buffer_sequence::value || net::is_mutable_buffer_sequence::value, "BufferSequence type requirements not met"); } template template buffers_suffix:: buffers_suffix(boost::in_place_init_t, Args&&... args) : bs_(std::forward(args)...) , begin_(net::buffer_sequence_begin(bs_)) { static_assert(sizeof...(Args) > 0, "Missing constructor arguments"); static_assert( std::is_constructible::value, "Buffers not constructible from arguments"); } template auto buffers_suffix:: operator=(buffers_suffix const& other) -> buffers_suffix& { auto const dist = std::distance( net::buffer_sequence_begin(other.bs_), other.begin_); bs_ = other.bs_; begin_ = std::next( net::buffer_sequence_begin(bs_), dist); skip_ = other.skip_; return *this; } template auto buffers_suffix:: begin() const -> const_iterator { return const_iterator{*this, begin_}; } template auto buffers_suffix:: end() const -> const_iterator { return const_iterator{*this, net::buffer_sequence_end(bs_)}; } template void buffers_suffix:: consume(std::size_t amount) { auto const end = net::buffer_sequence_end(bs_); for(;amount > 0 && begin_ != end; ++begin_) { auto const len = buffer_bytes(*begin_) - skip_; if(amount < len) { skip_ += amount; break; } amount -= len; skip_ = 0; } } } // beast } // boost #endif