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_Pos(0)
55 , m_Slice(s)
56 {}
57
61 {
62 SliceIterator ans = *this;
63
64 ans.m_Pos = 0;
65 return ans;
66 }
67
71 {
72 SliceIterator ans = *this;
73
74 ans.m_Pos = static_cast<OffsetValueType>(m_Slice.size());
75 return ans;
76 }
77
81 {
82 ++m_Pos;
83 return *this;
84 }
85
89 {
90 SliceIterator ans = *this;
91
92 ++m_Pos;
93 return ans;
94 }
95
98 TPixel & operator[](OffsetValueType n) { return this->Loc(m_Pos = n); }
99
102 TPixel & operator*() { return Loc(m_Pos); }
103
106 bool
107 operator==(const SliceIterator & orig) const
108 {
109 return orig.m_Pos == this->m_Pos && orig.m_Slice.stride() == this->m_Slice.stride() &&
110 orig.m_Slice.start() == this->m_Slice.start();
111 }
112
114
118 bool
119 operator<(const SliceIterator & orig) const
120 {
121 return this->m_Pos < orig.m_Pos && this->m_Slice.stride() == orig.m_Slice.stride() &&
122 this->m_Slice.start() == orig.m_Slice.start();
123 }
124
125private:
127 TPixel &
129 {
130 const auto start = static_cast<OffsetValueType>(m_Slice.start());
131 const auto stride = static_cast<OffsetValueType>(m_Slice.stride());
134 return (*m_ContainerPointer)[start + n * stride];
135 }
136
138 TContainer * m_ContainerPointer;
139
142
144 std::slice m_Slice;
145};
146} // end namespace itk
147
148#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