Loading [MathJax]/extensions/TeX/AMSsymbols.js
DGtal 2.0.0
ConstRangeFromPointAdapter.h
1
16
17#pragma once
18
33
34#if defined(ConstRangeFromPointAdapter_RECURSES)
35#error Recursive header files inclusion detected in ConstRangeFromPointAdapter.h
36#else // defined(ConstRangeFromPointAdapter_RECURSES)
38#define ConstRangeFromPointAdapter_RECURSES
39
40#if !defined ConstRangeFromPointAdapter_h
42#define ConstRangeFromPointAdapter_h
43
45// Inclusions
46#include "DGtal/base/ConstAlias.h"
47#include "DGtal/base/BasicFunctors.h"
48#include "DGtal/base/Circulator.h"
49#include "DGtal/base/CConstBidirectionalRangeFromPoint.h"
50#include "DGtal/base/ConstIteratorAdapter.h"
51#include "boost/concept_check.hpp"
52#include "boost/iterator/reverse_iterator.hpp"
54
55namespace DGtal
56{
57
58
60 // class ConstRangeFromPointAdapter
62
86 template <typename TRange, typename TFunctor, typename TReturnType>
88 {
89
90 BOOST_CONCEPT_ASSERT(( CConstBidirectionalRangeFromPoint<TRange> ));
91
92 // ------------------------- inner types --------------------------------
93 public:
94
95 typedef typename TRange::Point Point;
97 typedef boost::reverse_iterator<ConstIterator> ConstReverseIterator;
98
99 // ------------------------- standard services --------------------------------
100
108 ConstAlias<TFunctor> aFunctor )
109 : myRangePtr(&aRange), myFunctorPtr(&aFunctor) {}
110
117
124 {
125 if ( this != &other )
126 {
127 myRangePtr = other.myRangePtr;
129 }
130 return *this;
131 }
132
137
142 bool isValid() const { return true; }
143
144
145 // ------------------------- private data --------------------------------
146 private:
150 const TRange* myRangePtr;
154 const TFunctor* myFunctorPtr;
155
156 // ------------------------- iterator services --------------------------------
157 public:
158
164 return ConstIterator( myRangePtr->begin(), *myFunctorPtr );
165 }
166
172 return ConstIterator( myRangePtr->begin(aPoint), *myFunctorPtr );
173 }
174
180 return ConstIterator( myRangePtr->end(), *myFunctorPtr );
181 }
182
188 return ConstReverseIterator(this->end());
189 }
190
195 ConstReverseIterator rbegin(const Point& aPoint) const {
197 if ( it != this->end() ) ++it;
198 return ConstReverseIterator( it );
199 }
200
206 return ConstReverseIterator(this->begin());
207 }
208
209
210 }; //end class ConstRangeFromPointAdapter
211
212} // namespace DGtal
213
215
216
217#endif // !defined ConstRangeFromPointAdapter_h
218
219#undef ConstRangeFromPointAdapter_RECURSES
220#endif // else defined(ConstRangeFromPointAdapter_RECURSES)
Aim: This class encapsulates its parameter class so that to indicate to the user that the object/poin...
Definition ConstAlias.h:187
This class adapts any iterator so that operator* returns another element than the one pointed to by t...
ConstRangeFromPointAdapter & operator=(const ConstRangeFromPointAdapter &other)
BOOST_CONCEPT_ASSERT((CConstBidirectionalRangeFromPoint< TRange >))
boost::reverse_iterator< ConstIterator > ConstReverseIterator
ConstIteratorAdapter< typename TRange::ConstIterator, TFunctor, TReturnType > ConstIterator
ConstIterator begin(const Point &aPoint) const
ConstRangeFromPointAdapter(const ConstRangeFromPointAdapter &other)
ConstReverseIterator rbegin(const Point &aPoint) const
ConstRangeFromPointAdapter(ConstAlias< TRange > aRange, ConstAlias< TFunctor > aFunctor)
DGtal is the top-level namespace which contains all DGtal functions and types.
const Point aPoint(3, 4)