LCOV - code coverage report
Current view: top level - boost/url/params_view.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 1 1
Test Date: 2024-08-19 20:08:54 Functions: 100.0 % 1 1

            Line data    Source code
       1              : //
       2              : // Copyright (c) 2019 Vinnie Falco (vinnie.falco@gmail.com)
       3              : // Copyright (c) 2022 Alan de Freitas (alandefreitas@gmail.com)
       4              : //
       5              : // Distributed under the Boost Software License, Version 1.0. (See accompanying
       6              : // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
       7              : //
       8              : // Official repository: https://github.com/boostorg/url
       9              : //
      10              : 
      11              : #ifndef BOOST_URL_PARAMS_VIEW_HPP
      12              : #define BOOST_URL_PARAMS_VIEW_HPP
      13              : 
      14              : #include <boost/url/detail/config.hpp>
      15              : #include <boost/url/params_base.hpp>
      16              : 
      17              : namespace boost {
      18              : namespace urls {
      19              : 
      20              : /** A view representing query parameters in a URL
      21              : 
      22              :     Objects of this type are used to interpret
      23              :     the query parameters as a bidirectional view
      24              :     of key/value pairs.
      25              : 
      26              :     The view does not retain ownership of the
      27              :     elements and instead references the original
      28              :     character buffer. The caller is responsible
      29              :     for ensuring that the lifetime of the buffer
      30              :     extends until it is no longer referenced.
      31              : 
      32              :     @par Example
      33              :     @code
      34              :     url_view u( "?first=John&last=Doe" );
      35              : 
      36              :     params_view p = u.params();
      37              :     @endcode
      38              : 
      39              :     Percent escapes in strings returned when
      40              :     dereferencing iterators are automatically
      41              :     decoded.
      42              : 
      43              :     @par Iterator Invalidation
      44              :     Changes to the underlying character buffer
      45              :     can invalidate iterators which reference it.
      46              : */
      47              : class params_view
      48              :     : public params_base
      49              : {
      50              :     friend class url_view_base;
      51              :     friend class params_encoded_view;
      52              :     friend class params_ref;
      53              : 
      54              :     params_view(
      55              :         detail::query_ref const& ref,
      56              :         encoding_opts opt) noexcept;
      57              : 
      58              : public:
      59              :     /** Constructor
      60              : 
      61              :         Default-constructed params have
      62              :         zero elements.
      63              : 
      64              :         @par Example
      65              :         @code
      66              :         params_view qp;
      67              :         @endcode
      68              : 
      69              :         @par Effects
      70              :         @code
      71              :         return params_view( "" );
      72              :         @endcode
      73              : 
      74              :         @par Complexity
      75              :         Constant.
      76              : 
      77              :         @par Exception Safety
      78              :         Throws nothing.
      79              :     */
      80            1 :     params_view() = default;
      81              : 
      82              :     /** Constructor
      83              : 
      84              :         After construction both views reference
      85              :         the same character buffer.
      86              : 
      87              :         Ownership is not transferred; the caller
      88              :         is responsible for ensuring the lifetime
      89              :         of the buffer extends until it is no
      90              :         longer referenced.
      91              : 
      92              :         @par Postconditions
      93              :         @code
      94              :         this->buffer().data() == other.buffer().data()
      95              :         @endcode
      96              : 
      97              :         @par Complexity
      98              :         Constant.
      99              : 
     100              :         @par Exception Safety
     101              :         Throws nothing
     102              :     */
     103              :     params_view(
     104              :         params_view const& other) = default;
     105              : 
     106              :     /** Constructor
     107              : 
     108              :         After construction both views will
     109              :         reference the same character buffer
     110              :         but this instance will use the specified
     111              :         @ref encoding_opts when the values
     112              :         are decoded.
     113              : 
     114              :         Ownership is not transferred; the caller
     115              :         is responsible for ensuring the lifetime
     116              :         of the buffer extends until it is no
     117              :         longer referenced.
     118              : 
     119              :         @par Postconditions
     120              :         @code
     121              :         this->buffer().data() == other.buffer().data()
     122              :         @endcode
     123              : 
     124              :         @par Complexity
     125              :         Constant.
     126              : 
     127              :         @par Exception Safety
     128              :         Throws nothing
     129              :     */
     130              :     params_view(
     131              :         params_view const& other,
     132              :         encoding_opts opt) noexcept;
     133              : 
     134              :     /** Constructor
     135              : 
     136              :         This function constructs params from
     137              :         a valid query parameter string, which
     138              :         can contain percent escapes. Unlike
     139              :         the parameters in URLs, the string
     140              :         passed here should not start with "?".
     141              :         Upon construction, the view references
     142              :         the character buffer pointed to by `s`.
     143              :         The caller is responsible for ensuring
     144              :         that the lifetime of the buffer extends
     145              :         until it is no longer referenced.
     146              : 
     147              :         @par Example
     148              :         @code
     149              :         params_view qp( "first=John&last=Doe" );
     150              :         @endcode
     151              : 
     152              :         @par Effects
     153              :         @code
     154              :         return parse_query( s ).value();
     155              :         @endcode
     156              : 
     157              :         @par Postconditions
     158              :         @code
     159              :         this->buffer().data() == s.data()
     160              :         @endcode
     161              : 
     162              :         @par Complexity
     163              :         Linear in `s`.
     164              : 
     165              :         @par Exception Safety
     166              :         Exceptions thrown on invalid input.
     167              : 
     168              :         @throw system_error
     169              :         `s` contains an invalid query parameter
     170              :         string.
     171              : 
     172              :         @param s The string to parse.
     173              : 
     174              :         @par BNF
     175              :         @code
     176              :         query-params    = [ query-param ] *( "&" query-param )
     177              : 
     178              :         query-param     = key [ "=" value ]
     179              :         @endcode
     180              : 
     181              :         @par Specification
     182              :         @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.4"
     183              :             >3.4.  Query</a>
     184              :     */
     185              :     BOOST_URL_DECL
     186              :     params_view(
     187              :         core::string_view s);
     188              : 
     189              :     /** Constructor
     190              : 
     191              :         This function constructs params from
     192              :         a valid query parameter string, which
     193              :         can contain percent escapes.
     194              : 
     195              :         This instance will use the specified
     196              :         @ref encoding_opts when the values
     197              :         are decoded.
     198              : 
     199              :         Unlike the parameters in URLs, the string
     200              :         passed here should not start with "?".
     201              :         Upon construction, the view will
     202              :         reference the character buffer pointed
     203              :         to by `s`. The caller is responsible
     204              :         for ensuring that the lifetime of the
     205              :         buffer extends until it is no longer
     206              :         referenced.
     207              : 
     208              :         @par Example
     209              :         @code
     210              :         encoding_opts opt;
     211              :         opt.space_as_plus = true;
     212              :         params_view qp( "name=John+Doe", opt );
     213              :         @endcode
     214              : 
     215              :         @par Effects
     216              :         @code
     217              :         return params_view(parse_query( s ).value(), opt);
     218              :         @endcode
     219              : 
     220              :         @par Postconditions
     221              :         @code
     222              :         this->buffer().data() == s.data()
     223              :         @endcode
     224              : 
     225              :         @par Complexity
     226              :         Linear in `s`.
     227              : 
     228              :         @par Exception Safety
     229              :         Exceptions thrown on invalid input.
     230              : 
     231              :         @throw system_error
     232              :         `s` contains an invalid query parameter
     233              :         string.
     234              : 
     235              :         @param s The string to parse.
     236              : 
     237              :         @param opt The options for decoding. If
     238              :         this parameter is omitted, `space_as_plus`
     239              :         is used.
     240              : 
     241              :         @par BNF
     242              :         @code
     243              :         query-params    = [ query-param ] *( "&" query-param )
     244              : 
     245              :         query-param     = key [ "=" value ]
     246              :         @endcode
     247              : 
     248              :         @par Specification
     249              :         @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.4"
     250              :             >3.4.  Query</a>
     251              :     */
     252              :     BOOST_URL_DECL
     253              :     params_view(
     254              :         core::string_view s,
     255              :         encoding_opts opt);
     256              : 
     257              :     /** Assignment
     258              : 
     259              :         After assignment, both views reference
     260              :         the same underlying character buffer.
     261              : 
     262              :         Ownership is not transferred; the caller
     263              :         is responsible for ensuring the lifetime
     264              :         of the buffer extends until it is no
     265              :         longer referenced.
     266              : 
     267              :         @par Postconditions
     268              :         @code
     269              :         this->buffer().data() == other.buffer().data()
     270              :         @endcode
     271              : 
     272              :         @par Complexity
     273              :         Constant
     274              : 
     275              :         @par Exception Safety
     276              :         Throws nothing
     277              :     */
     278              :     params_view&
     279              :     operator=(
     280              :         params_view const&) = default;
     281              : };
     282              : 
     283              : } // urls
     284              : } // boost
     285              : 
     286              : #endif
        

Generated by: LCOV version 2.1