ITK  6.0.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:
69
72
77 static constexpr unsigned int ImageIteratorDimension = TImage::ImageDimension;
78
81
83 using typename Superclass::IndexType;
84 using typename Superclass::SizeType;
85 using typename Superclass::OffsetType;
86 using typename Superclass::RegionType;
87 using typename Superclass::ImageType;
88 using typename Superclass::PixelContainer;
90 using typename Superclass::InternalPixelType;
91 using typename Superclass::PixelType;
92 using typename Superclass::AccessorType;
93
96 ImageIterator() = default;
97
99 ~ImageIterator() override = default;
100
103 ImageIterator(TImage * ptr, const RegionType & region);
104
106 void
107 Set(const PixelType & value) const
108 {
109 // const_cast is needed here because m_Buffer is declared as a const
110 // pointer in the superclass which is the ConstIterator.
111 this->m_PixelAccessorFunctor.Set(*(const_cast<InternalPixelType *>(this->m_Buffer) + this->m_Offset), value);
112 }
113
117 PixelType &
119 {
120 // const_cast is needed here because m_Buffer is declared as a const
121 // pointer in the superclass which is the ConstIterator.
122 return *(const_cast<InternalPixelType *>(this->m_Buffer) + this->m_Offset);
123 }
124
126 ImageType *
127 GetImage() const
128 {
129 // const_cast is needed here because m_Image is declared as a const pointer
130 // in the base class which is the ConstIterator.
131 return const_cast<ImageType *>(this->m_Image.GetPointer());
132 }
133
134protected:
138 Self &
140};
141} // end namespace itk
144#ifndef ITK_MANUAL_INSTANTIATION
145# include "itkImageIterator.hxx"
146#endif
147
148#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
ITK_DEFAULT_COPY_AND_MOVE(ImageIterator)
void Set(const PixelType &value) const
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....