17 #ifndef __itkImageConstIterator_h
18 #define __itkImageConstIterator_h
24 #include "itkNumericTraits.h"
84 template<
typename TImage>
95 itkStaticConstMacro(ImageIteratorDimension,
unsigned int,
96 TImage::ImageDimension);
138 m_PixelAccessorFunctor()
145 m_PixelAccessorFunctor.SetBegin( m_Buffer );
165 m_PixelAccessorFunctor.SetBegin( m_Buffer );
174 m_Buffer = m_Image->GetBufferPointer();
177 #ifdef ITK_USE_REGION_VALIDATION_IN_ITERATORS
178 if( region.GetNumberOfPixels() > 0 )
180 const RegionType & bufferedRegion = m_Image->GetBufferedRegion();
181 itkAssertOrThrowMacro( (bufferedRegion.IsInside( m_Region )),
182 "Region " << m_Region <<
" is outside of buffered region " << bufferedRegion );
187 m_Offset = m_Image->ComputeOffset( m_Region.GetIndex() );
188 m_BeginOffset = m_Offset;
194 if (m_Region.GetNumberOfPixels() == 0)
197 m_EndOffset = m_BeginOffset;
203 for (
unsigned int i=0; i < ImageIteratorDimension; ++i)
207 m_EndOffset = m_Image->ComputeOffset( ind );
211 m_PixelAccessor = ptr->GetPixelAccessor();
212 m_PixelAccessorFunctor.SetPixelAccessor( m_PixelAccessor );
213 m_PixelAccessorFunctor.SetBegin( m_Buffer );
229 m_PixelAccessorFunctor.SetBegin( m_Buffer );
235 static unsigned int GetImageIteratorDimension()
236 {
return ImageIteratorDimension; }
259 operator<=(
const Self &it)
const
279 operator>=(
const Self &it)
const
289 operator>(
const Self &it)
const
301 {
return m_Image->ComputeIndex( static_cast<OffsetValueType>(m_Offset) ); }
306 { m_Offset = m_Image->ComputeOffset( ind ); }
315 {
return m_Image.GetPointer(); }
319 {
return m_PixelAccessorFunctor.Get(*(m_Buffer+m_Offset)); }
325 {
return *(m_Buffer + m_Offset); }
331 Self Begin(
void)
const;
337 m_Offset = m_BeginOffset;
344 Self End(
void)
const;
350 m_Offset = m_EndOffset;
355 bool IsAtBegin(
void)
const
357 return (m_Offset == m_BeginOffset);
362 bool IsAtEnd(
void)
const
364 return (m_Offset == m_EndOffset);
385 #define ITK_TEMPLATE_ImageConstIterator(_, EXPORT, x, y) namespace itk { \
386 _(1(class EXPORT ImageConstIterator< ITK_TEMPLATE_1 x >)) \
387 namespace Templates { typedef ImageConstIterator< ITK_TEMPLATE_1 x > ImageConstIterator##y; } \
391 #if ITK_TEMPLATE_EXPLICIT
392 # include "Templates/itkImageConstIterator+-.h"