LCOV - code coverage report
Current view: top level - boost/url/impl - params_ref.hpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 39 39 100.0 %
Date: 2024-03-05 20:06:56 Functions: 14 14 100.0 %

          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             :     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             :     return insert(
     162             :         before,
     163             :         first,
     164             :         last,
     165             :         typename std::iterator_traits<
     166          19 :             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           8 :     return iterator(
     192           4 :         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          38 :     return iterator(
     229          19 :         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 1.15