ITK  6.0.0
Insight Toolkit
itkPointSetToListSampleAdaptor.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 itkPointSetToListSampleAdaptor_h
19#define itkPointSetToListSampleAdaptor_h
20
21#include <typeinfo>
22
23#include "itkPointSet.h"
24#include "itkListSample.h"
25#include "itkSmartPointer.h"
26
27namespace itk
28{
29namespace Statistics
30{
46template <typename TPointSet>
47class ITK_TEMPLATE_EXPORT PointSetToListSampleAdaptor : public ListSample<typename TPointSet::PointType>
48{
49public:
50 ITK_DISALLOW_COPY_AND_MOVE(PointSetToListSampleAdaptor);
51
57
59 itkOverrideGetNameOfClassMacro(PointSetToListSampleAdaptor);
60
62 itkNewMacro(Self);
63
65 using PointSetType = TPointSet;
68 using PointsContainer = typename TPointSet::PointsContainer;
69 using PointsContainerPointer = typename TPointSet::PointsContainerPointer;
70 using PointsContainerConstPointer = typename TPointSet::PointsContainerConstPointer;
71 using PointsContainerIteratorType = typename TPointSet::PointsContainerIterator;
72 using PointsContainerConstIteratorType = typename TPointSet::PointsContainerConstIterator;
74
77 using typename Superclass::MeasurementType;
78 using typename Superclass::MeasurementVectorType;
79 using typename Superclass::AbsoluteFrequencyType;
80 using typename Superclass::TotalAbsoluteFrequencyType;
81 using typename Superclass::MeasurementVectorSizeType;
82 using typename Superclass::InstanceIdentifier;
83
85
87 void
88 SetPointSet(const TPointSet * pointSet);
89
91 const TPointSet *
93
96 Size() const override;
97
101 GetMeasurementVector(InstanceIdentifier identifier) const override;
102
106
109 GetTotalFrequency() const override;
110
116 {
118
119 public:
120 ConstIterator(const PointSetToListSampleAdaptor * adaptor) { *this = adaptor->Begin(); }
121
123 {
124 m_Iter = iter.m_Iter;
125 m_InstanceIdentifier = iter.m_InstanceIdentifier;
126 }
127
130 {
131 m_Iter = iter.m_Iter;
132 m_InstanceIdentifier = iter.m_InstanceIdentifier;
133 return *this;
134 }
135
138 {
139 return 1;
140 }
141
144 {
145 return (const MeasurementVectorType &)m_Iter.Value();
146 }
147
150 {
151 return m_InstanceIdentifier;
152 }
153
156 {
157 ++m_Iter;
158 ++m_InstanceIdentifier;
159 return *this;
160 }
161
162 bool
163 operator==(const ConstIterator & it) const
164 {
165 return (m_Iter == it.m_Iter);
166 }
167
169
170 protected:
171 // This method should only be available to the ListSample class
173 {
174 m_Iter = iter;
175 m_InstanceIdentifier = iid;
176 }
177
178 private:
179 ConstIterator() = delete;
182 };
183
188 class Iterator : public ConstIterator
189 {
191
192 public:
193 Iterator(Self * adaptor)
194 : ConstIterator(adaptor)
195 {}
196
197 Iterator(const Iterator & iter)
198 : ConstIterator(iter)
199 {}
200
201 Iterator &
202 operator=(const Iterator & iter)
203 {
204 this->ConstIterator::operator=(iter);
205 return *this;
206 }
207
208 Iterator() = delete;
209 Iterator(const Self * adaptor) = delete;
211 Iterator(const ConstIterator & it) = delete;
213 operator=(const ConstIterator & it) = delete;
214
215 protected:
217 : ConstIterator(iter, iid)
218 {}
219 };
220
222 Iterator
224 {
225 PointsContainerPointer nonConstPointsDataContainer = const_cast<PointsContainer *>(m_PointsContainer.GetPointer());
226 Iterator iter(nonConstPointsDataContainer->Begin(), 0);
229 return iter;
230 }
231
233 Iterator
235 {
236 PointsContainerPointer nonConstPointsDataContainer = const_cast<PointsContainer *>(m_PointsContainer.GetPointer());
237
238 Iterator iter(nonConstPointsDataContainer->End(), m_PointsContainer->Size());
239
240 return iter;
241 }
242
244 ConstIterator
245 Begin() const
246 {
247 ConstIterator iter(m_PointsContainer->Begin(), 0);
248
249 return iter;
250 }
251
253 ConstIterator
254 End() const
255 {
256 ConstIterator iter(m_PointsContainer->End(), m_PointsContainer->Size());
257
258 return iter;
259 }
260
261protected:
263
264 ~PointSetToListSampleAdaptor() override = default;
265 void
266 PrintSelf(std::ostream & os, Indent indent) const override;
267
268private:
271
274 PointsContainerConstPointer m_PointsContainer{};
275
277 mutable PointType m_TempPoint{};
278}; // end of class PointSetToListSampleAdaptor
279} // end of namespace Statistics
280} // end of namespace itk
281
282#ifndef ITK_MANUAL_INSTANTIATION
283# include "itkPointSetToListSampleAdaptor.hxx"
284#endif
285
286#endif
Base class for all data objects in ITK.
Control indentation during Print() invocation.
Definition: itkIndent.h:50
Base class for most ITK classes.
Definition: itkObject.h:62
This class is the native implementation of the a Sample with an STL container.
Definition: itkListSample.h:52
ConstIterator(PointsContainerConstIteratorType iter, InstanceIdentifier iid)
Iterator(PointsContainerConstIteratorType iter, InstanceIdentifier iid)=delete
ConstIterator & operator=(const ConstIterator &it)=delete
Iterator(PointsContainerIteratorType iter, InstanceIdentifier iid)
This class provides ListSample interface to ITK PointSet.
void SetPointSet(const TPointSet *pointSet)
TotalAbsoluteFrequencyType GetTotalFrequency() const override
typename TPointSet::PointsContainerIterator PointsContainerIteratorType
void PrintSelf(std::ostream &os, Indent indent) const override
AbsoluteFrequencyType GetFrequency(InstanceIdentifier id) const override
const MeasurementVectorType & GetMeasurementVector(InstanceIdentifier identifier) const override
typename TPointSet::PointsContainerConstIterator PointsContainerConstIteratorType
typename TPointSet::PointsContainerPointer PointsContainerPointer
InstanceIdentifier Size() const override
typename TPointSet::PointsContainerConstPointer PointsContainerConstPointer
typename MeasurementVectorTraits::InstanceIdentifier InstanceIdentifier
Definition: itkSample.h:91
NumericTraits< AbsoluteFrequencyType >::AccumulateType TotalAbsoluteFrequencyType
Definition: itkSample.h:87
MeasurementVectorTraits::AbsoluteFrequencyType AbsoluteFrequencyType
Definition: itkSample.h:84
SmartPointer< const Self > ConstPointer
SmartPointer< Self > Pointer
The "itk" namespace contains all Insight Segmentation and Registration Toolkit (ITK) classes....