LCOV - code coverage report
Current view: top level - boost/http_proto/response_view.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 18 18
Test Date: 2025-09-21 18:08:14 Functions: 100.0 % 7 7

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2019 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_RESPONSE_VIEW_HPP
      11              : #define BOOST_HTTP_PROTO_RESPONSE_VIEW_HPP
      12              : 
      13              : #include <boost/http_proto/detail/config.hpp>
      14              : #include <boost/http_proto/message_view_base.hpp>
      15              : #include <boost/core/detail/string_view.hpp>
      16              : 
      17              : namespace boost {
      18              : namespace http_proto {
      19              : 
      20              : /** A view to a valid HTTP response.
      21              : 
      22              :     Objects of this type represent a view to
      23              :     a HTTP response container. That is, it acts
      24              :     like a `core::string_view` in terms of
      25              :     ownership. The caller is responsible for
      26              :     ensuring that the lifetime of the underlying
      27              :     buffer extends until it is no
      28              :     longer referenced.
      29              : 
      30              :     @see
      31              :         @ref response,
      32              :         @ref static_response,
      33              :         @ref response_parser,
      34              : */
      35              : class response_view
      36              :     : public message_view_base
      37              : {
      38              :     friend class response_base;
      39              :     friend class response_parser;
      40              : 
      41              :     explicit
      42           63 :     response_view(
      43              :         detail::header const* ph) noexcept
      44           63 :         : fields_view_base(ph)
      45              :     {
      46           63 :         BOOST_ASSERT(ph_->kind ==
      47              :             detail::kind::response);
      48           63 :     }
      49              : 
      50              : public:
      51              : 
      52              :     //--------------------------------------------
      53              :     //
      54              :     // Special Members
      55              :     //
      56              :     //--------------------------------------------
      57              : 
      58              :     /** Constructor.
      59              : 
      60              :         A default-constructed response view refer
      61              :         to a valid HTTP 200 OK response with no
      62              :         headers, which always remains valid.
      63              : 
      64              :         @par Example
      65              :         @code
      66              :         response_view resv;
      67              :         @endcode
      68              : 
      69              :         @par Postconditions
      70              :         @code
      71              :         this->buffer() == "HTTP/1.1 200 OK\r\n\r\n"
      72              :         @endcode
      73              : 
      74              :         @par Complexity
      75              :         Constant.
      76              :     */
      77            4 :     response_view() noexcept
      78            4 :         : fields_view_base(
      79              :             detail::header::get_default(
      80            4 :                 detail::kind::response))
      81              :     {
      82            4 :     }
      83              : 
      84              :     /** Constructor.
      85              : 
      86              :         After construction, both response views
      87              :         reference the same underlying buffer.
      88              :         Ownership is not transferred.
      89              : 
      90              :         @par Postconditions
      91              :         @code
      92              :         this->buffer().data() == other.buffer().data()
      93              :         @endcode
      94              : 
      95              :         @par Complexity
      96              :         Constant.
      97              : 
      98              :         @param other The other view.
      99              :     */
     100            1 :     response_view(
     101              :         response_view const& other) noexcept = default;
     102              : 
     103              :     /** Assignment.
     104              : 
     105              :         After assignment, both response views
     106              :         reference the same underlying buffer.
     107              :         Ownership is not transferred.
     108              : 
     109              :         @par Postconditions
     110              :         @code
     111              :         this->buffer().data() == other.buffer().data()
     112              :         @endcode
     113              : 
     114              :         @par Complexity
     115              :         Constant.
     116              : 
     117              :         @param other The other view.
     118              :         @return A reference to this object.
     119              :     */
     120              :     response_view&
     121            1 :     operator=(
     122              :         response_view const& other) noexcept = default;
     123              : 
     124              :     /** Destructor
     125              : 
     126              :         Any reference, iterators, or other views
     127              :         which reference the same underlying
     128              :         buffer remain valid.
     129              :     */
     130              :     ~response_view() = default;
     131              : 
     132              :     //--------------------------------------------
     133              :     //
     134              :     // Observers
     135              :     //
     136              :     //--------------------------------------------
     137              : 
     138              :     /** Return the reason string
     139              : 
     140              :         This field is obsolete in `HTTP/1.1`
     141              :         and should only be used for display
     142              :         purposes.
     143              :     */
     144              :     core::string_view
     145            4 :     reason() const noexcept
     146              :     {
     147            8 :         return core::string_view(
     148            4 :             ph_->cbuf + 13,
     149            4 :             ph_->prefix - 15);
     150              :     }
     151              : 
     152              :     /** Return the status code.
     153              :     */
     154              :     http_proto::status
     155            4 :     status() const noexcept
     156              :     {
     157            4 :         return ph_->res.status;
     158              :     }
     159              : 
     160              :     /** Return the status code integer.
     161              :     */
     162              :     unsigned short
     163            4 :     status_int() const noexcept
     164              :     {
     165            4 :         return ph_->res.status_int;
     166              :     }
     167              : 
     168              :     //--------------------------------------------
     169              : 
     170              :     /** Swap.
     171              : 
     172              :         Exchanges the view with that of `other`.
     173              :         All iterators and references remain valid.
     174              : 
     175              :         If `this == &other`, this function call has no effect.
     176              : 
     177              :         @par Example
     178              :         @code
     179              :         response r1(status::ok);
     180              :         response r2(status::bad_request);
     181              :         response_view v1 = r1;
     182              :         response_view v2 = r2;
     183              :         v1.swap(v2);
     184              :         assert(v1.buffer() == "HTTP/1.1 400 Bad Request\r\n\r\n" );
     185              :         assert(v2.buffer() == "HTTP/1.1 200 OK\r\n\r\n" );
     186              :         @endcode
     187              : 
     188              :         @par Complexity
     189              :         Constant.
     190              : 
     191              :         @param other The object to swap with.
     192              :     */
     193              :     void
     194              :     swap(response_view& other) noexcept
     195              :     {
     196              :         auto ph = ph_;
     197              :         ph_ = other.ph_;
     198              :         ph_ = ph;
     199              :     }
     200              : 
     201              :     /** Swap.
     202              : 
     203              :         Exchanges the view of `v0` with
     204              :         another `v1`. All iterators and
     205              :         references remain valid.
     206              : 
     207              :         If `&v0 == &v1`, this function call has no effect.
     208              : 
     209              :         @par Example
     210              :         @code
     211              :         response r1(status::ok);
     212              :         response r2(status::bad_request);
     213              :         response_view v1 = r1;
     214              :         response_view v2 = r2;
     215              :         std::swap(v1, v2);
     216              :         assert(v1.buffer() == "HTTP/1.1 400 Bad Request\r\n\r\n" );
     217              :         assert(v2.buffer() == "HTTP/1.1 200 OK\r\n\r\n" );
     218              :         @endcode
     219              : 
     220              :         @par Effects
     221              :         @code
     222              :         v0.swap(v1);
     223              :         @endcode
     224              : 
     225              :         @par Complexity
     226              :         Constant.
     227              : 
     228              :         @param v0 The first object to swap.
     229              :         @param v1 The second object to swap.
     230              : 
     231              :         @see
     232              :             @ref response_view::swap.
     233              :     */
     234              :     friend
     235              :     void
     236              :     swap(
     237              :         response_view& v0,
     238              :         response_view& v1) noexcept
     239              :     {
     240              :         v0.swap(v1);
     241              :     }
     242              : };
     243              : 
     244              : } // http_proto
     245              : } // boost
     246              : 
     247              : #endif
        

Generated by: LCOV version 2.1