ITK  5.4.0
Insight Toolkit
itkImageIterator.h
Go to the documentation of this file.
1/*=========================================================================
2 *
3 * Copyright NumFOCUS
4 *
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
8 *
9 * https://www.apache.org/licenses/LICENSE-2.0.txt
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 *
17 *=========================================================================*/
18#ifndef itkImageIterator_h
19#define itkImageIterator_h
20
22
23namespace itk
24{
64template <typename TImage>
65class ITK_TEMPLATE_EXPORT ImageIterator : public ImageConstIterator<TImage>
66{
67public:
68
71
76 static constexpr unsigned int ImageIteratorDimension = TImage::ImageDimension;
77
80
82 using typename Superclass::IndexType;
83 using typename Superclass::SizeType;
84 using typename Superclass::OffsetType;
85 using typename Superclass::RegionType;
86 using typename Superclass::ImageType;
87 using typename Superclass::PixelContainer;
89 using typename Superclass::InternalPixelType;
90 using typename Superclass::PixelType;
91 using typename Superclass::AccessorType;
92
95 ImageIterator() = default;
96
98 ~ImageIterator() override = default;
99
102 ImageIterator(const Self & it);
103
106 ImageIterator(TImage * ptr, const RegionType & region);
107
110 Self &
111 operator=(const Self & it);
112
114 void
115 Set(const PixelType & value) const
116 {
117 // const_cast is needed here because m_Buffer is declared as a const
118 // pointer in the superclass which is the ConstIterator.
119 this->m_PixelAccessorFunctor.Set(*(const_cast<InternalPixelType *>(this->m_Buffer) + this->m_Offset), value);
120 }
121
125 PixelType &
127 {
128 // const_cast is needed here because m_Buffer is declared as a const
129 // pointer in the superclass which is the ConstIterator.
130 return *(const_cast<InternalPixelType *>(this->m_Buffer) + this->m_Offset);
131 }
132
134 ImageType *
135 GetImage() const
136 {
137 // const_cast is needed here because m_Image is declared as a const pointer
138 // in the base class which is the ConstIterator.
139 return const_cast<ImageType *>(this->m_Image.GetPointer());
140 }
141
142protected:
146 Self &
148};
149} // end namespace itk
152#ifndef ITK_MANUAL_INSTANTIATION
153# include "itkImageIterator.hxx"
154#endif
155
156#endif
A multi-dimensional image iterator templated over image type.
typename TImage::PixelContainer PixelContainer
typename TImage::OffsetType OffsetType
typename TImage::InternalPixelType InternalPixelType
typename PixelContainer::Pointer PixelContainerPointer
typename TImage::AccessorType AccessorType
typename TImage::RegionType RegionType
typename TImage::PixelType PixelType
A multi-dimensional iterator templated over image type.
Self & operator=(const ImageConstIterator< TImage > &it)
ImageIterator()=default
ImageIterator(const ImageConstIterator< TImage > &it)
ImageIterator(TImage *ptr, const RegionType &region)
~ImageIterator() override=default
ImageType * GetImage() const
Self & operator=(const Self &it)
void Set(const PixelType &value) const
ImageIterator(const Self &it)
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....