DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
TrueLocalEstimatorOnPoints.ih
1 
30 
31 #include <cstdlib>
33 
35 // IMPLEMENTATION of inline methods.
37 
39 // ----------------------- Standard services ------------------------------
40 
41 
42 // ------------------------------------------------------------------------
43 template <typename CIt, typename PShape, typename PShapeFunctor>
44 inline
46  :myH(0.0), myBegin(), myEnd(), myFunctorPtr(0)
47 {
48 }
49 
50 // ------------------------------------------------------------------------
51 template <typename CIt, typename PShape, typename PShapeFunctor>
52 inline
53 bool
55 {
56  return ( (myH > 0)&&(myFunctorPtr != 0) );
57 }
58 
59 // ------------------------------------------------------------------------
60 template <typename CIt, typename PShape, typename PShapeFunctor>
61 inline
62 void
64 ::init(const double h,
65  const ConstIterator& itb,
66  const ConstIterator& ite)
67 {
68  myH = h;
69  ASSERT(myH > 0);
70  myBegin = itb;
71  myEnd = ite;
72 }
73 
74 // ------------------------------------------------------------------------
75 template <typename CIt, typename PShape, typename PShapeFunctor>
76 inline
77 void
80 {
81  myFunctorPtr = new ParametricShapeFunctor(aShapePtr);
82 }
83 
84 // ------------------------------------------------------------------------
85 template <typename CIt, typename PShape, typename PShapeFunctor>
86 inline
88 {
89  delete myFunctorPtr;
90 }
91 
92 // ------------------------------------------------------------------------
93 template <typename CIt, typename PShape, typename PShapeFunctor>
94 inline
97 ::eval(const ConstIterator& it) const
98 {
99  ASSERT( isValid() );
100  RealPoint p( *it );
101  p *= myH;
102  return myFunctorPtr->operator()(p);
103 }
104 
105 // ------------------------------------------------------------------------
106 template <typename CIt, typename PShape, typename PShapeFunctor>
107 template <typename OutputIterator>
108 inline
109 OutputIterator
111 ::eval(const ConstIterator& itb,
112  const ConstIterator& ite,
113  OutputIterator result) const
114 {
115  ASSERT( isValid() );
116  // do-while loop to deal with the case of a whole circular range
117  if (isNotEmpty(itb, ite))
118  {
119  ConstIterator it = itb;
120  do
121  {
122  *result++ = eval( *it );
123  ++it;
124  } while (it != ite);
125  }
126  return result;
127 }