DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
ConstImageAdapter.h
1 
17 #pragma once
18 
36 #if defined(ConstImageAdapter_RECURSES)
37 #error Recursive header files inclusion detected in ConstImageAdapter.h
38 #else // defined(ConstImageAdapter_RECURSES)
39 
40 #define ConstImageAdapter_RECURSES
41 
42 #if !defined ConstImageAdapter_h
43 
44 #define ConstImageAdapter_h
45 
47 // Inclusions
48 #include <iostream>
49 #include "DGtal/base/Common.h"
50 #include "DGtal/base/ConceptUtils.h"
51 #include "DGtal/images/CImage.h"
52 #include "DGtal/kernel/domains/CDomain.h"
53 
54 #include "DGtal/images/DefaultConstImageRange.h"
55 #include <tr1/tuple>
57 
58 namespace DGtal
59 {
61 // Template class ConstImageAdapter
101 template <typename TImageContainer,
102  typename TNewDomain,
103  typename TFunctorD,
104  typename TNewValue, typename TFunctorV>
106 {
107 
108  // ----------------------- Types ------------------------------
109 
110 public:
112 
116 
117  typedef TNewDomain Domain;
118  typedef typename TNewDomain::Point Point;
119  typedef TNewValue Value;
120 
123 
125  typedef TImageContainer ImageContainer;
126 
128 
129  // ----------------------- Standard services ------------------------------
130 
131 public:
132 
133  ConstImageAdapter(ImageContainer &anImage, const Domain &aDomain, const TFunctorD &aFD, const TFunctorV &aFV):
134  myImagePtr(&anImage), mySubDomainPtr(&aDomain), myFD(&aFD), myFV(&aFV)
135  {
136 #ifdef DEBUG_VERBOSE
137  trace.warning() << "ConstImageAdapter Ctor fromRef " << std::endl;
138 #endif
139  }
140 
147  {
148 #ifdef DEBUG_VERBOSE
149  trace.warning() << "ConstImageAdapter assignment " << std::endl;
150 #endif
151  if (&other != this)
152  {
153  myImagePtr = other.myImagePtr;
155  myFD = other.myFD;
156  myFV = other.myFV;
157  }
158  return *this;
159  }
160 
161 
167 
168  // ----------------------- Interface --------------------------------------
169 public:
170 
172 
178  const Domain & domain() const
179  {
180  return (*mySubDomainPtr);
181  }
182 
190  {
191  return ConstRange( *this );
192  }
193 
195 
196 
206  Value operator()(const Point & aPoint) const
207  {
208  ASSERT(this->domain().isInside(aPoint));
209 
210  return myFV->operator()(myImagePtr->operator()(myFD->operator()(aPoint)));
211  }
212 
213 
215 
220  void selfDisplay ( std::ostream & out ) const;
221 
229  bool isValid() const
230  {
231  return (myImagePtr->isValid() );
232  }
233 
234 
239  const ImageContainer * getPointer() const
240  {
241  return myImagePtr;
242  }
243 
244  // ------------------------- Protected Datas ------------------------------
245 private:
250 #ifdef DEBUG_VERBOSE
251  trace.warning() << "ConstImageAdapter Ctor default " << std::endl;
252 #endif
253  }
254 
255  // ------------------------- Private Datas --------------------------------
256 protected:
257 
260 
265 
269  const TFunctorD* myFD;
270 
274  const TFunctorV* myFV;
275 
276 private:
277 
278 
279  // ------------------------- Internals ------------------------------------
280 private:
281 
282 }; // end of class ConstImageAdapter
283 
284 
291 template <typename TImageContainer, typename TNewDomain, typename TFunctorD, typename TNewValue, typename TFunctorV>
292 std::ostream&
293 operator<< ( std::ostream & out, const ConstImageAdapter<TImageContainer, TNewDomain, TFunctorD, TNewValue, TFunctorV> & object );
294 
295 } // namespace DGtal
296 
297 
299 // Includes inline functions.
300 #include "DGtal/images/ConstImageAdapter.ih"
301 
302 // //
304 
305 #endif // !defined ConstImageAdapter_h
306 
307 #undef ConstImageAdapter_RECURSES
308 #endif // else defined(ConstImageAdapter_RECURSES)