LCOV - code coverage report
Current view: top level - boost/url/impl/params_ref.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 39 39
Test Date: 2024-07-10 02:48:26 Functions: 100.0 % 14 14

            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_IMPL_PARAMS_REF_HPP
      12              : #define BOOST_URL_IMPL_PARAMS_REF_HPP
      13              : 
      14              : #include <boost/url/params_view.hpp>
      15              : #include <boost/url/detail/any_params_iter.hpp>
      16              : #include <boost/url/detail/except.hpp>
      17              : #include <boost/url/grammar/recycled.hpp>
      18              : #include <boost/assert.hpp>
      19              : 
      20              : namespace boost {
      21              : namespace urls {
      22              : 
      23              : inline
      24           94 : params_ref::
      25              : params_ref(
      26              :     url_base& u,
      27           94 :     encoding_opts opt) noexcept
      28           94 :     : params_base(u.impl_, opt)
      29           94 :     , u_(&u)
      30              : {
      31           94 : }
      32              : 
      33              : //------------------------------------------------
      34              : //
      35              : // Special Members
      36              : //
      37              : //------------------------------------------------
      38              : 
      39              : inline
      40            1 : params_ref::
      41              : params_ref(
      42              :     params_ref const& other,
      43            1 :     encoding_opts opt) noexcept
      44            1 :     : params_ref(*other.u_, opt)
      45              : {
      46            1 : }
      47              : 
      48              : inline
      49              : auto
      50            1 : params_ref::
      51              : operator=(std::initializer_list<
      52              :     param_view> init) ->
      53              :         params_ref&
      54              : {
      55            1 :     assign(init);
      56            1 :     return *this;
      57              : }
      58              : 
      59              : //------------------------------------------------
      60              : //
      61              : // Modifiers
      62              : //
      63              : //------------------------------------------------
      64              : 
      65              : inline
      66              : void
      67            3 : params_ref::
      68              : clear() noexcept
      69              : {
      70            3 :     u_->remove_query();
      71            3 : }
      72              : 
      73              : //------------------------------------------------
      74              : 
      75              : template<class FwdIt>
      76              : void
      77            8 : params_ref::
      78              : assign(FwdIt first, FwdIt last)
      79              : {
      80              : /*  If you get a compile error here, it
      81              :     means that the iterators you passed
      82              :     do not meet the requirements stated
      83              :     in the documentation.
      84              : */
      85              :     static_assert(
      86              :         std::is_convertible<
      87              :             typename std::iterator_traits<
      88              :                 FwdIt>::reference,
      89              :             param_view>::value,
      90              :         "Type requirements not met");
      91              : 
      92            8 :     assign(first, last,
      93              :         typename std::iterator_traits<
      94              :             FwdIt>::iterator_category{});
      95            8 : }
      96              : 
      97              : inline
      98              : auto
      99            7 : params_ref::
     100              : append(
     101              :     param_view const& p) ->
     102              :         iterator
     103              : {
     104            7 :     return insert(end(), p);
     105              : }
     106              : 
     107              : inline
     108              : auto
     109            5 : params_ref::
     110              : append(
     111              :     std::initializer_list<
     112              :         param_view> init) ->
     113              :     iterator
     114              : {
     115            5 :     return insert(end(), init);
     116              : }
     117              : 
     118              : template<class FwdIt>
     119              : auto
     120            4 : params_ref::
     121              : append(FwdIt first, FwdIt last) ->
     122              :     iterator
     123              : {
     124              : /*  If you get a compile error here, it
     125              :     means that the iterators you passed
     126              :     do not meet the requirements stated
     127              :     in the documentation.
     128              : */
     129              :     static_assert(
     130              :         std::is_convertible<
     131              :             typename std::iterator_traits<
     132              :                 FwdIt>::reference,
     133              :             param_view>::value,
     134              :         "Type requirements not met");
     135              : 
     136            4 :     return insert(
     137            4 :         end(), first, last);
     138              : }
     139              : 
     140              : template<class FwdIt>
     141              : auto
     142           19 : params_ref::
     143              : insert(
     144              :     iterator before,
     145              :     FwdIt first,
     146              :     FwdIt last) ->
     147              :         iterator
     148              : {
     149              : /*  If you get a compile error here, it
     150              :     means that the iterators you passed
     151              :     do not meet the requirements stated
     152              :     in the documentation.
     153              : */
     154              :     static_assert(
     155              :         std::is_convertible<
     156              :             typename std::iterator_traits<
     157              :                 FwdIt>::reference,
     158              :             param_view>::value,
     159              :         "Type requirements not met");
     160              : 
     161           38 :     return insert(
     162              :         before,
     163              :         first,
     164              :         last,
     165              :         typename std::iterator_traits<
     166           38 :             FwdIt>::iterator_category{});
     167              : }
     168              : 
     169              : template<class FwdIt>
     170              : auto
     171            4 : params_ref::
     172              : replace(
     173              :     iterator from,
     174              :     iterator to,
     175              :     FwdIt first,
     176              :     FwdIt last) ->
     177              :         iterator
     178              : {
     179              : /*  If you get a compile error here, it
     180              :     means that the iterators you passed
     181              :     do not meet the requirements stated
     182              :     in the documentation.
     183              : */
     184              :     static_assert(
     185              :         std::is_convertible<
     186              :             typename std::iterator_traits<
     187              :                 FwdIt>::reference,
     188              :             param_view>::value,
     189              :         "Type requirements not met");
     190              : 
     191              :     return iterator(
     192            8 :         u_->edit_params(
     193              :             from.it_, to.it_,
     194              :             detail::make_params_iter(
     195              :                 first, last)),
     196            8 :         opt_);
     197              : }
     198              : 
     199              : //------------------------------------------------
     200              : //
     201              : // implementation
     202              : //
     203              : //------------------------------------------------
     204              : 
     205              : template<class FwdIt>
     206              : void
     207            8 : params_ref::
     208              : assign(FwdIt first, FwdIt last,
     209              :     std::forward_iterator_tag)
     210              : {
     211           16 :     u_->edit_params(
     212            8 :         begin().it_,
     213           16 :         end().it_,
     214              :         detail::make_params_iter(
     215              :             first, last));
     216            8 : }
     217              : 
     218              : template<class FwdIt>
     219              : auto
     220           19 : params_ref::
     221              : insert(
     222              :     iterator before,
     223              :     FwdIt first,
     224              :     FwdIt last,
     225              :     std::forward_iterator_tag) ->
     226              :         iterator
     227              : {
     228              :     return iterator(
     229           38 :         u_->edit_params(
     230              :             before.it_,
     231              :             before.it_,
     232              :             detail::make_params_iter(
     233              :                 first, last)),
     234           38 :         opt_);
     235              : }
     236              : 
     237              : } // urls
     238              : } // boost
     239              : 
     240              : #endif
        

Generated by: LCOV version 2.1