LCOV - code coverage report
Current view: top level - opt/homebrew/include/boost/iterator - reverse_iterator.hpp (source / functions) Hit Total Coverage
Test: total_coverage.info Lines: 10 10 100.0 %
Date: 2026-06-25 07:23:43 Functions: 5 5 100.0 %

          Line data    Source code
       1             : // (C) Copyright David Abrahams 2002.
       2             : // (C) Copyright Jeremy Siek    2002.
       3             : // (C) Copyright Thomas Witt    2002.
       4             : // Distributed under the Boost Software License, Version 1.0. (See
       5             : // accompanying file LICENSE_1_0.txt or copy at
       6             : // http://www.boost.org/LICENSE_1_0.txt)
       7             : #ifndef BOOST_ITERATOR_REVERSE_ITERATOR_23022003THW_HPP
       8             : #define BOOST_ITERATOR_REVERSE_ITERATOR_23022003THW_HPP
       9             : 
      10             : #include <boost/iterator/iterator_adaptor.hpp>
      11             : #include <boost/iterator/enable_if_convertible.hpp>
      12             : 
      13             : namespace boost {
      14             : namespace iterators {
      15             : 
      16             : template< typename Iterator >
      17             : class reverse_iterator :
      18             :     public iterator_adaptor< reverse_iterator< Iterator >, Iterator >
      19             : {
      20             :     friend class iterator_core_access;
      21             : 
      22             : private:
      23             :     using super_t = iterator_adaptor< reverse_iterator< Iterator >, Iterator >;
      24             : 
      25             : public:
      26             :     reverse_iterator() = default;
      27             : 
      28       81522 :     explicit reverse_iterator(Iterator x) :
      29       40761 :         super_t(x)
      30       81522 :     {}
      31             : 
      32             :     template<
      33             :         typename OtherIterator,
      34             :         typename = enable_if_convertible_t< OtherIterator, Iterator >
      35             :     >
      36             :     reverse_iterator(reverse_iterator< OtherIterator > const& r) :
      37             :         super_t(r.base())
      38             :     {}
      39             : 
      40             : private:
      41       61040 :     typename super_t::reference dereference() const
      42             :     {
      43       61040 :         Iterator it = this->base_reference();
      44       61040 :         --it;
      45       61040 :         return *it;
      46             :     }
      47             : 
      48       27799 :     void increment() { --this->base_reference(); }
      49             :     void decrement() { ++this->base_reference(); }
      50             : 
      51             :     void advance(typename super_t::difference_type n)
      52             :     {
      53             :         this->base_reference() -= n;
      54             :     }
      55             : 
      56             :     template< typename OtherIterator >
      57             :     typename super_t::difference_type distance_to(reverse_iterator< OtherIterator > const& y) const
      58             :     {
      59             :         return this->base_reference() - y.base();
      60             :     }
      61             : };
      62             : 
      63             : template< typename Iterator >
      64       40761 : inline reverse_iterator< Iterator > make_reverse_iterator(Iterator x)
      65             : {
      66       40761 :     return reverse_iterator< Iterator >(x);
      67             : }
      68             : 
      69             : } // namespace iterators
      70             : 
      71             : using iterators::reverse_iterator;
      72             : using iterators::make_reverse_iterator;
      73             : 
      74             : } // namespace boost
      75             : 
      76             : #endif // BOOST_ITERATOR_REVERSE_ITERATOR_23022003THW_HPP

Generated by: LCOV version 1.16