DGtal
2.2.0
Toggle main menu visibility
Loading...
Searching...
No Matches
ArrayImageIterator.h
1
16
17
#pragma once
18
28
29
#if defined(ArrayImageIterator_RECURSES)
30
#error Recursive header files inclusion detected in ArrayImageIterator.h
31
#else
// defined(ArrayImageIterator_RECURSES)
33
#define ArrayImageIterator_RECURSES
34
35
#if !defined ArrayImageIterator_h
37
#define ArrayImageIterator_h
38
40
// Inclusions
41
#include <ostream>
42
#include <type_traits>
43
#include <boost/iterator/iterator_facade.hpp>
44
#include <DGtal/kernel/domains/Linearizer.h>
46
47
namespace
DGtal
48
{
49
51
72
template
<
73
typename
TIterableClass
74
>
75
class
ArrayImageIterator
76
:
public
boost::iterator_facade <
77
ArrayImageIterator<TIterableClass>,
78
typename TIterableClass::Value,
79
std::random_access_iterator_tag,
80
decltype( ((new TIterableClass))->dereference( TIterableClass::Point::diagonal(0), typename TIterableClass::Point::Coordinate(0) ) )
81
>
82
{
83
// ----------------------- Standard services ------------------------------
84
public
:
85
86
// Typedefs
87
using
Self
=
ArrayImageIterator<TIterableClass>
;
88
using
IterableClass
= TIterableClass;
89
using
Domain
=
typename
IterableClass::Domain
;
90
using
Point
=
typename
Domain::Point
;
91
using
Linearizer
=
DGtal::Linearizer<Domain, ColMajorStorage>
;
92
using
Reference
=
decltype
( ((
new
IterableClass
)->dereference( Point::diagonal(0),
typename
Point::Coordinate(0) ) ));
93
95
ArrayImageIterator
();
96
104
ArrayImageIterator
(
IterableClass
* anIterableClassPtr,
Domain
const
& aFullDomain,
Domain
const
& aViewDomain,
Point
const
&
aPoint
);
105
112
ArrayImageIterator
(
IterableClass
* anIterableClassPtr,
Domain
const
& aFullDomain,
Domain
const
& aViewDomain );
113
119
ArrayImageIterator
(
IterableClass
* anIterableClassPtr,
Domain
const
& aFullDomain );
120
127
ArrayImageIterator
(
IterableClass
* anIterableClassPtr,
Domain
const
& aFullDomain,
Domain
const
& aViewDomain,
bool
/* last */
);
128
134
ArrayImageIterator
(
IterableClass
* anIterableClassPtr,
Domain
const
& aFullDomain,
bool
/* last */
);
135
140
template
<
typename
TOtherIterableClass >
141
ArrayImageIterator
(
142
ArrayImageIterator<TOtherIterableClass>
const
& other,
143
typename
std::enable_if< std::is_convertible<TOtherIterableClass*, IterableClass*>::value >::type* = 0
144
);
145
150
template
<
typename
TOtherIterableClass >
151
ArrayImageIterator
(
152
ArrayImageIterator<TOtherIterableClass>
&& other,
153
typename
std::enable_if< std::is_convertible<TOtherIterableClass*, IterableClass*>::value >::type* = 0
154
) noexcept;
155
157
~
ArrayImageIterator
();
158
165
template < typename TOtherIterableClass >
166
typename
std
::enable_if<
167
std
::is_convertible<TOtherIterableClass*,
IterableClass
*>::value,
168
Self
& >::type
169
operator= (
170
ArrayImageIterator
<TOtherIterableClass> const& other
171
);
172
179
template < typename TOtherIterableClass >
180
typename
std
::enable_if<
181
std
::is_convertible<TOtherIterableClass*,
IterableClass
*>::value,
182
Self
& >::type
183
operator= (
184
ArrayImageIterator
<TOtherIterableClass> && other
185
);
186
187
188
// ----------------------- Interface --------------------------------------
189
public:
190
194
inline
Point
const&
getPoint
() const noexcept;
195
200
inline
201
std
::ptrdiff_t
distance_to
(
Point
const&
aPoint
) const noexcept;
202
207
void
selfDisplay
(
std
::ostream & out ) const;
208
213
bool
isValid
() const;
214
215
// ------------------------- Private Data --------------------------------
216
private:
217
IterableClass
*
myIterableClassPtr
;
218
Domain
myFullDomain
;
219
Domain
myViewDomain
;
220
Point
myFullExtent
;
221
Point
myViewExtent
;
222
Point
myPoint
;
223
typename
Point
::
Coordinate
myFullIndex
;
224
225
// ------------------------- Hidden services ------------------------------
226
private:
227
228
// Friendship
229
template <class> friend class
ArrayImageIterator
;
230
friend class
boost
::
iterator_core_access
;
231
233
void
increment
();
234
236
void
decrement
();
237
241
inline
242
bool
equal
(
Self
const& other ) const;
243
245
inline
246
Reference
dereference
() const;
247
252
inline
253
std
::ptrdiff_t
distance_to
(
Self
const& other ) const ;
254
259
void
advance
(
std
::ptrdiff_t n );
260
261
};
// end of class ArrayImageIterator
262
263
270
template <typename TIterableClass>
271
std
::ostream&
272
operator<< (
std
::ostream & out, const
ArrayImageIterator
<TIterableClass> &
object
);
273
274
}
// namespace DGtal
275
276
278
// Includes inline functions.
279
#include "DGtal/images/ArrayImageIterator.ih"
280
281
// //
283
284
#endif
// !defined ArrayImageIterator_h
285
286
#undef ArrayImageIterator_RECURSES
287
#endif
// else defined(ArrayImageIterator_RECURSES)
DGtal::ArrayImageIterator
Aim: Random access iterator over an image given his definition domain and viewable domain.
Definition
ArrayImageIterator.h:82
DGtal::ArrayImageIterator< Self >::myViewExtent
Point myViewExtent
Definition
ArrayImageIterator.h:221
DGtal::ArrayImageIterator::ArrayImageIterator
ArrayImageIterator()
Default constructor.
DGtal::ArrayImageIterator< Self >::getPoint
Point const & getPoint() const noexcept
DGtal::ArrayImageIterator< Self >::equal
bool equal(Self const &other) const
DGtal::ArrayImageIterator< Self >::selfDisplay
void selfDisplay(std::ostream &out) const
DGtal::ArrayImageIterator< Self >::decrement
void decrement()
DGtal::ArrayImageIterator< Self >::IterableClass
Self IterableClass
Definition
ArrayImageIterator.h:88
DGtal::ArrayImageIterator< Self >::myFullIndex
Point::Coordinate myFullIndex
Definition
ArrayImageIterator.h:223
DGtal::ArrayImageIterator< Self >::myIterableClassPtr
IterableClass * myIterableClassPtr
Definition
ArrayImageIterator.h:217
DGtal::ArrayImageIterator::ArrayImageIterator
ArrayImageIterator(IterableClass *anIterableClassPtr, Domain const &aFullDomain, bool)
DGtal::ArrayImageIterator::ArrayImageIterator
ArrayImageIterator(IterableClass *anIterableClassPtr, Domain const &aFullDomain, Domain const &aViewDomain, Point const &aPoint)
DGtal::ArrayImageIterator::ArrayImageIterator
ArrayImageIterator(IterableClass *anIterableClassPtr, Domain const &aFullDomain)
DGtal::ArrayImageIterator< Self >::distance_to
std::ptrdiff_t distance_to(Point const &aPoint) const noexcept
DGtal::ArrayImageIterator::ArrayImageIterator
ArrayImageIterator(IterableClass *anIterableClassPtr, Domain const &aFullDomain, Domain const &aViewDomain)
DGtal::ArrayImageIterator< Self >::increment
void increment()
DGtal::ArrayImageIterator< Self >::Point
typename Domain::Point Point
Definition
ArrayImageIterator.h:90
DGtal::ArrayImageIterator< Self >::isValid
bool isValid() const
DGtal::ArrayImageIterator< Self >::myFullDomain
Domain myFullDomain
Definition
ArrayImageIterator.h:218
DGtal::ArrayImageIterator::ArrayImageIterator
ArrayImageIterator(ArrayImageIterator< TOtherIterableClass > &&other, typename std::enable_if< std::is_convertible< TOtherIterableClass *, IterableClass * >::value >::type *=0) noexcept
DGtal::ArrayImageIterator< Self >::Self
ArrayImageIterator< Self > Self
Definition
ArrayImageIterator.h:87
DGtal::ArrayImageIterator::ArrayImageIterator
ArrayImageIterator(IterableClass *anIterableClassPtr, Domain const &aFullDomain, Domain const &aViewDomain, bool)
DGtal::ArrayImageIterator< Self >::iterator_core_access
friend class boost::iterator_core_access
Definition
ArrayImageIterator.h:230
DGtal::ArrayImageIterator< Self >::myFullExtent
Point myFullExtent
Definition
ArrayImageIterator.h:220
DGtal::ArrayImageIterator< Self >::dereference
Reference dereference() const
DGtal::ArrayImageIterator< Self >::myPoint
Point myPoint
Definition
ArrayImageIterator.h:222
DGtal::ArrayImageIterator< Self >::Reference
decltype(((new IterableClass) ->dereference(Point::diagonal(0), typename Point::Coordinate(0)))) Reference
Definition
ArrayImageIterator.h:92
DGtal::ArrayImageIterator< Self >::advance
void advance(std::ptrdiff_t n)
DGtal::ArrayImageIterator< Self >::myViewDomain
Domain myViewDomain
Definition
ArrayImageIterator.h:219
DGtal::ArrayImageIterator< Self >::Domain
typename IterableClass::Domain Domain
Definition
ArrayImageIterator.h:89
DGtal::ArrayImageIterator< Self >::Linearizer
DGtal::Linearizer< Domain, ColMajorStorage > Linearizer
Definition
ArrayImageIterator.h:91
DGtal::ArrayImageIterator::ArrayImageIterator
ArrayImageIterator(ArrayImageIterator< TOtherIterableClass > const &other, typename std::enable_if< std::is_convertible< TOtherIterableClass *, IterableClass * >::value >::type *=0)
DGtal::ArrayImageIterator::ArrayImageIterator
friend class ArrayImageIterator
Friendship of interoperability.
Definition
ArrayImageIterator.h:229
DGtal::HyperRectDomain< Space >::Point
Space::Point Point
Definition
HyperRectDomain.h:113
DGtal
DGtal is the top-level namespace which contains all DGtal functions and types.
Definition
ClosedIntegerHalfPlane.h:49
boost
Definition
Boost.dox:28
std
STL namespace.
DGtal::Coordinate
DGtal::Linearizer
Aim: Linearization and de-linearization interface for domains.
Definition
Linearizer.h:78
aPoint
const Point aPoint(3, 4)
src
DGtal
images
ArrayImageIterator.h
Generated on
for DGtal by
1.18.0