ITK 6.0.0
Insight Toolkit
 
Loading...
Searching...
No Matches
itkVectorContainerToListSampleAdaptor.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 itkVectorContainerToListSampleAdaptor_h
19#define itkVectorContainerToListSampleAdaptor_h
20
21#include <typeinfo>
22
23#include "itkListSample.h"
24#include "itkSmartPointer.h"
25#include "itkVectorContainer.h"
26
27namespace itk::Statistics
28{
42
43template <typename TVectorContainer>
44class ITK_TEMPLATE_EXPORT VectorContainerToListSampleAdaptor : public ListSample<typename TVectorContainer::Element>
45{
46public:
47 ITK_DISALLOW_COPY_AND_MOVE(VectorContainerToListSampleAdaptor);
48
54
56 itkOverrideGetNameOfClassMacro(VectorContainerToListSampleAdaptor);
57
59 itkNewMacro(Self);
60
62 static constexpr unsigned int MeasurementVectorSize = TVectorContainer::Element::Dimension;
63
65 using VectorContainerType = TVectorContainer;
66 using VectorContainerPointer = typename TVectorContainer::Pointer;
67 using VectorContainerConstPointer = typename TVectorContainer::ConstPointer;
68 using VectorContainerIterator = typename TVectorContainer::Iterator;
69 using VectorContainerConstIterator = typename TVectorContainer::ConstIterator;
70
73 using typename Superclass::MeasurementType;
78 using typename Superclass::InstanceIdentifier;
79
81
86 itkGetConstObjectMacro(VectorContainer, VectorContainerType);
90 Size() const override;
91
95
98
101 GetTotalFrequency() const override;
102
107 {
109
110 public:
111 ConstIterator(const VectorContainerToListSampleAdaptor * adaptor) { *this = adaptor->Begin(); }
112
117
118 ConstIterator() = delete;
119
121 operator=(const ConstIterator & iter) = default;
122
123 [[nodiscard]] AbsoluteFrequencyType
125 {
126 return 1;
127 }
128
129 [[nodiscard]] const MeasurementVectorType &
131 {
132 return (const MeasurementVectorType &)m_Iter.Value();
133 }
134
135 [[nodiscard]] InstanceIdentifier
137 {
138 return this->m_InstanceIdentifier;
139 }
140
143 {
144 ++m_Iter;
146 return *this;
147 }
148
149 bool
150 operator==(const ConstIterator & it) const
151 {
152 return (this->m_Iter == it.m_Iter);
153 }
154
156
157 protected:
158 // This method should only be available to the ListSample class
163
164 private:
167 };
168
172 class Iterator : public ConstIterator
173 {
175
176 public:
177 Iterator() = delete;
178 Iterator(const Self * adaptor) = delete;
180 Iterator(const ConstIterator & it) = delete;
182 operator=(const ConstIterator & it) = delete;
183
184 Iterator(Self * adaptor)
185 : ConstIterator(adaptor)
186 {}
187
188 Iterator(const Iterator & iter)
189 : ConstIterator(iter)
190 {}
191
192 Iterator &
193 operator=(const Iterator & iter)
194 {
195 this->ConstIterator::operator=(iter);
196 return *this;
197 }
198
199 protected:
203 };
204
206 Iterator
208 {
209 VectorContainerPointer nonConstVectorDataContainer =
210 const_cast<VectorContainerType *>(this->m_VectorContainer.GetPointer());
211 Iterator iter(nonConstVectorDataContainer->Begin(), 0);
212
213 return iter;
214 }
215
217 Iterator
219 {
220 VectorContainerPointer nonConstVectorDataContainer =
221 const_cast<VectorContainerType *>(this->m_VectorContainer.GetPointer());
222
223 Iterator iter(nonConstVectorDataContainer->End(), this->m_VectorContainer->Size());
224
225 return iter;
226 }
227
229 ConstIterator
230 Begin() const
231 {
232 const ConstIterator iter(this->m_VectorContainer->Begin(), 0);
233
234 return iter;
235 }
236
238 ConstIterator
239 End() const
240 {
241 const ConstIterator iter(this->m_VectorContainer->End(), this->m_VectorContainer->Size());
242 return iter;
243 }
244
245protected:
247
249 void
250 PrintSelf(std::ostream & os, Indent indent) const override;
251
252private:
254}; // end of class VectorContainerToListSampleAdaptor
255} // namespace itk::Statistics
256
257#ifndef ITK_MANUAL_INSTANTIATION
258# include "itkVectorContainerToListSampleAdaptor.hxx"
259#endif
260
261#endif
Control indentation during Print() invocation.
Definition itkIndent.h:50
Implements transparent reference counting.
typename MeasurementVectorTraitsTypes< MeasurementVectorType >::ValueType MeasurementType
typename MeasurementVectorTraits::InstanceIdentifier InstanceIdentifier
NumericTraits< AbsoluteFrequencyType >::AccumulateType TotalAbsoluteFrequencyType
MeasurementVectorTraits::AbsoluteFrequencyType AbsoluteFrequencyType
ConstIterator & operator=(const ConstIterator &iter)=default
ConstIterator(VectorContainerConstIterator iter, InstanceIdentifier iid)
Iterator(VectorContainerConstIterator iter, InstanceIdentifier iid)=delete
ConstIterator & operator=(const ConstIterator &it)=delete
void PrintSelf(std::ostream &os, Indent indent) const override
ListSample< typename TVectorContainer::Element > Superclass
TotalAbsoluteFrequencyType GetTotalFrequency() const override
typename MeasurementVectorTraits::InstanceIdentifier InstanceIdentifier
MeasurementVectorTraits::AbsoluteFrequencyType AbsoluteFrequencyType
typename TVectorContainer::Element MeasurementVectorType
NumericTraits< AbsoluteFrequencyType >::AccumulateType TotalAbsoluteFrequencyType
InstanceIdentifier Size() const override
AbsoluteFrequencyType GetFrequency(InstanceIdentifier) const override
const MeasurementVectorType & GetMeasurementVector(InstanceIdentifier) const override
detail::VectorContainer< std::conditional_t< std::is_void_v< T2 >, SizeValueType, T1 >, std::conditional_t< std::is_void_v< T2 >, T1, T2 > > VectorContainer