DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
DefaultConstImageRange.h
1 
17 #pragma once
18 
33 #if defined(DefaultConstImageRange_RECURSES)
34 #error Recursive header files inclusion detected in DefaultConstImageRange.h
35 #else // defined(DefaultConstImageRange_RECURSES)
36 
37 #define DefaultConstImageRange_RECURSES
38 
39 #if !defined DefaultConstImageRange_h
40 
41 #define DefaultConstImageRange_h
42 
44 // Inclusions
45 #include "DGtal/base/ConstIteratorAdapter.h"
46 #include "DGtal/kernel/domains/CDomain.h"
47 #include "DGtal/images/CTrivialConstImage.h"
48 #include "DGtal/images/SetValueIterator.h"
49 #include "boost/concept_check.hpp"
51 
52 namespace DGtal
53 {
54 
55 
57  // class DefaultConstImageRange
59 
74  template <typename TImage>
76  {
77 
78 
79  // ------------------------- inner types --------------------------------
80  public:
81 
83  typedef typename TImage::Domain Domain;
84  typedef typename TImage::Point Point;
85  typedef typename TImage::Value Value;
86 
90  typedef std::reverse_iterator<ConstIterator> ConstReverseIterator;
91 
92  // ------------------------- standard services --------------------------------
93 
99  DefaultConstImageRange( const TImage& aImage )
100  : myImagePtr(&aImage) {}
101 
107  : myImagePtr(other.myImagePtr) {}
108 
115  {
116  if ( this != &other )
117  {
118  myImagePtr = other.myImagePtr;
119  }
120  return *this;
121  }
122 
127 
132  bool isValid() const { return true; }
133 
134 
135 
136  // ------------------------- private data --------------------------------
137  private:
141  const TImage* myImagePtr;
142 
143  // ------------------------- iterator services (read-only) --------------------------------
144  public:
145 
151  Domain d = myImagePtr->domain();
152  return ConstIterator( d.begin(), *myImagePtr );
153  }
154 
160  ConstIterator begin(const Point& aPoint) const {
161  Domain d = myImagePtr->domain();
162  return ConstIterator( d.begin(aPoint), *myImagePtr );
163  }
164 
169  ConstIterator end() const {
170  Domain d = myImagePtr->domain();
171  return ConstIterator( d.end(), *myImagePtr );
172  }
173 
179  return ConstReverseIterator(this->end());
180  }
181 
187  ConstReverseIterator rbegin(const Point& aPoint) const {
188  Domain d = myImagePtr->domain();
189  typename Domain::ConstIterator itOnPts = d.begin(aPoint);
190  if ( itOnPts != d.end() ) ++itOnPts;
191  ConstIterator itOnVals( itOnPts, *myImagePtr );
192  return ConstReverseIterator( itOnVals );
193  }
194 
200  return ConstReverseIterator(this->begin());
201  }
202 
203 
204  }; //end class DefaultConstImageRange
205 
206 } // namespace DGtal
207 
209 
210 
211 #endif // !defined DefaultConstImageRange_h
212 
213 #undef DefaultConstImageRange_RECURSES
214 #endif // else defined(DefaultConstImageRange_RECURSES)