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: 2025-11-10 19:06:20 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              :         @param other The object to copy
     104              :     */
     105              :     params_view(
     106              :         params_view const& other) = default;
     107              : 
     108              :     /** Constructor
     109              : 
     110              :         After construction both views will
     111              :         reference the same character buffer
     112              :         but this instance will use the specified
     113              :         @ref encoding_opts when the values
     114              :         are decoded.
     115              : 
     116              :         Ownership is not transferred; the caller
     117              :         is responsible for ensuring the lifetime
     118              :         of the buffer extends until it is no
     119              :         longer referenced.
     120              : 
     121              :         @par Postconditions
     122              :         @code
     123              :         this->buffer().data() == other.buffer().data()
     124              :         @endcode
     125              : 
     126              :         @par Complexity
     127              :         Constant.
     128              : 
     129              :         @par Exception Safety
     130              :         Throws nothing
     131              : 
     132              :         @param other The object to copy
     133              :         @param opt The options for decoding
     134              :     */
     135              :     params_view(
     136              :         params_view const& other,
     137              :         encoding_opts opt) noexcept;
     138              : 
     139              :     /** Constructor
     140              : 
     141              :         This function constructs params from
     142              :         a valid query parameter string, which
     143              :         can contain percent escapes. Unlike
     144              :         the parameters in URLs, the string
     145              :         passed here should not start with "?".
     146              :         Upon construction, the view references
     147              :         the character buffer pointed to by `s`.
     148              :         The caller is responsible for ensuring
     149              :         that the lifetime of the buffer extends
     150              :         until it is no longer referenced.
     151              : 
     152              :         @par Example
     153              :         @code
     154              :         params_view qp( "first=John&last=Doe" );
     155              :         @endcode
     156              : 
     157              :         @par Effects
     158              :         @code
     159              :         return parse_query( s ).value();
     160              :         @endcode
     161              : 
     162              :         @par Postconditions
     163              :         @code
     164              :         this->buffer().data() == s.data()
     165              :         @endcode
     166              : 
     167              :         @par Complexity
     168              :         Linear in `s`.
     169              : 
     170              :         @par Exception Safety
     171              :         Exceptions thrown on invalid input.
     172              : 
     173              :         @throw system_error
     174              :         `s` contains an invalid query parameter
     175              :         string.
     176              : 
     177              :         @param s The string to parse.
     178              : 
     179              :         @par BNF
     180              :         @code
     181              :         query-params    = [ query-param ] *( "&" query-param )
     182              : 
     183              :         query-param     = key [ "=" value ]
     184              :         @endcode
     185              : 
     186              :         @par Specification
     187              :         @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.4"
     188              :             >3.4.  Query</a>
     189              :     */
     190              :     BOOST_URL_DECL
     191              :     params_view(
     192              :         core::string_view s);
     193              : 
     194              :     /** Constructor
     195              : 
     196              :         This function constructs params from
     197              :         a valid query parameter string, which
     198              :         can contain percent escapes.
     199              : 
     200              :         This instance will use the specified
     201              :         @ref encoding_opts when the values
     202              :         are decoded.
     203              : 
     204              :         Unlike the parameters in URLs, the string
     205              :         passed here should not start with "?".
     206              :         Upon construction, the view will
     207              :         reference the character buffer pointed
     208              :         to by `s`. The caller is responsible
     209              :         for ensuring that the lifetime of the
     210              :         buffer extends until it is no longer
     211              :         referenced.
     212              : 
     213              :         @par Example
     214              :         @code
     215              :         encoding_opts opt;
     216              :         opt.space_as_plus = true;
     217              :         params_view qp( "name=John+Doe", opt );
     218              :         @endcode
     219              : 
     220              :         @par Effects
     221              :         @code
     222              :         return params_view(parse_query( s ).value(), opt);
     223              :         @endcode
     224              : 
     225              :         @par Postconditions
     226              :         @code
     227              :         this->buffer().data() == s.data()
     228              :         @endcode
     229              : 
     230              :         @par Complexity
     231              :         Linear in `s`.
     232              : 
     233              :         @par Exception Safety
     234              :         Exceptions thrown on invalid input.
     235              : 
     236              :         @throw system_error
     237              :         `s` contains an invalid query parameter
     238              :         string.
     239              : 
     240              :         @param s The string to parse.
     241              : 
     242              :         @param opt The options for decoding. If
     243              :         this parameter is omitted, `space_as_plus`
     244              :         is used.
     245              : 
     246              :         @par BNF
     247              :         @code
     248              :         query-params    = [ query-param ] *( "&" query-param )
     249              : 
     250              :         query-param     = key [ "=" value ]
     251              :         @endcode
     252              : 
     253              :         @par Specification
     254              :         @li <a href="https://datatracker.ietf.org/doc/html/rfc3986#section-3.4"
     255              :             >3.4.  Query</a>
     256              :     */
     257              :     BOOST_URL_DECL
     258              :     params_view(
     259              :         core::string_view s,
     260              :         encoding_opts opt);
     261              : 
     262              :     /** Assignment
     263              : 
     264              :         After assignment, both views reference
     265              :         the same underlying character buffer.
     266              : 
     267              :         Ownership is not transferred; the caller
     268              :         is responsible for ensuring the lifetime
     269              :         of the buffer extends until it is no
     270              :         longer referenced.
     271              : 
     272              :         @par Postconditions
     273              :         @code
     274              :         this->buffer().data() == other.buffer().data()
     275              :         @endcode
     276              : 
     277              :         @par Complexity
     278              :         Constant
     279              : 
     280              :         @par Exception Safety
     281              :         Throws nothing
     282              : 
     283              :         @param other The object to assign
     284              :         @return A reference to this object
     285              :     */
     286              :     params_view&
     287              :     operator=(
     288              :         params_view const& other) = default;
     289              : };
     290              : 
     291              : } // urls
     292              : } // boost
     293              : 
     294              : #endif
        

Generated by: LCOV version 2.1