LCOV - code coverage report
Current view: top level - boost/url/impl - segments_encoded_base.hpp (source / functions) Hit Total Coverage
Test: coverage_filtered.info Lines: 31 31 100.0 %
Date: 2024-03-15 21:27:27 Functions: 11 11 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_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 1.15