123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389 |
- //
- // 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_HTTP_IMPL_RFC7230_HPP
- #define BOOST_BEAST_HTTP_IMPL_RFC7230_HPP
- #include <boost/beast/http/detail/rfc7230.hpp>
- #include <iterator>
- namespace boost {
- namespace beast {
- namespace http {
- class param_list::const_iterator
- {
- using iter_type = string_view::const_iterator;
- std::string s_;
- detail::param_iter pi_;
- public:
- using value_type = param_list::value_type;
- using pointer = value_type const*;
- using reference = value_type const&;
- using difference_type = std::ptrdiff_t;
- using iterator_category = std::input_iterator_tag;
- const_iterator() = default;
- bool
- operator==(const_iterator const& other) const
- {
- return
- other.pi_.it == pi_.it &&
- other.pi_.last == pi_.last &&
- other.pi_.first == pi_.first;
- }
- bool
- operator!=(const_iterator const& other) const
- {
- return !(*this == other);
- }
- reference
- operator*() const
- {
- return pi_.v;
- }
- pointer
- operator->() const
- {
- return &*(*this);
- }
- const_iterator&
- operator++()
- {
- increment();
- return *this;
- }
- const_iterator
- operator++(int)
- {
- auto temp = *this;
- ++(*this);
- return temp;
- }
- private:
- friend class param_list;
- const_iterator(iter_type first, iter_type last)
- {
- pi_.it = first;
- pi_.first = first;
- pi_.last = last;
- increment();
- }
- BOOST_BEAST_DECL
- static
- std::string
- unquote(string_view sr);
- BOOST_BEAST_DECL
- void
- increment();
- };
- inline
- auto
- param_list::
- begin() const ->
- const_iterator
- {
- return const_iterator{s_.begin(), s_.end()};
- }
- inline
- auto
- param_list::
- end() const ->
- const_iterator
- {
- return const_iterator{s_.end(), s_.end()};
- }
- inline
- auto
- param_list::
- cbegin() const ->
- const_iterator
- {
- return const_iterator{s_.begin(), s_.end()};
- }
- inline
- auto
- param_list::
- cend() const ->
- const_iterator
- {
- return const_iterator{s_.end(), s_.end()};
- }
- //------------------------------------------------------------------------------
- class ext_list::const_iterator
- {
- ext_list::value_type v_;
- iter_type it_;
- iter_type first_;
- iter_type last_;
- public:
- using value_type = ext_list::value_type;
- using pointer = value_type const*;
- using reference = value_type const&;
- using difference_type = std::ptrdiff_t;
- using iterator_category = std::forward_iterator_tag;
- const_iterator() = default;
- bool
- operator==(const_iterator const& other) const
- {
- return
- other.it_ == it_ &&
- other.first_ == first_ &&
- other.last_ == last_;
- }
- bool
- operator!=(const_iterator const& other) const
- {
- return !(*this == other);
- }
- reference
- operator*() const
- {
- return v_;
- }
- pointer
- operator->() const
- {
- return &*(*this);
- }
- const_iterator&
- operator++()
- {
- increment();
- return *this;
- }
- const_iterator
- operator++(int)
- {
- auto temp = *this;
- ++(*this);
- return temp;
- }
- private:
- friend class ext_list;
- const_iterator(iter_type begin, iter_type end)
- {
- it_ = begin;
- first_ = begin;
- last_ = end;
- increment();
- }
- BOOST_BEAST_DECL
- void
- increment();
- };
- inline
- auto
- ext_list::
- begin() const ->
- const_iterator
- {
- return const_iterator{s_.begin(), s_.end()};
- }
- inline
- auto
- ext_list::
- end() const ->
- const_iterator
- {
- return const_iterator{s_.end(), s_.end()};
- }
- inline
- auto
- ext_list::
- cbegin() const ->
- const_iterator
- {
- return const_iterator{s_.begin(), s_.end()};
- }
- inline
- auto
- ext_list::
- cend() const ->
- const_iterator
- {
- return const_iterator{s_.end(), s_.end()};
- }
- //------------------------------------------------------------------------------
- class token_list::const_iterator
- {
- token_list::value_type v_;
- iter_type it_;
- iter_type first_;
- iter_type last_;
- public:
- using value_type = token_list::value_type;
- using pointer = value_type const*;
- using reference = value_type const&;
- using difference_type = std::ptrdiff_t;
- using iterator_category = std::forward_iterator_tag;
- const_iterator() = default;
- bool
- operator==(const_iterator const& other) const
- {
- return
- other.it_ == it_ &&
- other.first_ == first_ &&
- other.last_ == last_;
- }
- bool
- operator!=(const_iterator const& other) const
- {
- return !(*this == other);
- }
- reference
- operator*() const
- {
- return v_;
- }
- pointer
- operator->() const
- {
- return &*(*this);
- }
- const_iterator&
- operator++()
- {
- increment();
- return *this;
- }
- const_iterator
- operator++(int)
- {
- auto temp = *this;
- ++(*this);
- return temp;
- }
- private:
- friend class token_list;
- const_iterator(iter_type begin, iter_type end)
- {
- it_ = begin;
- first_ = begin;
- last_ = end;
- increment();
- }
- BOOST_BEAST_DECL
- void
- increment();
- };
- inline
- auto
- token_list::
- begin() const ->
- const_iterator
- {
- return const_iterator{s_.begin(), s_.end()};
- }
- inline
- auto
- token_list::
- end() const ->
- const_iterator
- {
- return const_iterator{s_.end(), s_.end()};
- }
- inline
- auto
- token_list::
- cbegin() const ->
- const_iterator
- {
- return const_iterator{s_.begin(), s_.end()};
- }
- inline
- auto
- token_list::
- cend() const ->
- const_iterator
- {
- return const_iterator{s_.end(), s_.end()};
- }
- template<class Policy>
- bool
- validate_list(detail::basic_parsed_list<
- Policy> const& list)
- {
- auto const last = list.end();
- auto it = list.begin();
- if(it.error())
- return false;
- while(it != last)
- {
- ++it;
- if(it.error())
- return false;
- if(it == last)
- break;
- }
- return true;
- }
- } // http
- } // beast
- } // boost
- #ifdef BOOST_BEAST_HEADER_ONLY
- #include <boost/beast/http/impl/rfc7230.ipp>
- #endif
- #endif
|