ITK  5.2.0
Insight Toolkit
itkShapedNeighborhoodIterator.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  * http://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 itkShapedNeighborhoodIterator_h
19 #define itkShapedNeighborhoodIterator_h
20 
21 #include <vector>
22 #include <list>
24 
25 namespace itk
26 {
149 template <typename TImage, typename TBoundaryCondition = ZeroFluxNeumannBoundaryCondition<TImage>>
150 class ITK_TEMPLATE_EXPORT ShapedNeighborhoodIterator
151  : public ConstShapedNeighborhoodIterator<TImage, TBoundaryCondition>
152 {
153 public:
155  using InternalPixelType = typename TImage::InternalPixelType;
156  using PixelType = typename TImage::PixelType;
157 
159  static constexpr unsigned int Dimension = TImage::ImageDimension;
160 
164 
169  using SizeType = typename Superclass::SizeType;
172  using IndexListType = typename Superclass::IndexListType;
173  using BoundaryConditionType = typename Superclass::BoundaryConditionType;
174  using ImageBoundaryConditionPointerType = typename Superclass::ImageBoundaryConditionPointerType;
175  using NeighborhoodType = typename Superclass::NeighborhoodType;
177  using ImageType = typename Superclass::ImageType;
180 
182  struct Iterator : public ConstIterator
183  {
184  Iterator() = default;
186  : ConstIterator(s)
187  {}
188 
189  ~Iterator() ITK_ITERATOR_OVERRIDE = default;
190  Iterator &
191  operator=(const Iterator & o)
192  {
193  ConstIterator::operator=(o);
194  return *this;
195  }
196 
197  // Promote to public
198  void
199  Set(const PixelType & v) const
200  {
201  ConstIterator::ProtectedSet(v);
202  }
203 
204  protected:
205  friend Self;
206 
207  Iterator(const Self * s, const typename IndexListType::const_iterator & li)
208  : ConstIterator(s, li)
209  {}
210  };
211 
213  ShapedNeighborhoodIterator() = default;
214 
216  ~ShapedNeighborhoodIterator() override = default;
217 
220 
223  ShapedNeighborhoodIterator(const SizeType & radius, const ImageType * ptr, const RegionType & region)
224  : Superclass(radius, const_cast<ImageType *>(ptr), region)
225  {}
226 
227  // Expose the following methods from the superclass. This is a restricted
228  // subset of the methods available for NeighborhoodIterator.
229  using Superclass::SetPixel;
230  using Superclass::SetCenterPixel;
231 
232 
234  Self &
235  operator=(const Self & orig)
236  {
237  Superclass::operator=(orig);
238  return *this;
239  }
241 
243  void
244  PrintSelf(std::ostream &, Indent) const override;
245 
248  Iterator
250  {
251  return Iterator(this, this->m_ActiveIndexList.begin());
252  }
253  Iterator
254  End()
255  {
256  return Iterator(this, this->m_ActiveIndexList.end());
257  }
259 
260  using Superclass::Begin;
261  using Superclass::End;
262 
263 protected:
264  friend Superclass;
265 
267 };
268 } // namespace itk
269 
270 #ifndef ITK_MANUAL_INSTANTIATION
271 # include "itkShapedNeighborhoodIterator.hxx"
272 #endif
273 
274 #endif
itk::ShapedNeighborhoodIterator::operator=
Self & operator=(const Self &orig)
Definition: itkShapedNeighborhoodIterator.h:235
itkConstShapedNeighborhoodIterator.h
itk::ShapedNeighborhoodIterator::ShapedNeighborhoodIterator
ShapedNeighborhoodIterator(const SizeType &radius, const ImageType *ptr, const RegionType &region)
Definition: itkShapedNeighborhoodIterator.h:223
itk::Index< Self::Dimension >
itk::ShapedNeighborhoodIterator::Iterator::Set
void Set(const PixelType &v) const
Definition: itkShapedNeighborhoodIterator.h:199
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::RadiusType
typename Superclass::RadiusType RadiusType
Definition: itkConstNeighborhoodIterator.h:71
itk::ShapedNeighborhoodIterator::Iterator::Iterator
Iterator(Self *s)
Definition: itkShapedNeighborhoodIterator.h:185
itk::ShapedNeighborhoodIterator::ConstIterator
typename Superclass::ConstIterator ConstIterator
Definition: itkShapedNeighborhoodIterator.h:171
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::NeighborIndexType
typename NeighborhoodType::NeighborIndexType NeighborIndexType
Definition: itkConstNeighborhoodIterator.h:89
itk::Size
Represent a n-dimensional size (bounds) of a n-dimensional image.
Definition: itkSize.h:69
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::PixelType
typename ImageType ::PixelType PixelType
Definition: itkConstNeighborhoodIterator.h:57
itk::ConstShapedNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::IndexValueType
typename IndexType::IndexValueType IndexValueType
Definition: itkConstShapedNeighborhoodIterator.h:97
itk::ShapedNeighborhoodIterator::Iterator::Self
friend Self
Definition: itkShapedNeighborhoodIterator.h:205
itk::Neighborhood
A light-weight container object for storing an N-dimensional neighborhood of values.
Definition: itkNeighborhood.h:54
itk::GTest::TypedefsAndConstructors::Dimension2::SizeType
ImageBaseType::SizeType SizeType
Definition: itkGTestTypedefsAndConstructors.h:49
itk::ConstShapedNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::SizeValueType
typename SizeType::SizeValueType SizeValueType
Definition: itkConstShapedNeighborhoodIterator.h:91
itk::Indent
Control indentation during Print() invocation.
Definition: itkIndent.h:49
itk::ShapedNeighborhoodIterator
A neighborhood iterator which can take on an arbitrary shape.
Definition: itkShapedNeighborhoodIterator.h:150
itk::ShapedNeighborhoodIterator::Iterator::Iterator
Iterator(const Self *s, const typename IndexListType::const_iterator &li)
Definition: itkShapedNeighborhoodIterator.h:207
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::ImageType
ImageType ImageType
Definition: itkConstNeighborhoodIterator.h:77
itk::ImageBoundaryCondition< ImageType, OutputImageType >
itk::GTest::TypedefsAndConstructors::Dimension2::IndexType
ImageBaseType::IndexType IndexType
Definition: itkGTestTypedefsAndConstructors.h:50
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::InternalPixelType
typename ImageType ::InternalPixelType InternalPixelType
Definition: itkConstNeighborhoodIterator.h:56
itk::GTest::TypedefsAndConstructors::Dimension2::RegionType
ImageBaseType::RegionType RegionType
Definition: itkGTestTypedefsAndConstructors.h:54
itk::ConstShapedNeighborhoodIterator
Const version of ShapedNeighborhoodIterator, defining iteration of a local N-dimensional neighborhood...
Definition: itkConstShapedNeighborhoodIterator.h:72
itk::ConstShapedNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::IndexListType
std::list< NeighborIndexType > IndexListType
Definition: itkConstShapedNeighborhoodIterator.h:104
itk::ShapedNeighborhoodIterator::End
Iterator End()
Definition: itkShapedNeighborhoodIterator.h:254
itk::Neighborhood::ConstIterator
typename AllocatorType::const_iterator ConstIterator
Definition: itkNeighborhood.h:76
itk::Offset
Represent a n-dimensional offset between two n-dimensional indexes of n-dimensional image.
Definition: itkOffset.h:67
itk::ShapedNeighborhoodIterator::Iterator
Definition: itkShapedNeighborhoodIterator.h:182
itk::ConstShapedNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::OffsetValueType
typename OffsetType::OffsetValueType OffsetValueType
Definition: itkConstShapedNeighborhoodIterator.h:88
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnnulusOperator.h:24
itk::ConstNeighborhoodIterator
Const version of NeighborhoodIterator, defining iteration of a local N-dimensional neighborhood of pi...
Definition: itkConstNeighborhoodIterator.h:51
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::RegionType
typename ImageType ::RegionType RegionType
Definition: itkConstNeighborhoodIterator.h:78
itk::OffsetValueType
signed long OffsetValueType
Definition: itkIntTypes.h:94
itk::IndexValueType
signed long IndexValueType
Definition: itkIntTypes.h:90
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::ConstIterator
typename Superclass::ConstIterator ConstIterator
Definition: itkConstNeighborhoodIterator.h:74
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::OffsetType
typename Superclass::OffsetType OffsetType
Definition: itkConstNeighborhoodIterator.h:70
itk::ShapedNeighborhoodIterator::Superclass
friend Superclass
Definition: itkShapedNeighborhoodIterator.h:264
itk::ZeroFluxNeumannBoundaryCondition< ImageType >
itk::Neighborhood::NeighborIndexType
SizeValueType NeighborIndexType
Definition: itkNeighborhood.h:96
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::Iterator
typename Superclass::Iterator Iterator
Definition: itkConstNeighborhoodIterator.h:73
itk::ShapedNeighborhoodIterator::Begin
Iterator Begin()
Definition: itkShapedNeighborhoodIterator.h:249
itk::GTest::TypedefsAndConstructors::Dimension2::Dimension
constexpr unsigned int Dimension
Definition: itkGTestTypedefsAndConstructors.h:44
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::SizeType
typename Superclass::SizeType SizeType
Definition: itkConstNeighborhoodIterator.h:72
itk::SizeValueType
unsigned long SizeValueType
Definition: itkIntTypes.h:83