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
25namespace itk
26{
47template <typename TPixel, typename TContainer>
49{
50public:
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
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
132private:
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
A flexible iterator for itk containers(i.e. itk::Neighborhood) that support pixel access through oper...
OffsetValueType m_Pos
SliceIterator End()
SliceIterator Begin()
TContainer * m_ContainerPointer
SliceIterator operator++(int)
TPixel & operator[](OffsetValueType n)
TPixel & Loc(OffsetValueType n) const
SliceIterator(TContainer *n, std::slice s)
ITK_UNEQUAL_OPERATOR_MEMBER_FUNCTION(SliceIterator)
bool operator==(const SliceIterator &orig) const
bool operator<(const SliceIterator &orig) const
SliceIterator operator++()
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....
long OffsetValueType
Definition: itkIntTypes.h:97