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

Generated by: LCOV version 2.1