DGtal
2.2.0
Toggle main menu visibility
Loading...
Searching...
No Matches
ReverseIterator.h
1
16
17
#pragma once
18
30
31
#if defined(ReverseIterator_RECURSES)
32
#error Recursive header files inclusion detected in ReverseIterator.h
33
#else
// defined(ReverseIterator_RECURSES)
35
#define ReverseIterator_RECURSES
36
37
#if !defined ReverseIterator_h
39
#define ReverseIterator_h
40
42
// Inclusions
43
#include <iostream>
44
#include "DGtal/base/Common.h"
45
#include "DGtal/base/IteratorCirculatorTraits.h"
46
#include <boost/iterator.hpp>
47
#include <boost/utility.hpp>
48
#include <boost/next_prior.hpp>
49
#include <boost/iterator/iterator_adaptor.hpp>
51
52
namespace
DGtal
53
{
54
56
// template class ReverseIterator
67
68
template
<
class
Iterator>
69
class
ReverseIterator
70
:
public
boost::iterator_adaptor< ReverseIterator<Iterator>, Iterator >
71
{
72
73
typedef
boost::iterator_adaptor< ReverseIterator<Iterator>,
Iterator
>
super_t
;
74
75
friend
class
boost::iterator_core_access;
76
77
public
:
78
79
typedef
typename
IteratorCirculatorTraits<Iterator>::Type
Type
;
80
81
ReverseIterator
() {}
82
83
explicit
ReverseIterator
(
Iterator
x)
84
:
super_t
(x) {}
85
86
template
<
class
OtherIterator>
87
ReverseIterator
(
88
ReverseIterator<OtherIterator>
const
& r
89
,
typename
boost::enable_if_convertible<OtherIterator, Iterator>::type* = 0
90
)
91
:
super_t
(r.base())
92
{}
93
94
private
:
95
typename
super_t::reference
dereference
()
const
{
return
*boost::prior(this->base()); }
96
97
void
increment
() { --this->base_reference(); }
98
void
decrement
() { ++this->base_reference(); }
99
100
void
advance
(
typename
super_t::difference_type n)
101
{
102
this->base_reference() += -n;
103
}
104
105
template
<
class
OtherIterator>
106
typename
super_t::difference_type
107
distance_to
(
ReverseIterator<OtherIterator>
const
& y)
const
108
{
109
return
this->base_reference() - y.base();
110
}
111
};
112
113
}
// namespace DGtal
114
115
117
// Includes inline functions.
118
//#include "DGtal/base/ReverseIterator.ih"
119
120
// //
122
123
#endif
// !defined ReverseIterator_h
124
125
#undef ReverseIterator_RECURSES
126
#endif
// else defined(ReverseIterator_RECURSES)
DGtal::Iterator
DGtal::ReverseIterator::ReverseIterator
ReverseIterator(ReverseIterator< OtherIterator > const &r, typename boost::enable_if_convertible< OtherIterator, Iterator >::type *=0)
Definition
ReverseIterator.h:87
DGtal::ReverseIterator::dereference
super_t::reference dereference() const
Definition
ReverseIterator.h:95
DGtal::ReverseIterator::ReverseIterator
ReverseIterator(Iterator x)
Definition
ReverseIterator.h:83
DGtal::ReverseIterator::ReverseIterator
ReverseIterator()
Definition
ReverseIterator.h:81
DGtal::ReverseIterator< ConstIterator >::Type
IteratorCirculatorTraits< ConstIterator >::Type Type
Definition
ReverseIterator.h:79
DGtal::ReverseIterator::advance
void advance(typename super_t::difference_type n)
Definition
ReverseIterator.h:100
DGtal::ReverseIterator::decrement
void decrement()
Definition
ReverseIterator.h:98
DGtal::ReverseIterator< ConstIterator >::super_t
boost::iterator_adaptor< ReverseIterator< ConstIterator >, ConstIterator > super_t
Definition
ReverseIterator.h:73
DGtal::ReverseIterator::distance_to
super_t::difference_type distance_to(ReverseIterator< OtherIterator > const &y) const
Definition
ReverseIterator.h:107
DGtal::ReverseIterator::increment
void increment()
Definition
ReverseIterator.h:97
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
Definition
ClosedIntegerHalfPlane.h:49
DGtal::IteratorCirculatorTraits::Type
IteratorCirculatorType< IC >::Type Type
Definition
IteratorCirculatorTraits.h:297
src
DGtal
base
ReverseIterator.h
Generated on
for DGtal by
1.18.0