Loading [MathJax]/extensions/TeX/AMSsymbols.js
DGtal 2.0.0
DefaultImageRange.h
1
16
17#pragma once
18
32
33#if defined(DefaultImageRange_RECURSES)
34#error Recursive header files inclusion detected in DefaultImageRange.h
35#else // defined(DefaultImageRange_RECURSES)
37#define DefaultImageRange_RECURSES
38
39#if !defined DefaultImageRange_h
41#define DefaultImageRange_h
42
44// Inclusions
45#include "DGtal/base/ConstIteratorAdapter.h"
46#include "DGtal/kernel/domains/CDomain.h"
47#include "DGtal/images/CTrivialImage.h"
48#include "DGtal/images/SetValueIterator.h"
49#include "boost/concept_check.hpp"
50#include "boost/iterator/reverse_iterator.hpp"
52
53namespace DGtal
54{
55
56
58 // class DefaultImageRange
60
76 template <typename TImage>
78 {
79
80
81 // ------------------------- inner types --------------------------------
82 public:
83
85 typedef typename TImage::Domain Domain;
86 typedef typename TImage::Point Point;
87 typedef typename TImage::Value Value;
88
92 typedef boost::reverse_iterator<ConstIterator> ConstReverseIterator;
93
97
98 // ------------------------- standard services --------------------------------
99
105 DefaultImageRange( TImage& aImage )
106 : myImagePtr(&aImage) {}
107
114
121 {
122 if ( this != &other )
123 {
124 myImagePtr = other.myImagePtr;
125 }
126 return *this;
127 }
128
133
138 bool isValid() const { return true; }
139
140
141
142 // ------------------------- private data --------------------------------
143 private:
147 TImage* myImagePtr;
148
149 // ------------------------- iterator services (read-only) --------------------------------
150 public:
151
157 Domain d = myImagePtr->domain();
158 return ConstIterator( d.begin(), *myImagePtr );
159 }
160
167 Domain d = myImagePtr->domain();
168 return ConstIterator( d.begin(aPoint), *myImagePtr );
169 }
170
176 Domain d = myImagePtr->domain();
177 return ConstIterator( d.end(), *myImagePtr );
178 }
179
185 return ConstReverseIterator(this->end());
186 }
187
193 ConstReverseIterator rbegin(const Point& aPoint) const {
194 Domain d = myImagePtr->domain();
195 typename Domain::ConstIterator itOnPts = d.begin(aPoint);
196 if ( itOnPts != d.end() ) ++itOnPts;
197 ConstIterator itOnVals( itOnPts, *myImagePtr );
198 return ConstReverseIterator( itOnVals );
199 }
200
206 return ConstReverseIterator(this->begin());
207 }
208
209 // ------------------------- iterator services (write-only) --------------------------------
210 public:
215 OutputIterator outputIterator() const {
216 Domain d = myImagePtr->domain();
217 return OutputIterator( d.begin(), *myImagePtr );
218 }
219
226 Domain d = myImagePtr->domain();
227 return OutputIterator( d.begin(aPoint), *myImagePtr );
228 }
229
235 Domain d = myImagePtr->domain();
236 return ReverseOutputIterator( d.rbegin(), *myImagePtr );
237 }
238
245 Domain d = myImagePtr->domain();
246 return ReverseOutputIterator( d.rbegin(aPoint), *myImagePtr );
247 }
248
249 }; //end class DefaultImageRange
250
251} // namespace DGtal
252
254
255
256#endif // !defined DefaultImageRange_h
257
258#undef DefaultImageRange_RECURSES
259#endif // else defined(DefaultImageRange_RECURSES)
This class adapts any iterator so that operator* returns another element than the one pointed to by t...
boost::reverse_iterator< ConstIterator > ConstReverseIterator
ReverseOutputIterator routputIterator() const
DefaultImageRange(TImage &aImage)
OutputIterator outputIterator() const
SetValueIterator< TImage > OutputIterator
output iterator types
ConstReverseIterator rend() const
SetValueIterator< TImage, typename Domain::ConstReverseIterator > ReverseOutputIterator
BOOST_CONCEPT_ASSERT((concepts::CDomain< Domain >))
constant iterator types
ConstReverseIterator rbegin() const
ConstIterator begin() const
ReverseOutputIterator routputIterator(const Point &aPoint) const
DefaultImageRange(const DefaultImageRange &other)
ConstReverseIterator rbegin(const Point &aPoint) const
OutputIterator outputIterator(const Point &aPoint) const
ConstIterator end() const
DefaultImageRange & operator=(const DefaultImageRange &other)
ConstIterator begin(const Point &aPoint) const
ConstIteratorAdapter< typename Domain::ConstIterator, TImage, Value > ConstIterator
BOOST_CONCEPT_ASSERT((concepts::CTrivialImage< TImage >))
Aim: implements an output iterator, which is able to write values in an underlying image,...
DGtal is the top-level namespace which contains all DGtal functions and types.
Aim: This concept represents a digital domain, i.e. a non mutable subset of points of the given digit...
Definition CDomain.h:130
Aim: Defines the concept describing an image without extra ranges, which is a refinement of CTrivialC...
const Point aPoint(3, 4)