LCOV - code coverage report
Current view: top level - boost/url/impl/segments_base.hpp (source / functions) Coverage Total Hit
Test: coverage_filtered.info Lines: 100.0 % 27 27
Test Date: 2024-08-20 16:05:53 Functions: 100.0 % 9 9

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

Generated by: LCOV version 2.1