Line data Source code
1 : // 2 : // Copyright (c) 2021 Vinnie Falco (vinnie.falco@gmail.com) 3 : // 4 : // Distributed under the Boost Software License, Version 1.0. (See accompanying 5 : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) 6 : // 7 : // Official repository: https://github.com/cppalliance/http_proto 8 : // 9 : 10 : #ifndef BOOST_HTTP_PROTO_FIELDS_VIEW_HPP 11 : #define BOOST_HTTP_PROTO_FIELDS_VIEW_HPP 12 : 13 : #include <boost/http_proto/detail/config.hpp> 14 : #include <boost/http_proto/fields_view_base.hpp> 15 : #include <boost/assert.hpp> 16 : 17 : namespace boost { 18 : namespace http_proto { 19 : 20 : /** A read-only, forward range of HTTP fields 21 : */ 22 : class BOOST_SYMBOL_VISIBLE 23 : fields_view 24 : : public fields_view_base 25 : { 26 : friend class fields; 27 : 28 : #ifndef BOOST_HTTP_PROTO_DOCS 29 : protected: 30 : #endif 31 : 32 : explicit 33 4 : fields_view( 34 : detail::header const* ph) noexcept 35 4 : : fields_view_base(ph) 36 : { 37 4 : BOOST_ASSERT(ph_->kind == 38 : detail::kind::fields); 39 4 : } 40 : 41 : public: 42 : /** Constructor 43 : 44 : Default constructed field views 45 : have a zero size. 46 : */ 47 6 : fields_view() noexcept 48 6 : : fields_view_base( 49 : detail::header::get_default( 50 6 : detail::kind::fields)) 51 : { 52 6 : } 53 : 54 : /** Constructor 55 : */ 56 : fields_view( 57 : fields_view const&) noexcept = default; 58 : 59 : /** Assignment 60 : */ 61 : fields_view& 62 : operator=( 63 : fields_view const&) noexcept = default; 64 : 65 : //-------------------------------------------- 66 : 67 : /** Swap this with another instance 68 : */ 69 : void 70 : swap(fields_view& other) noexcept 71 : { 72 : auto ph = ph_; 73 : ph_ = other.ph_; 74 : other.ph_ = ph; 75 : } 76 : 77 : /** Swap two instances 78 : */ 79 : friend 80 : void 81 : swap( 82 : fields_view& t0, 83 : fields_view& t1) noexcept 84 : { 85 : t0.swap(t1); 86 : } 87 : }; 88 : 89 : } // http_proto 90 : } // boost 91 : 92 : #endif