LCOV - code coverage report
Current view: top level - url/impl - segments_base.hpp (source / functions) Coverage Total Hit
Test: coverage_remapped.info Lines: 100.0 % 25 25
Test Date: 2026-02-13 15:53:22 Functions: 100.0 % 8 8

            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_SEGMENTS_BASE_HPP
      12              : #define BOOST_URL_IMPL_SEGMENTS_BASE_HPP
      13              : 
      14              : #include <boost/url/detail/segments_iter_impl.hpp>
      15              : #include <boost/url/encoding_opts.hpp>
      16              : #include <boost/assert.hpp>
      17              : #include <iterator>
      18              : 
      19              : namespace boost {
      20              : namespace urls {
      21              : namespace detail {
      22              : struct segments_iter_access;
      23              : }
      24              : 
      25              : class segments_base::iterator
      26              : {
      27              :     detail::segments_iter_impl it_;
      28              : 
      29              :     friend class segments_base;
      30              :     friend class segments_ref;
      31              :     friend struct detail::segments_iter_access;
      32              : 
      33              :     iterator(detail::path_ref const&) noexcept;
      34              :     iterator(detail::path_ref const&, int) noexcept;
      35              : 
      36          157 :     iterator(
      37              :         detail::segments_iter_impl const& it) noexcept
      38          157 :         : it_(it)
      39              :     {
      40          157 :     }
      41              : 
      42              : public:
      43              :     using value_type = segments_base::value_type;
      44              :     using reference = segments_base::reference;
      45              :     using pointer = reference;
      46              :     using difference_type =
      47              :         segments_base::difference_type;
      48              :     using iterator_category =
      49              :         std::bidirectional_iterator_tag;
      50              : 
      51              :     iterator() = default;
      52              :     iterator(iterator const&) = default;
      53              :     iterator& operator=(
      54              :         iterator const&) noexcept = default;
      55              : 
      56              :     reference
      57          876 :     operator*() const
      58              :     {
      59          876 :         encoding_opts opt;
      60          876 :         opt.space_as_plus = false;
      61          876 :         return it_.dereference().decode(opt);
      62              :     }
      63              : 
      64              :     // the return value is too expensive
      65              :     pointer operator->() const = delete;
      66              : 
      67              :     iterator&
      68          852 :     operator++() noexcept
      69              :     {
      70          852 :         it_.increment();
      71          852 :         return *this;
      72              :     }
      73              : 
      74              :     iterator&
      75           72 :     operator--() noexcept
      76              :     {
      77           72 :         it_.decrement();
      78           72 :         return *this;
      79              :     }
      80              : 
      81              :     iterator
      82           48 :     operator++(int) noexcept
      83              :     {
      84           48 :         auto tmp = *this;
      85           48 :         ++*this;
      86           48 :         return tmp;
      87              :     }
      88              : 
      89              :     iterator
      90           21 :     operator--(int) noexcept
      91              :     {
      92           21 :         auto tmp = *this;
      93           21 :         --*this;
      94           21 :         return tmp;
      95              :     }
      96              : 
      97              :     bool
      98           66 :     operator==(
      99              :         iterator const& other) const noexcept
     100              :     {
     101           66 :         return it_.equal(other.it_);
     102              :     }
     103              : 
     104              :     bool
     105          932 :     operator!=(
     106              :         iterator const& other) const noexcept
     107              :     {
     108          932 :         return ! it_.equal(other.it_);
     109              :     }
     110              : };
     111              : 
     112              : } // urls
     113              : } // boost
     114              : 
     115              : #endif
        

Generated by: LCOV version 2.3