LCOV - code coverage report
Current view: top level - boost/url - segments_encoded_ref.hpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 2 2 100.0 %
Date: 2024-03-05 20:06:56 Functions: 1 1 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_SEGMENTS_ENCODED_REF_HPP
      12             : #define BOOST_URL_SEGMENTS_ENCODED_REF_HPP
      13             : 
      14             : #include <boost/url/detail/config.hpp>
      15             : #include <boost/url/segments_encoded_base.hpp>
      16             : #include <initializer_list>
      17             : #include <iterator>
      18             : 
      19             : namespace boost {
      20             : namespace urls {
      21             : 
      22             : #ifndef BOOST_URL_DOCS
      23             : class url_base;
      24             : class segments_encoded_view;
      25             : #endif
      26             : 
      27             : /** A view representing path segments in a URL
      28             : 
      29             :     Objects of this type are used to interpret
      30             :     the path as a bidirectional view of segments,
      31             :     where each segment is a string which may
      32             :     contain percent-escapes.
      33             : 
      34             :     The view does not retain ownership of the
      35             :     elements and instead references the original
      36             :     character buffer. The caller is responsible
      37             :     for ensuring that the lifetime of the buffer
      38             :     extends until it is no longer referenced.
      39             : 
      40             :     The view is modifiable; calling non-const
      41             :     members causes changes to the referenced
      42             :     url.
      43             : 
      44             :     @par Example
      45             :     @code
      46             :     url u( "/path/to/file.txt" );
      47             : 
      48             :     segments_encoded_ref ps = u.encoded_segments();
      49             :     @endcode
      50             : 
      51             :     The strings returned when iterators are
      52             :     dereferenced have type @ref pct_string_view
      53             :     and may contain percent-escapes.
      54             : 
      55             :     Reserved characters in inputs are
      56             :     automatically escaped.
      57             :     Escapes in inputs are preserved.
      58             : 
      59             :     Exceptions are thrown on invalid inputs.
      60             : 
      61             :     @par Iterator Invalidation
      62             :     Changes to the underlying character buffer
      63             :     can invalidate iterators which reference it.
      64             :     Modifications made through the container
      65             :     invalidate some or all iterators:
      66             :     <br>
      67             : 
      68             :     @li @ref push_back : Only `end()`.
      69             : 
      70             :     @li @ref assign, @ref clear,
      71             :         @ref operator= : All elements.
      72             : 
      73             :     @li @ref erase : Erased elements and all
      74             :         elements after (including `end()`).
      75             : 
      76             :     @li @ref insert : All elements at or after
      77             :         the insertion point (including `end()`).
      78             : 
      79             :     @li @ref replace : Modified
      80             :         elements and all elements
      81             :         after (including `end()`).
      82             : 
      83             :     @see
      84             :         @ref segments_encoded_view,
      85             :         @ref segments_view,
      86             :         @ref segments_ref.
      87             : */
      88             : class segments_encoded_ref
      89             :     : public segments_encoded_base
      90             : {
      91             :     friend class url_base;
      92             : 
      93             :     url_base* u_ = nullptr;
      94             : 
      95             :     segments_encoded_ref(
      96             :         url_base& u) noexcept;
      97             : 
      98             : public:
      99             :     //--------------------------------------------
     100             :     //
     101             :     // Special Members
     102             :     //
     103             :     //--------------------------------------------
     104             : 
     105             :     /** Constructor
     106             : 
     107             :         After construction, both views
     108             :         reference the same url. Ownership is not
     109             :         transferred; the caller is responsible
     110             :         for ensuring the lifetime of the url
     111             :         extends until it is no longer
     112             :         referenced.
     113             : 
     114             :         @par Postconditions
     115             :         @code
     116             :         &this->url() == &other.url();
     117             :         @endcode
     118             : 
     119             :         @par Complexity
     120             :         Constant.
     121             : 
     122             :         @par Exception Safety
     123             :         Throws nothing.
     124             : 
     125             :         @param other The other view.
     126             :     */
     127             :     segments_encoded_ref(
     128             :         segments_encoded_ref const& other) = default;
     129             : 
     130             :     /** Assignment
     131             : 
     132             :         The existing contents are replaced
     133             :         by a copy of the other segments.
     134             : 
     135             :         <br>
     136             :         All iterators are invalidated.
     137             : 
     138             :         @note
     139             :         None of the character buffers referenced
     140             :         by `other` may overlap the buffer of the
     141             :         underlying url, or else the behavior
     142             :         is undefined.
     143             : 
     144             :         @par Effects
     145             :         @code
     146             :         this->assign( other.begin(), other.end() );
     147             :         @endcode
     148             : 
     149             :         @par Complexity
     150             :         Linear in `other.buffer().size()`.
     151             : 
     152             :         @par Exception Safety
     153             :         Strong guarantee.
     154             :         Calls to allocate may throw.
     155             : 
     156             :         @param other The segments to assign.
     157             :     */
     158             :     /** @{ */
     159             :     BOOST_URL_DECL
     160             :     segments_encoded_ref&
     161             :     operator=(segments_encoded_ref const& other);
     162             : 
     163             :     BOOST_URL_DECL
     164             :     segments_encoded_ref&
     165             :     operator=(segments_encoded_view const& other);
     166             :     /** @} */
     167             : 
     168             :     /** Assignment
     169             : 
     170             :         The existing contents are replaced
     171             :         by a copy of the contents of the
     172             :         initializer list.
     173             :         Reserved characters in the list are
     174             :         automatically escaped.
     175             :         Escapes in the list are preserved.
     176             : 
     177             :         <br>
     178             :         All iterators are invalidated.
     179             : 
     180             :         @par Example
     181             :         @code
     182             :         url u;
     183             : 
     184             :         u.encoded_segments() = {"path", "to", "file.txt"};
     185             :         @endcode
     186             : 
     187             :         @par Preconditions
     188             :         None of the character buffers referenced
     189             :         by the list may overlap the character buffer
     190             :         of the underlying url, or else the behavior
     191             :         is undefined.
     192             : 
     193             :         @par Effects
     194             :         @code
     195             :         this->assign( init.begin(), init.end() );
     196             :         @endcode
     197             : 
     198             :         @par Complexity
     199             :         Linear in `init.size() + this->url().encoded_query().size() + this->url().encoded_fragment().size()`.
     200             : 
     201             :         @par Exception Safety
     202             :         Strong guarantee.
     203             :         Calls to allocate may throw.
     204             :         Exceptions thrown on invalid input.
     205             : 
     206             :         @throw system_error
     207             :         The list contains an invalid percent-encoding.
     208             : 
     209             :         @param init The list of segments to assign.
     210             :     */
     211             :     BOOST_URL_DECL
     212             :     segments_encoded_ref&
     213             :     operator=(std::initializer_list<
     214             :         pct_string_view> init);
     215             : 
     216             :     /** Conversion
     217             : 
     218             :         @see
     219             :             @ref segments_encoded_view.
     220             :     */
     221             :     BOOST_URL_DECL
     222             :     operator
     223             :     segments_encoded_view() const noexcept;
     224             : 
     225             :     //--------------------------------------------
     226             :     //
     227             :     // Observers
     228             :     //
     229             :     //--------------------------------------------
     230             : 
     231             :     /** Return the referenced url
     232             : 
     233             :         This function returns the url referenced
     234             :         by the view.
     235             : 
     236             :         @par Example
     237             :         @code
     238             :         url u( "/path/to/file.txt" );
     239             : 
     240             :         assert( &u.encoded_segments().url() == &u );
     241             :         @endcode
     242             : 
     243             :         @par Exception Safety
     244             :         Throws nothing.
     245             :     */
     246             :     url_base&
     247           9 :     url() const noexcept
     248             :     {
     249           9 :         return *u_;
     250             :     }
     251             : 
     252             :     //--------------------------------------------
     253             :     //
     254             :     // Modifiers
     255             :     //
     256             :     //--------------------------------------------
     257             : 
     258             :     /** Clear the contents of the container
     259             : 
     260             :         <br>
     261             :         All iterators are invalidated.
     262             : 
     263             :         @par Effects
     264             :         @code
     265             :         this->url().set_encoded_path( "" );
     266             :         @endcode
     267             : 
     268             :         @par Postconditions
     269             :         @code
     270             :         this->empty() == true
     271             :         @endcode
     272             : 
     273             :         @par Complexity
     274             :         Linear in `this->url().encoded_query().size() + this->url().encoded_fragment().size()`.
     275             : 
     276             :         @par Exception Safety
     277             :         Throws nothing.
     278             :     */
     279             :     void
     280             :     clear() noexcept;
     281             : 
     282             :     /** Assign segments
     283             : 
     284             :         The existing contents are replaced
     285             :         by a copy of the contents of the
     286             :         initializer list.
     287             :         Reserved characters in the list are
     288             :         automatically escaped.
     289             :         Escapes in the list are preserved.
     290             : 
     291             :         <br>
     292             :         All iterators are invalidated.
     293             : 
     294             :         @note
     295             :         None of the character buffers referenced
     296             :         by the list may overlap the character
     297             :         buffer of the underlying url, or else
     298             :         the behavior is undefined.
     299             : 
     300             :         @par Example
     301             :         @code
     302             :         url u;
     303             : 
     304             :         u.segments().assign( {"path", "to", "file.txt"} );
     305             :         @endcode
     306             : 
     307             :         @par Complexity
     308             :         Linear in `init.size() + this->url().encoded_query().size() + this->url().encoded_fragment().size()`.
     309             : 
     310             :         @par Exception Safety
     311             :         Strong guarantee.
     312             :         Calls to allocate may throw.
     313             :         Exceptions thrown on invalid input.
     314             : 
     315             :         @throw system_error
     316             :         The list contains an invalid percent-encoding.
     317             : 
     318             :         @param init The list of segments to assign.
     319             :     */
     320             :     BOOST_URL_DECL
     321             :     void
     322             :     assign(std::initializer_list<
     323             :         pct_string_view> init);
     324             : 
     325             :     /** Assign segments
     326             : 
     327             :         The existing contents are replaced
     328             :         by a copy of the contents of the range.
     329             :         Reserved characters in the range are
     330             :         automatically escaped.
     331             :         Escapes in the range are preserved.
     332             : 
     333             :         <br>
     334             :         All iterators are invalidated.
     335             : 
     336             :         @note
     337             :         None of the character buffers referenced
     338             :         by the range may overlap the character
     339             :         buffer of the underlying url, or else
     340             :         the behavior is undefined.
     341             : 
     342             :         @par Mandates
     343             :         @code
     344             :         std::is_convertible< std::iterator_traits< FwdIt >::reference_type, pct_string_view >::value == true
     345             :         @endcode
     346             : 
     347             :         @par Complexity
     348             :         Linear in `std::distance( first, last ) + this->url().encoded_query().size() + this->url().encoded_fragment().size()`.
     349             : 
     350             :         @par Exception Safety
     351             :         Strong guarantee.
     352             :         Calls to allocate may throw.
     353             :         Exceptions thrown on invalid input.
     354             : 
     355             :         @throw system_error
     356             :         The range contains an invalid percent-encoding.
     357             : 
     358             :         @param first, last The range of segments
     359             :         to assign.
     360             :     */
     361             :     template<class FwdIt>
     362             :     void
     363             :     assign(FwdIt first, FwdIt last);
     364             : 
     365             :     //--------------------------------------------
     366             : 
     367             :     /** Insert segments
     368             : 
     369             :         This function inserts a segment
     370             :         before the specified position.
     371             :         Reserved characters in the segment are
     372             :         automatically escaped.
     373             :         Escapes in the segment are preserved.
     374             : 
     375             :         <br>
     376             :         All iterators that are equal to
     377             :         `before` or come after are invalidated.
     378             : 
     379             :         @par Complexity
     380             :         Linear in `s.size() + this->url().encoded_resource().size()`.
     381             : 
     382             :         @par Exception Safety
     383             :         Strong guarantee.
     384             :         Calls to allocate may throw.
     385             :         Exceptions thrown on invalid input.
     386             : 
     387             :         @throw system_error
     388             :         The segment contains an invalid percent-encoding.
     389             : 
     390             :         @return An iterator to the inserted
     391             :         segment.
     392             : 
     393             :         @param before An iterator before which
     394             :         the segment is inserted. This may
     395             :         be equal to `end()`.
     396             : 
     397             :         @param s The segment to insert.
     398             :     */
     399             :     BOOST_URL_DECL
     400             :     iterator
     401             :     insert(
     402             :         iterator before,
     403             :         pct_string_view s);
     404             : 
     405             :     /** Insert segments
     406             : 
     407             :         This function inserts the segments
     408             :         in an initializer list before the
     409             :         specified position.
     410             :         Reserved characters in the list are
     411             :         automatically escaped.
     412             :         Escapes in the list are preserved.
     413             : 
     414             :         <br>
     415             :         All iterators that are equal to
     416             :         `before` or come after are invalidated.
     417             : 
     418             :         @note
     419             :         None of the character buffers referenced
     420             :         by the list may overlap the character
     421             :         buffer of the underlying url, or else
     422             :         the behavior is undefined.
     423             : 
     424             :         @par Example
     425             :         @code
     426             :         url u( "/file.txt" );
     427             : 
     428             :         u.encoded_segments().insert( u.encoded_segments().begin(), { "path", "to" } );
     429             :         @endcode
     430             : 
     431             :         @par Complexity
     432             :         Linear in `init.size() + this->url().encoded_resource().size()`.
     433             : 
     434             :         @par Exception Safety
     435             :         Strong guarantee.
     436             :         Calls to allocate may throw.
     437             :         Exceptions thrown on invalid input.
     438             : 
     439             :         @throw system_error
     440             :         The list contains an invalid percent-encoding.
     441             : 
     442             :         @return An iterator to the first
     443             :         element inserted, or `before` if
     444             :         `init.size() == 0`.
     445             : 
     446             :         @param before An iterator before which
     447             :         the list is inserted. This may
     448             :         be equal to `end()`.
     449             : 
     450             :         @param init The list of segments to insert.
     451             :     */
     452             :     BOOST_URL_DECL
     453             :     iterator
     454             :     insert(
     455             :         iterator before,
     456             :         std::initializer_list<
     457             :             pct_string_view> init);
     458             : 
     459             :     /** Insert segments
     460             : 
     461             :         This function inserts the segments in
     462             :         a range before the specified position.
     463             :         Reserved characters in the range are
     464             :         automatically escaped.
     465             :         Escapes in the range are preserved.
     466             : 
     467             :         <br>
     468             :         All iterators that are equal to
     469             :         `before` or come after are invalidated.
     470             : 
     471             :         @note
     472             :         None of the character buffers referenced
     473             :         by the range may overlap the character
     474             :         buffer of the underlying url, or else
     475             :         the behavior is undefined.
     476             : 
     477             :         @par Mandates
     478             :         @code
     479             :         std::is_convertible< std::iterator_traits< FwdIt >::reference_type, pct_string_view >::value == true
     480             :         @endcode
     481             : 
     482             :         @par Complexity
     483             :         Linear in `std::distance( first, last ) + this->url().encoded_resource().size()`.
     484             : 
     485             :         @par Exception Safety
     486             :         Strong guarantee.
     487             :         Calls to allocate may throw.
     488             :         Exceptions thrown on invalid input.
     489             : 
     490             :         @throw system_error
     491             :         The range contains an invalid percent-encoding.
     492             : 
     493             :         @return An iterator to the first
     494             :         segment inserted, or `before` if
     495             :         `init.empty()`.
     496             : 
     497             :         @param before An iterator before which
     498             :         the range is inserted. This may
     499             :         be equal to `end()`.
     500             : 
     501             :         @param first, last The range of segments
     502             :         to insert.
     503             :     */
     504             :     template<class FwdIt>
     505             :     iterator
     506             :     insert(
     507             :         iterator before,
     508             :         FwdIt first,
     509             :         FwdIt last);
     510             : 
     511             :     //--------------------------------------------
     512             : 
     513             :     /** Erase segments
     514             : 
     515             :         This function removes a segment.
     516             : 
     517             :         <br>
     518             :         All iterators that are equal to
     519             :         `pos` or come after are invalidated.
     520             : 
     521             :         @par Complexity
     522             :         Linear in `this->url().encoded_resource().size()`.
     523             : 
     524             :         @par Exception Safety
     525             :         Throws nothing.
     526             : 
     527             :         @return An iterator to one past
     528             :         the removed segment.
     529             : 
     530             :         @param pos An iterator to the element.
     531             :     */
     532             :     iterator
     533             :     erase(
     534             :         iterator pos) noexcept;
     535             : 
     536             :     /** Erase segments
     537             : 
     538             :         This function removes a range of segments
     539             :         from the container.
     540             : 
     541             :         <br>
     542             :         All iterators that are equal to
     543             :         `first` or come after are invalidated.
     544             : 
     545             :         @par Complexity
     546             :         Linear in `this->url().encoded_resource().size()`.
     547             : 
     548             :         @par Exception Safety
     549             :         Throws nothing.
     550             : 
     551             :         @return An iterator to one past
     552             :         the removed range.
     553             : 
     554             :         @param first, last The range of
     555             :         segments to erase.
     556             :     */
     557             :     BOOST_URL_DECL
     558             :     iterator
     559             :     erase(
     560             :         iterator first,
     561             :         iterator last) noexcept;
     562             : 
     563             :     //--------------------------------------------
     564             : 
     565             :     /** Replace segments
     566             : 
     567             :         This function replaces the segment at
     568             :         the specified position.
     569             :         Reserved characters in the string are
     570             :         automatically escaped.
     571             :         Escapes in the string are preserved.
     572             : 
     573             :         <br>
     574             :         All iterators that are equal to
     575             :         `pos` or come after are invalidated.
     576             : 
     577             :         @par Complexity
     578             :         Linear in `s.size() + this->url().encoded_resouce().size()`.
     579             : 
     580             :         @par Exception Safety
     581             :         Strong guarantee.
     582             :         Calls to allocate may throw.
     583             : 
     584             :         @return An iterator to the replaced segment.
     585             : 
     586             :         @param pos An iterator to the segment.
     587             : 
     588             :         @param s The string to assign.
     589             :     */
     590             :     BOOST_URL_DECL
     591             :     iterator
     592             :     replace(
     593             :         iterator pos,
     594             :         pct_string_view s);
     595             : 
     596             :     /** Replace segments
     597             : 
     598             :         This function replaces a range of
     599             :         segments with one segment.
     600             :         Reserved characters in the string are
     601             :         automatically escaped.
     602             :         Escapes in the string are preserved.
     603             : 
     604             :         <br>
     605             :         All iterators that are equal to
     606             :         `from` or come after are invalidated.
     607             : 
     608             :         @par Complexity
     609             :         Linear in `s.size() + this->url().encoded_resouce().size()`.
     610             : 
     611             :         @par Exception Safety
     612             :         Strong guarantee.
     613             :         Calls to allocate may throw.
     614             :         Exceptions thrown on invalid input.
     615             : 
     616             :         @throw system_error
     617             :         The string contains an invalid percent-encoding.
     618             : 
     619             :         @return An iterator to the new segment.
     620             : 
     621             :         @param from, to The range of segments to replace.
     622             : 
     623             :         @param s The string to assign.
     624             :     */
     625             :     BOOST_URL_DECL
     626             :     iterator
     627             :     replace(
     628             :         iterator from,
     629             :         iterator to,
     630             :         pct_string_view s);
     631             : 
     632             :     /** Replace segments
     633             : 
     634             :         This function replaces a range of
     635             :         segments with a list of segments in
     636             :         an initializer list.
     637             :         Reserved characters in the list are
     638             :         automatically escaped.
     639             :         Escapes in the list are preserved.
     640             : 
     641             :         <br>
     642             :         All iterators that are equal to
     643             :         `from` or come after are invalidated.
     644             : 
     645             :         @par Preconditions
     646             :         None of the character buffers referenced
     647             :         by the list may overlap the character
     648             :         buffer of the underlying url, or else
     649             :         the behavior is undefined.
     650             : 
     651             :         @par Complexity
     652             :         Linear in `init.size() + this->url().encoded_resouce().size()`.
     653             : 
     654             :         @par Exception Safety
     655             :         Strong guarantee.
     656             :         Calls to allocate may throw.
     657             :         Exceptions thrown on invalid input.
     658             : 
     659             :         @throw system_error
     660             :         The list contains an invalid percent-encoding.
     661             : 
     662             :         @return An iterator to the first
     663             :         segment inserted, or one past `to` if
     664             :         `init.size() == 0`.
     665             : 
     666             :         @param from, to The range of segments to replace.
     667             : 
     668             :         @param init The list of segments to assign.
     669             :     */
     670             :     BOOST_URL_DECL
     671             :     iterator
     672             :     replace(
     673             :         iterator from,
     674             :         iterator to,
     675             :         std::initializer_list<
     676             :             pct_string_view> init);
     677             : 
     678             :     /** Replace segments
     679             : 
     680             :         This function replaces a range of
     681             :         segments with annother range of segments.
     682             :         Reserved characters in the new range are
     683             :         automatically escaped.
     684             :         Escapes in the new range are preserved.
     685             : 
     686             :         <br>
     687             :         All iterators that are equal to
     688             :         `from` or come after are invalidated.
     689             : 
     690             :         @par Preconditions
     691             :         None of the character buffers referenced
     692             :         by the new range may overlap the character
     693             :         buffer of the underlying url, or else
     694             :         the behavior is undefined.
     695             : 
     696             :         @par Complexity
     697             :         Linear in `std::distance( first, last ) + this->url().encoded_resouce().size()`.
     698             : 
     699             :         @par Exception Safety
     700             :         Strong guarantee.
     701             :         Calls to allocate may throw.
     702             :         Exceptions thrown on invalid input.
     703             : 
     704             :         @throw system_error
     705             :         The range contains an invalid percent-encoding.
     706             : 
     707             :         @return An iterator to the first
     708             :         segment inserted, or one past `to` if
     709             :         `init.size() == 0`.
     710             : 
     711             :         @param from, to The range of segments to replace.
     712             : 
     713             :         @param first, last The range of segments to assign.
     714             :     */
     715             :     template<class FwdIt>
     716             :     iterator
     717             :     replace(
     718             :         iterator from,
     719             :         iterator to,
     720             :         FwdIt first,
     721             :         FwdIt last);
     722             : 
     723             :     //--------------------------------------------
     724             : 
     725             :     /** Append a segment
     726             : 
     727             :         This function appends a segment to
     728             :         the end of the path.
     729             :         Reserved characters in the string are
     730             :         automatically escaped.
     731             :         Escapes in the string are preserved.
     732             : 
     733             :         <br>
     734             :         All end iterators are invalidated.
     735             : 
     736             :         @par Postconditions
     737             :         @code
     738             :         this->back() == s
     739             :         @endcode
     740             : 
     741             :         @par Exception Safety
     742             :         Strong guarantee.
     743             :         Calls to allocate may throw.
     744             :         Exceptions thrown on invalid input.
     745             : 
     746             :         @throw system_error
     747             :         The string contains an invalid percent-encoding.
     748             : 
     749             :         @param s The segment to append.
     750             :     */
     751             :     void
     752             :     push_back(
     753             :         pct_string_view s);
     754             : 
     755             :     /** Remove the last segment
     756             : 
     757             :         This function removes the last segment
     758             :         from the container.
     759             : 
     760             :         <br>
     761             :         Iterators to the last segment as well
     762             :         as all end iterators are invalidated.
     763             : 
     764             :         @par Preconditions
     765             :         @code
     766             :         not this->empty()
     767             :         @endcode
     768             : 
     769             :         @par Exception Safety
     770             :         Throws nothing.
     771             :     */
     772             :     void
     773             :     pop_back() noexcept;
     774             : 
     775             : private:
     776             :     template<class FwdIt>
     777             :     iterator
     778             :     insert(
     779             :         iterator before,
     780             :         FwdIt first,
     781             :         FwdIt last,
     782             :         std::input_iterator_tag) = delete;
     783             : 
     784             :     template<class FwdIt>
     785             :     iterator
     786             :     insert(
     787             :         iterator before,
     788             :         FwdIt first,
     789             :         FwdIt last,
     790             :         std::forward_iterator_tag);
     791             : };
     792             : 
     793             : } // urls
     794             : } // boost
     795             : 
     796             : // This is in <boost/url/url_base.hpp>
     797             : //
     798             : // #include <boost/url/impl/segments_encoded_ref.hpp>
     799             : 
     800             : #endif

Generated by: LCOV version 1.15