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 {
153 template <typename TImage, typename TBoundaryCondition = ZeroFluxNeumannBoundaryCondition<TImage>>
154 class ITK_TEMPLATE_EXPORT ShapedNeighborhoodIterator
155  : public ConstShapedNeighborhoodIterator<TImage, TBoundaryCondition>
156 {
157 public:
159  using InternalPixelType = typename TImage::InternalPixelType;
160  using PixelType = typename TImage::PixelType;
161 
163  static constexpr unsigned int Dimension = TImage::ImageDimension;
164 
168 
173  using SizeType = typename Superclass::SizeType;
176  using IndexListType = typename Superclass::IndexListType;
177  using BoundaryConditionType = typename Superclass::BoundaryConditionType;
178  using ImageBoundaryConditionPointerType = typename Superclass::ImageBoundaryConditionPointerType;
179  using NeighborhoodType = typename Superclass::NeighborhoodType;
181  using ImageType = typename Superclass::ImageType;
184 
186  struct Iterator : public ConstIterator
187  {
188  Iterator() = default;
190  : ConstIterator(s)
191  {}
192 
193  ~Iterator() ITK_ITERATOR_OVERRIDE = default;
194  Iterator &
195  operator=(const Iterator & o)
196  {
197  ConstIterator::operator=(o);
198  return *this;
199  }
200 
201  // Promote to public
202  void
203  Set(const PixelType & v) const
204  {
205  ConstIterator::ProtectedSet(v);
206  }
207 
208  protected:
209  friend Self;
210 
211  Iterator(const Self * s, const typename IndexListType::const_iterator & li)
212  : ConstIterator(s, li)
213  {}
214  };
215 
217  ShapedNeighborhoodIterator() = default;
218 
220  ~ShapedNeighborhoodIterator() override = default;
221 
224 
227  ShapedNeighborhoodIterator(const SizeType & radius, const ImageType * ptr, const RegionType & region)
228  : Superclass(radius, const_cast<ImageType *>(ptr), region)
229  {}
230 
231  // Expose the following methods from the superclass. This is a restricted
232  // subset of the methods available for NeighborhoodIterator.
233  using Superclass::SetPixel;
234  using Superclass::SetCenterPixel;
235 
236 
238  Self &
239  operator=(const Self & orig)
240  {
241  Superclass::operator=(orig);
242  return *this;
243  }
245 
247  void
248  PrintSelf(std::ostream &, Indent) const override;
249 
252  Iterator
254  {
255  return Iterator(this, this->m_ActiveIndexList.begin());
256  }
257  Iterator
258  End()
259  {
260  return Iterator(this, this->m_ActiveIndexList.end());
261  }
263 
264  using Superclass::Begin;
265  using Superclass::End;
266 
267 protected:
268  friend Superclass;
269 
271 };
272 } // namespace itk
273 
274 #ifndef ITK_MANUAL_INSTANTIATION
275 # include "itkShapedNeighborhoodIterator.hxx"
276 #endif
277 
278 #endif
itk::ShapedNeighborhoodIterator::operator=
Self & operator=(const Self &orig)
Definition: itkShapedNeighborhoodIterator.h:239
itkConstShapedNeighborhoodIterator.h
itk::ShapedNeighborhoodIterator::ShapedNeighborhoodIterator
ShapedNeighborhoodIterator(const SizeType &radius, const ImageType *ptr, const RegionType &region)
Definition: itkShapedNeighborhoodIterator.h:227
itk::Index< Self::Dimension >
itk::ShapedNeighborhoodIterator::Iterator::Set
void Set(const PixelType &v) const
Definition: itkShapedNeighborhoodIterator.h:203
itk::ConstNeighborhoodIterator< ImageType, ZeroFluxNeumannBoundaryCondition< ImageType > >::RadiusType
typename Superclass::RadiusType RadiusType
Definition: itkConstNeighborhoodIterator.h:71
itk::ShapedNeighborhoodIterator::Iterator::Iterator
Iterator(Self *s)
Definition: itkShapedNeighborhoodIterator.h:189
itk::ShapedNeighborhoodIterator::ConstIterator
typename Superclass::ConstIterator ConstIterator
Definition: itkShapedNeighborhoodIterator.h:175
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:209
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:154
itk::ShapedNeighborhoodIterator::Iterator::Iterator
Iterator(const Self *s, const typename IndexListType::const_iterator &li)
Definition: itkShapedNeighborhoodIterator.h:211
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:258
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:186
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:268
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:253
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