Orfeo Toolbox  3.16
itkListSample.h
Go to the documentation of this file.
1 /*=========================================================================
2 
3  Program: Insight Segmentation & Registration Toolkit
4  Module: $RCSfile: itkListSample.h,v $
5  Language: C++
6  Date: $Date: 2009-03-04 15:23:51 $
7  Version: $Revision: 1.30 $
8 
9  Copyright (c) Insight Software Consortium. All rights reserved.
10  See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
11 
12  This software is distributed WITHOUT ANY WARRANTY; without even
13  the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
14  PURPOSE. See the above copyright notices for more information.
15 
16 =========================================================================*/
17 #ifndef __itkListSample_h
18 #define __itkListSample_h
19 
20 #include "itkObjectFactory.h"
21 #include "itkMacro.h"
22 #include "itkListSampleBase.h"
23 #include "itkFixedArray.h"
24 #include "itkSmartPointer.h"
25 
26 #include <vector>
27 
28 namespace itk {
29 namespace Statistics {
30 
45 template< class TMeasurementVector >
46 class ITK_EXPORT ListSample : public ListSampleBase< TMeasurementVector >
47 {
48 public:
50  typedef ListSample Self;
54 
56  itkTypeMacro(ListSample, ListSampleBase);
57 
59  itkNewMacro(Self);
60 
62  typedef typename Superclass::MeasurementVectorType MeasurementVectorType;
63  typedef typename Superclass::MeasurementVectorSizeType MeasurementVectorSizeType;
64  typedef typename Superclass::MeasurementType MeasurementType;
65  typedef typename Superclass::FrequencyType FrequencyType;
66  typedef typename Superclass::TotalFrequencyType TotalFrequencyType;
67  typedef typename Superclass::InstanceIdentifier InstanceIdentifier;
68  typedef typename Superclass::SearchResultVectorType SearchResultVectorType;
69 
73 
74 
76  typedef std::vector< MeasurementVectorType > InternalDataContainerType;
77 
83  void Resize( unsigned int n )
84  { m_InternalContainer.resize(n); }
85 
87  void Clear()
88  { m_InternalContainer.clear(); }
89 
91  void PushBack( MeasurementVectorType mv )
92  { m_InternalContainer.push_back( mv ); }
93 
95  unsigned int Size() const
96  { return static_cast<unsigned int>( m_InternalContainer.size() ); }
97 
100  const MeasurementVectorType & GetMeasurementVector(const InstanceIdentifier &id) const;
101 
103  void SetMeasurement(const InstanceIdentifier &id,
104  const unsigned int &dim,
105  const MeasurementType &value);
106 
108  void SetMeasurementVector(const InstanceIdentifier &id,
109  const MeasurementVectorType &mv);
110 
113  FrequencyType GetFrequency(const InstanceIdentifier &id) const;
114 
117  TotalFrequencyType GetTotalFrequency() const
118  { return static_cast<TotalFrequencyType>( m_InternalContainer.size() ); }
119 
120  class ConstIterator;
121 
122  class Iterator
123  {
124 
125  friend class ConstIterator;
126 
127  public:
128 
130 
131  Iterator(typename InternalDataContainerType::iterator iter,
132  InstanceIdentifier iid)
133  :m_Iter(iter), m_InstanceIdentifier(iid) {}
134 
135  FrequencyType GetFrequency() const
136  { return 1;}
137 
138  const MeasurementVectorType & GetMeasurementVector() const
139  { return (MeasurementVectorType&) *m_Iter;}
140 
141  InstanceIdentifier GetInstanceIdentifier() const
142  { return m_InstanceIdentifier;}
143 
144  Iterator& operator++()
145  {
146  ++m_Iter;
147  ++m_InstanceIdentifier;
148  return *this;
149  }
150 
151  Iterator& operator--()
152  {
153  --m_Iter;
154  --m_InstanceIdentifier;
155  return *this;
156  }
157 
158  bool operator!=(const Iterator &it)
159  {
160  return (m_Iter != it.m_Iter);
161  }
162 
163  bool operator==(const Iterator &it)
164  {
165  return (m_Iter == it.m_Iter);
166  }
167 
168  Iterator& operator =(const Iterator & iter)
169  {
170  m_Iter = iter.m_Iter;
171  m_InstanceIdentifier = iter.m_InstanceIdentifier;
172  return *this;
173  }
174 
175  Iterator(const Iterator &iter)
176  {
177  m_Iter = iter.m_Iter;
178  m_InstanceIdentifier = iter.m_InstanceIdentifier;
179  }
180 
181  private:
182  typename InternalDataContainerType::iterator m_Iter;
184  };
185 
186 
188  {
189  public:
190 
192 
193  ConstIterator(typename InternalDataContainerType::const_iterator iter,
194  InstanceIdentifier iid)
195  :m_Iter(iter), m_InstanceIdentifier(iid) {}
196 
197  FrequencyType GetFrequency() const
198  { return 1;}
199 
200  const MeasurementVectorType & GetMeasurementVector() const
201  { return static_cast<const MeasurementVectorType&>(*m_Iter);}
202 
203  InstanceIdentifier GetInstanceIdentifier() const
204  { return m_InstanceIdentifier;}
205 
206  ConstIterator& operator++()
207  {
208  ++m_Iter;
209  ++m_InstanceIdentifier;
210  return *this;
211  }
212 
213  ConstIterator& operator--()
214  {
215  --m_Iter;
216  --m_InstanceIdentifier;
217  return *this;
218  }
219 
220  bool operator!=(const ConstIterator &it)
221  {
222  return (m_Iter != it.m_Iter);
223  }
224 
225  bool operator==(const ConstIterator &it)
226  {
227  return (m_Iter == it.m_Iter);
228  }
229 
230  ConstIterator& operator = (const ConstIterator iter)
231  {
232  m_Iter = iter.m_Iter;
233  m_InstanceIdentifier = iter.m_InstanceIdentifier;
234  return *this;
235  }
236 
237  ConstIterator& operator = (const Iterator & iter)
238  {
239  m_Iter = iter.m_Iter;
240  m_InstanceIdentifier = iter.m_InstanceIdentifier;
241  return *this;
242  }
243 
245  {
246  m_Iter = iter.m_Iter;
247  m_InstanceIdentifier = iter.m_InstanceIdentifier;
248  }
249 
250  ConstIterator(const Iterator &iter)
251  {
252  m_Iter = iter.m_Iter;
253  m_InstanceIdentifier = iter.m_InstanceIdentifier;
254  }
255 
256  private:
257  typename InternalDataContainerType::const_iterator m_Iter;
259  };
260 
262  Iterator Begin()
263  {
264  Iterator iter(m_InternalContainer.begin(), 0);
265  return iter;
266  }
267 
269  Iterator End()
270  {
271  Iterator iter(m_InternalContainer.end(), m_InternalContainer.size());
272  return iter;
273  }
274 
276  ConstIterator Begin() const
277  {
278  ConstIterator iter(m_InternalContainer.begin(), 0);
279  return iter;
280  }
281 
283  ConstIterator End() const
284  {
285  ConstIterator iter(m_InternalContainer.end(), m_InternalContainer.size());
286  return iter;
287  }
288 
289  virtual MeasurementVectorSizeType GetMeasurementVectorSize() const
290  {
291  if ( !this->Superclass::GetMeasurementVectorSize() && this->Size())
292  { // determined from the length of the first vector in the sample
293  // at run time
294  return MeasurementVectorTraits::GetLength(this->GetMeasurementVector(0));
295  }
296  return this->Superclass::GetMeasurementVectorSize();
297  }
298 
299 protected:
300  ListSample();
301  virtual ~ListSample() {}
302  void PrintSelf(std::ostream& os, Indent indent) const;
303 
304 
305 private:
306  ListSample(const Self&); //purposely not implemented
307  void operator=(const Self&); //purposely not implemented
308 
310 
311 };
312 
313 } // end of namespace Statistics
314 } // end of namespace itk
315 
316 #ifndef ITK_MANUAL_INSTANTIATION
317 #include "itkListSample.txx"
318 #endif
319 
320 #endif

Generated at Sat Jun 15 2013 23:52:19 for Orfeo Toolbox with doxygen 1.8.3.1