DGtal  0.6.devel
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Groups Pages
BasicPointFunctors.ih
1 
29 
30 #include <cstdlib>
32 
34 // IMPLEMENTATION of inline methods.
36 template <typename S>
37 inline
38 DGtal::Projector<S>::Projector(const Integer& aDefaultInteger)
39  : myDims(), myDefaultInteger(aDefaultInteger)
40 { //default projection
41  Dimension k = 0;
42  for ( ; k < dimension; ++k)
43  {
44  myDims[k] = k;
45  }
46 }
47 
48 template <typename S>
49 template <typename TIterator>
50 inline
51 void
52 DGtal::Projector<S>::init( const TIterator& itb, const TIterator& ite )
53 {
54  BOOST_STATIC_ASSERT ((boost::is_same< Dimension,
55  typename std::iterator_traits<TIterator>::value_type >::value));
56 
57  TIterator it = itb;
58  Dimension k = 0;
59  for ( ; ( (k < dimension)&&(it != ite) ); ++it, ++k)
60  {
61  myDims[k] = *it;
62  }
63  for ( ; k < dimension; ++k)
64  {
65  myDims[k] = dimension;
66  }
67 }
68 
69 template <typename S>
70 template <typename TInputPoint>
71 inline
73 DGtal::Projector<S>::operator()( const TInputPoint& aPoint ) const
74 {
75  BOOST_STATIC_ASSERT ((boost::is_same< typename TInputPoint::Coordinate,
76  Integer >::value));
77 
78  Point res;
79 
80 #ifdef CPP11_ARRAY
81  typename std::array<Dimension,dimension>::const_iterator it = myDims.begin();
82  typename std::array<Dimension,dimension>::const_iterator itEnd = myDims.end();
83 #else
84  typename boost::array<Dimension,dimension>::const_iterator it = myDims.begin();
85  typename boost::array<Dimension,dimension>::const_iterator itEnd = myDims.end();
86 #endif
87 
88  Dimension k = 0;
89  for ( ; it != itEnd; ++it, ++k)
90  {
91  Dimension l = *it;
92  if (l < TInputPoint::dimension)
93  res[k] = aPoint.at(l);
94  else
95  res[k] = myDefaultInteger;
96  }
97 
98  return res;
99 }
100 //------------------------------------------------------------------------------
101 
102 
103 // //
105 
106