summaryrefslogtreecommitdiff
path: root/boost/beast/core/impl/buffers_cat.ipp
diff options
context:
space:
mode:
Diffstat (limited to 'boost/beast/core/impl/buffers_cat.ipp')
-rw-r--r--boost/beast/core/impl/buffers_cat.ipp389
1 files changed, 0 insertions, 389 deletions
diff --git a/boost/beast/core/impl/buffers_cat.ipp b/boost/beast/core/impl/buffers_cat.ipp
deleted file mode 100644
index 9de1187f36..0000000000
--- a/boost/beast/core/impl/buffers_cat.ipp
+++ /dev/null
@@ -1,389 +0,0 @@
-//
-// Copyright (c) 2016-2017 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_CAT_IPP
-#define BOOST_BEAST_IMPL_BUFFERS_CAT_IPP
-
-#include <boost/beast/core/detail/type_traits.hpp>
-#include <boost/beast/core/detail/variant.hpp>
-#include <boost/asio/buffer.hpp>
-#include <boost/throw_exception.hpp>
-#include <cstdint>
-#include <iterator>
-#include <new>
-#include <stdexcept>
-#include <tuple>
-#include <utility>
-
-namespace boost {
-namespace beast {
-
-template<class... Bn>
-class buffers_cat_view<Bn...>::const_iterator
-{
- // VFALCO The logic to skip empty sequences fails
- // if there is just one buffer in the list.
- static_assert(sizeof...(Bn) >= 2,
- "A minimum of two sequences are required");
-
- struct past_end
- {
- char unused = 0; // make g++8 happy
-
- operator bool() const noexcept
- {
- return true;
- }
- };
-
- std::tuple<Bn...> const* bn_ = nullptr;
- detail::variant<typename
- detail::buffer_sequence_iterator<Bn>::type...,
- past_end> it_;
-
- friend class buffers_cat_view<Bn...>;
-
- template<std::size_t I>
- using C = std::integral_constant<std::size_t, I>;
-
-public:
- using value_type = typename
- detail::common_buffers_type<Bn...>::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;
- const_iterator(const_iterator&& other) = default;
- const_iterator(const_iterator const& other) = default;
- const_iterator& operator=(const_iterator&& other) = default;
- const_iterator& operator=(const_iterator const& other) = default;
-
- bool
- operator==(const_iterator const& other) const;
-
- bool
- operator!=(const_iterator const& other) const
- {
- return ! (*this == other);
- }
-
- reference
- operator*() const;
-
- pointer
- operator->() const = delete;
-
- const_iterator&
- operator++();
-
- const_iterator
- operator++(int);
-
- // deprecated
- const_iterator&
- operator--();
-
- // deprecated
- const_iterator
- operator--(int);
-
-private:
- const_iterator(
- std::tuple<Bn...> const& bn, bool at_end);
-
- template<std::size_t I>
- void
- construct(C<I> const&)
- {
- if(boost::asio::buffer_size(
- std::get<I>(*bn_)) != 0)
- {
- it_.template emplace<I+1>(
- boost::asio::buffer_sequence_begin(
- std::get<I>(*bn_)));
- return;
- }
- construct(C<I+1>{});
- }
-
- void
- construct(C<sizeof...(Bn)-1> const&)
- {
- auto constexpr I = sizeof...(Bn)-1;
- it_.template emplace<I+1>(
- boost::asio::buffer_sequence_begin(
- std::get<I>(*bn_)));
- }
-
- void
- construct(C<sizeof...(Bn)> const&)
- {
- // end
- auto constexpr I = sizeof...(Bn);
- it_.template emplace<I+1>();
- }
-
- template<std::size_t I>
- void
- next(C<I> const&)
- {
- if(boost::asio::buffer_size(
- std::get<I>(*bn_)) != 0)
- {
- it_.template emplace<I+1>(
- boost::asio::buffer_sequence_begin(
- std::get<I>(*bn_)));
- return;
- }
- next(C<I+1>{});
- }
-
- void
- next(C<sizeof...(Bn)> const&)
- {
- // end
- auto constexpr I = sizeof...(Bn);
- it_.template emplace<I+1>();
- }
-
- template<std::size_t I>
- void
- prev(C<I> const&)
- {
- if(boost::asio::buffer_size(
- std::get<I>(*bn_)) != 0)
- {
- it_.template emplace<I+1>(
- boost::asio::buffer_sequence_end(
- std::get<I>(*bn_)));
- return;
- }
- prev(C<I-1>{});
- }
-
- void
- prev(C<0> const&)
- {
- auto constexpr I = 0;
- it_.template emplace<I+1>(
- boost::asio::buffer_sequence_end(
- std::get<I>(*bn_)));
- }
-
- template<std::size_t I>
- reference
- dereference(C<I> const&) const
- {
- if(it_.index() == I+1)
- return *it_.template get<I+1>();
- return dereference(C<I+1>{});
- }
-
- [[noreturn]]
- reference
- dereference(C<sizeof...(Bn)> const&) const
- {
- BOOST_THROW_EXCEPTION(std::logic_error{
- "invalid iterator"});
- }
-
- template<std::size_t I>
- void
- increment(C<I> const&)
- {
- if(it_.index() == I+1)
- {
- if(++it_.template get<I+1>() !=
- boost::asio::buffer_sequence_end(
- std::get<I>(*bn_)))
- return;
- return next(C<I+1>{});
- }
- increment(C<I+1>{});
- }
-
- [[noreturn]]
- void
- increment(C<sizeof...(Bn)> const&)
- {
- BOOST_THROW_EXCEPTION(std::logic_error{
- "invalid iterator"});
- }
-
- void
- decrement(C<sizeof...(Bn)> const&)
- {
- auto constexpr I = sizeof...(Bn);
- if(it_.index() == I+1)
- prev(C<I-1>{});
- decrement(C<I-1>{});
- }
-
- template<std::size_t I>
- void
- decrement(C<I> const&)
- {
- if(it_.index() == I+1)
- {
- if(it_.template get<I+1>() !=
- boost::asio::buffer_sequence_begin(
- std::get<I>(*bn_)))
- {
- --it_.template get<I+1>();
- return;
- }
- prev(C<I-1>{});
- }
- decrement(C<I-1>{});
- }
-
- void
- decrement(C<0> const&)
- {
- auto constexpr I = 0;
- if(it_.template get<I+1>() !=
- boost::asio::buffer_sequence_begin(
- std::get<I>(*bn_)))
- {
- --it_.template get<I+1>();
- return;
- }
- BOOST_THROW_EXCEPTION(std::logic_error{
- "invalid iterator"});
- }
-};
-
-//------------------------------------------------------------------------------
-
-template<class... Bn>
-buffers_cat_view<Bn...>::
-const_iterator::
-const_iterator(
- std::tuple<Bn...> const& bn, bool at_end)
- : bn_(&bn)
-{
- if(! at_end)
- construct(C<0>{});
- else
- construct(C<sizeof...(Bn)>{});
-}
-
-template<class... Bn>
-bool
-buffers_cat_view<Bn...>::
-const_iterator::
-operator==(const_iterator const& other) const
-{
- return
- (bn_ == nullptr) ?
- (
- other.bn_ == nullptr ||
- other.it_.index() == sizeof...(Bn)
- ):(
- (other.bn_ == nullptr) ?
- (
- it_.index() == sizeof...(Bn)
- ): (
- bn_ == other.bn_ &&
- it_ == other.it_
- )
- );
-}
-
-template<class... Bn>
-auto
-buffers_cat_view<Bn...>::
-const_iterator::
-operator*() const ->
- reference
-{
- return dereference(C<0>{});
-}
-
-template<class... Bn>
-auto
-buffers_cat_view<Bn...>::
-const_iterator::
-operator++() ->
- const_iterator&
-{
- increment(C<0>{});
- return *this;
-}
-
-template<class... Bn>
-auto
-buffers_cat_view<Bn...>::
-const_iterator::
-operator++(int) ->
- const_iterator
-{
- auto temp = *this;
- ++(*this);
- return temp;
-}
-
-template<class... Bn>
-auto
-buffers_cat_view<Bn...>::
-const_iterator::
-operator--() ->
- const_iterator&
-{
- decrement(C<sizeof...(Bn)>{});
- return *this;
-}
-
-template<class... Bn>
-auto
-buffers_cat_view<Bn...>::
-const_iterator::
-operator--(int) ->
- const_iterator
-{
- auto temp = *this;
- --(*this);
- return temp;
-}
-
-//------------------------------------------------------------------------------
-
-template<class... Bn>
-buffers_cat_view<Bn...>::
-buffers_cat_view(Bn const&... bn)
- : bn_(bn...)
-{
-}
-
-
-template<class... Bn>
-inline
-auto
-buffers_cat_view<Bn...>::begin() const ->
- const_iterator
-{
- return const_iterator{bn_, false};
-}
-
-template<class... Bn>
-inline
-auto
-buffers_cat_view<Bn...>::end() const ->
- const_iterator
-{
- return const_iterator{bn_, true};
-}
-
-} // beast
-} // boost
-
-#endif