41 #include "DGtal/images/ImageContainerBySTLVector.h"
45 template <
typename Domain,
typename T>
47 ImageContainerBySTLVector<Domain, T>::
48 ImageContainerBySTLVector(
const Domain &aDomain ) :
49 myDomain(aDomain), myExtent(aDomain.extent())
55 template <
typename Domain,
typename T>
60 myDomain(other.myDomain), myExtent(other.myExtent)
64 template <
typename Domain,
typename T>
72 std::vector<T>::operator=(other);
81 template <
typename Domain,
typename T>
89 template <
typename Domain,
typename T>
94 ASSERT(this->domain().isInside(aPoint));
95 return this->operator[](linearized( aPoint ) );
110 template <
typename Domain,
typename T>
115 ASSERT(this->domain().isInside(aPoint));
116 this->operator[](linearized( aPoint )) = V;
120 template <
typename Domain,
typename T>
129 template <
typename Domain,
typename T>
138 template <
typename Domain,
typename T>
146 template <
typename Domain,
typename T>
155 template <
typename Domain,
typename T>
160 myDomain =
Domain(myDomain.lowerBound()+aShift, myDomain.upperBound()+aShift);
164 template <
typename TDomain,
typename V>
169 out <<
"[Image - STLVector] size=" << this->size() <<
" valuetype="
170 <<
sizeof(V) <<
"bytes Domain=" << myDomain;
174 template <
typename Domain,
typename T>
179 return (
this != NULL);
184 template <
typename D,
typename V>
189 return "ImageContainerBySTLVector";
206 template <
typename Domain,
int dimension>
210 typedef typename Domain::Point
Point;
211 typedef typename Domain::Size Size;
222 static Size apply(
const Point & aPoint,
const Point & lowerBound,
223 const Point & extent )
225 Size pos = aPoint[ 0 ] - lowerBound[ 0 ] ;
227 for (
typename Domain::Dimension k = 1 ; k < dimension ; ++k)
229 multiplier *= extent[ k-1 ];
230 pos += multiplier * ( aPoint[ k ] - lowerBound[ k ] );
240 template <
typename Domain >
241 struct linearizer<
Domain, 1 >
243 typedef typename Domain::Point
Point;
244 typedef typename Domain::Size Size;
246 static Size apply(
const Point & aPoint,
247 const Point & lowerBound,
250 return aPoint[ 0 ] - lowerBound[ 0 ];
258 template <
typename Domain >
259 struct linearizer<
Domain, 2 >
261 typedef typename Domain::Point
Point;
262 typedef typename Domain::Size Size;
264 static Size apply(
const Point & aPoint,
265 const Point & lowerBound,
266 const Point & extent )
268 return ( aPoint[ 0 ] - lowerBound[ 0 ] ) + extent[ 0 ] *
269 (aPoint[ 1 ] - lowerBound[ 1 ] );
277 template <
typename Domain >
278 struct linearizer<
Domain, 3 >
280 typedef typename Domain::Point
Point;
281 typedef typename Domain::Size Size;
283 static Size apply(
const Point & aPoint,
284 const Point & lowerBound,
285 const Point & extent )
287 Size res = aPoint[ 0 ] - lowerBound[ 0 ];
288 Size multiplier = extent[ 0 ];
289 res += multiplier * ( aPoint[ 1 ] - lowerBound[ 1 ] );
290 multiplier *= extent[ 1 ];
291 res += multiplier * ( aPoint[ 2 ] - lowerBound[ 2 ] );
301 template<
typename Domain,
typename T>
303 typename ImageContainerBySTLVector<Domain, T>::Size
306 return linearizer<Domain, Domain::dimension >::apply( aPoint,
307 myDomain.lowerBound(),