LCOV - code coverage report
Current view: top level - boost/url/impl/segments_encoded_base.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 31 31
Test Date: 2024-08-19 20:08:54 Functions: 100.0 % 11 11

            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_ENCODED_BASE_HPP
      12              : #define BOOST_URL_IMPL_SEGMENTS_ENCODED_BASE_HPP
      13              : 
      14              : #include <boost/url/detail/segments_iter_impl.hpp>
      15              : #include <boost/assert.hpp>
      16              : 
      17              : namespace boost {
      18              : namespace urls {
      19              : 
      20              : class segments_encoded_base::iterator
      21              : {
      22              :     detail::segments_iter_impl it_;
      23              : 
      24              :     friend class url_base;
      25              :     friend class segments_encoded_base;
      26              :     friend class segments_encoded_ref;
      27              : 
      28              :     iterator(detail::path_ref const&) noexcept;
      29              :     iterator(detail::path_ref const&, int) noexcept;
      30              : 
      31          387 :     iterator(
      32              :         detail::segments_iter_impl const& it) noexcept
      33          387 :         : it_(it)
      34              :     {
      35          387 :     }
      36              : 
      37              : public:
      38              :     using value_type =
      39              :         segments_encoded_base::value_type;
      40              :     using reference =
      41              :         segments_encoded_base::reference;
      42              :     using pointer = reference;
      43              :     using difference_type = std::ptrdiff_t;
      44              :     using iterator_category =
      45              :         std::bidirectional_iterator_tag;
      46              : 
      47              :     iterator() = default;
      48              :     iterator(iterator const&) = default;
      49              :     iterator& operator=(
      50              :         iterator const&) = default;
      51              : 
      52              :     reference
      53         3839 :     operator*() const noexcept
      54              :     {
      55         3839 :         return it_.dereference();
      56              :     }
      57              : 
      58              :     pointer
      59           21 :     operator->() const noexcept
      60              :     {
      61           21 :         return it_.dereference();
      62              :     }
      63              : 
      64              :     iterator&
      65         1951 :     operator++() noexcept
      66              :     {
      67         1951 :         it_.increment();
      68         1951 :         return *this;
      69              :     }
      70              : 
      71              :     iterator&
      72         1484 :     operator--() noexcept
      73              :     {
      74         1484 :         it_.decrement();
      75         1484 :         return *this;
      76              :     }
      77              : 
      78              :     iterator
      79          598 :     operator++(int) noexcept
      80              :     {
      81          598 :         auto tmp = *this;
      82          598 :         ++*this;
      83          598 :         return tmp;
      84              :     }
      85              : 
      86              :     iterator
      87           21 :     operator--(int) noexcept
      88              :     {
      89           21 :         auto tmp = *this;
      90           21 :         --*this;
      91           21 :         return tmp;
      92              :     }
      93              : 
      94              :     bool
      95          693 :     operator==(
      96              :         iterator const& other) const noexcept
      97              :     {
      98          693 :         return it_.equal(other.it_);
      99              :     }
     100              : 
     101              :     bool
     102         3425 :     operator!=(
     103              :         iterator const& other) const noexcept
     104              :     {
     105         3425 :         return ! it_.equal(other.it_);
     106              :     }
     107              : };
     108              : 
     109              : //------------------------------------------------
     110              : 
     111              : inline
     112              : pct_string_view
     113           97 : segments_encoded_base::
     114              : front() const noexcept
     115              : {
     116           97 :     BOOST_ASSERT(! empty());
     117           97 :     return *begin();
     118              : }
     119              : 
     120              : inline
     121              : pct_string_view
     122           16 : segments_encoded_base::
     123              : back() const noexcept
     124              : {
     125           16 :     BOOST_ASSERT(! empty());
     126           16 :     return *--end();
     127              : }
     128              : 
     129              : } // urls
     130              : } // boost
     131              : 
     132              : #endif
        

Generated by: LCOV version 2.1