ITK  6.0.0
Insight Toolkit
itkSliceIterator.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 itkSliceIterator_h
19 #define itkSliceIterator_h
20 
21 #include "itkMacro.h"
22 #include "itkIntTypes.h"
23 #include <valarray>
24 
25 namespace itk
26 {
47 template <typename TPixel, typename TContainer>
49 {
50 public:
52  SliceIterator(TContainer * n, std::slice s)
54  , m_Slice(s)
55  {}
56 
60  {
61  SliceIterator ans = *this;
62 
63  ans.m_Pos = 0;
64  return ans;
65  }
66 
69  End()
70  {
71  SliceIterator ans = *this;
72 
73  ans.m_Pos = static_cast<OffsetValueType>(m_Slice.size());
74  return ans;
75  }
76 
80  {
81  ++m_Pos;
82  return *this;
83  }
84 
88  {
89  SliceIterator ans = *this;
90 
91  ++m_Pos;
92  return ans;
93  }
94 
97  TPixel &
99  {
100  return this->Loc(m_Pos = n);
101  }
102 
105  TPixel &
107  {
108  return Loc(m_Pos);
109  }
110 
113  bool
114  operator==(const SliceIterator & orig) const
115  {
116  return orig.m_Pos == this->m_Pos && orig.m_Slice.stride() == this->m_Slice.stride() &&
117  orig.m_Slice.start() == this->m_Slice.start();
118  }
119 
121 
125  bool
126  operator<(const SliceIterator & orig) const
127  {
128  return this->m_Pos < orig.m_Pos && this->m_Slice.stride() == orig.m_Slice.stride() &&
129  this->m_Slice.start() == orig.m_Slice.start();
130  }
131 
132 private:
134  TPixel &
136  {
137  const auto start = static_cast<OffsetValueType>(m_Slice.start());
138  const auto stride = static_cast<OffsetValueType>(m_Slice.stride());
141  return (*m_ContainerPointer)[start + n * stride];
142  }
143 
145  TContainer * m_ContainerPointer;
146 
149 
151  std::slice m_Slice;
152 };
153 } // end namespace itk
154 
155 #endif
itk::SliceIterator::ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION
ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION(SliceIterator)
itk::SliceIterator::operator<
bool operator<(const SliceIterator &orig) const
Definition: itkSliceIterator.h:126
itk::SliceIterator
A flexible iterator for itk containers(i.e. itk::Neighborhood) that support pixel access through oper...
Definition: itkSliceIterator.h:48
itk::SliceIterator::m_ContainerPointer
TContainer * m_ContainerPointer
Definition: itkSliceIterator.h:145
itk::SliceIterator::Loc
TPixel & Loc(OffsetValueType n) const
Definition: itkSliceIterator.h:135
itk::SliceIterator::operator*
TPixel & operator*()
Definition: itkSliceIterator.h:106
itk::SliceIterator::SliceIterator
SliceIterator(TContainer *n, std::slice s)
Definition: itkSliceIterator.h:52
itk::SliceIterator::operator++
SliceIterator operator++()
Definition: itkSliceIterator.h:79
itk::SliceIterator::Begin
SliceIterator Begin()
Definition: itkSliceIterator.h:59
itk::SliceIterator::operator++
SliceIterator operator++(int)
Definition: itkSliceIterator.h:87
itkMacro.h
itk::SliceIterator::End
SliceIterator End()
Definition: itkSliceIterator.h:69
itk::OffsetValueType
long OffsetValueType
Definition: itkIntTypes.h:97
itk::SliceIterator::m_Pos
OffsetValueType m_Pos
Definition: itkSliceIterator.h:148
itkIntTypes.h
itk
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
Definition: itkAnatomicalOrientation.h:29
itk::SliceIterator::operator==
bool operator==(const SliceIterator &orig) const
Definition: itkSliceIterator.h:114
itk::SliceIterator::m_Slice
std::slice m_Slice
Definition: itkSliceIterator.h:151
itk::SliceIterator::operator[]
TPixel & operator[](OffsetValueType n)
Definition: itkSliceIterator.h:98