Main Page   Groups   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Concepts

itkListSample.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   Insight Segmentation & Registration Toolkit
00004   Module:    $RCSfile: itkListSample.h,v $
00005   Language:  C++
00006   Date:      $Date: 2005/09/30 17:24:45 $
00007   Version:   $Revision: 1.26 $
00008 
00009   Copyright (c) Insight Software Consortium. All rights reserved.
00010   See ITKCopyright.txt or http://www.itk.org/HTML/Copyright.htm for details.
00011 
00012      This software is distributed WITHOUT ANY WARRANTY; without even 
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00014      PURPOSE.  See the above copyright notices for more information.
00015 
00016 =========================================================================*/
00017 #ifndef __itkListSample_h
00018 #define __itkListSample_h
00019 
00020 #include "itkObjectFactory.h"
00021 #include "itkMacro.h"
00022 #include "itkListSampleBase.h"
00023 #include "itkFixedArray.h"
00024 #include "itkSmartPointer.h"
00025 
00026 #include <vector>
00027 
00028 namespace itk{ 
00029 namespace Statistics{
00030 
00045 template< class TMeasurementVector >
00046 class ITK_EXPORT ListSample : public ListSampleBase< TMeasurementVector >
00047 {
00048 public:
00050   typedef ListSample  Self;
00051   typedef ListSampleBase< TMeasurementVector > Superclass;
00052   typedef SmartPointer< Self > Pointer;
00053   typedef SmartPointer<const Self> ConstPointer;
00054 
00056   itkTypeMacro(ListSample, ListSampleBase);
00057 
00059   itkNewMacro(Self) ;
00060   
00062   typedef typename Superclass::MeasurementVectorType MeasurementVectorType;
00063   typedef typename Superclass::MeasurementType MeasurementType;
00064   typedef typename Superclass::FrequencyType FrequencyType ;
00065   typedef typename Superclass::TotalFrequencyType TotalFrequencyType ;
00066   typedef typename Superclass::InstanceIdentifier InstanceIdentifier;
00067   typedef typename Superclass::SearchResultVectorType SearchResultVectorType ;
00068 
00071   typedef MeasurementVectorType ValueType ;
00072 
00073 
00075   typedef std::vector< MeasurementVectorType > InternalDataContainerType ;
00076 
00082   void Resize( unsigned int n ) 
00083   { m_InternalContainer.resize(n) ; }
00084 
00086   void Clear() 
00087   { m_InternalContainer.clear() ; }
00088 
00090   void PushBack( MeasurementVectorType mv )
00091   { m_InternalContainer.push_back( mv ) ; }
00092 
00094   unsigned int Size() const
00095   { return static_cast<unsigned int>( m_InternalContainer.size() ); }
00096 
00099   const MeasurementVectorType & GetMeasurementVector(const InstanceIdentifier &id) const;
00100 
00102   void SetMeasurement(const InstanceIdentifier &id, 
00103                       const unsigned int &dim,
00104                       const MeasurementType &value) ;
00105 
00107   void SetMeasurementVector(const InstanceIdentifier &id, 
00108                             const MeasurementVectorType &mv) ;
00109 
00112   FrequencyType GetFrequency(const InstanceIdentifier &id) const ;
00113 
00116   TotalFrequencyType GetTotalFrequency() const
00117   { return static_cast<TotalFrequencyType>( m_InternalContainer.size() ); }
00118 
00119   class ConstIterator;
00120  
00121   class Iterator
00122   {
00123 
00124     friend class ConstIterator;
00125 
00126   public:
00127     
00128     Iterator(){}
00129     
00130     Iterator(typename InternalDataContainerType::iterator iter, 
00131              InstanceIdentifier iid)
00132       :m_Iter(iter), m_InstanceIdentifier(iid)
00133     {}
00134     
00135     FrequencyType GetFrequency() const
00136     { return 1 ;}
00137 
00138     const MeasurementVectorType & GetMeasurementVector() const
00139     { return (MeasurementVectorType&) *m_Iter ;} 
00140 
00141     InstanceIdentifier GetInstanceIdentifier() const
00142     { return m_InstanceIdentifier ;}
00143 
00144     Iterator& operator++()
00145     { ++m_Iter ; ++m_InstanceIdentifier ; return *this ;}
00146     
00147     Iterator& operator--()
00148     { 
00149       --m_Iter ; 
00150 
00151       if ( m_InstanceIdentifier > 1 )
00152         m_InstanceIdentifier; 
00153       
00154       return *this ;
00155     }
00156 
00157     bool operator!=(const Iterator &it)
00158     { return (m_Iter != it.m_Iter) ;}
00159     
00160     bool operator==(const Iterator &it)
00161     { return (m_Iter == it.m_Iter) ;}
00162     
00163     Iterator& operator = (const Iterator & iter)
00164     { 
00165       m_Iter = iter.m_Iter; 
00166       m_InstanceIdentifier = iter.m_InstanceIdentifier ;
00167       return *this ;
00168     }
00169 
00170     Iterator(const Iterator &iter)
00171     {
00172       m_Iter = iter.m_Iter; 
00173       m_InstanceIdentifier = iter.m_InstanceIdentifier ;
00174     }
00175     
00176   private:
00177     typename InternalDataContainerType::iterator m_Iter ;
00178     InstanceIdentifier m_InstanceIdentifier ;
00179   } ;
00180 
00181  
00182   class ConstIterator
00183   {
00184   public:
00185     
00186     ConstIterator(){}
00187     
00188     ConstIterator(typename InternalDataContainerType::const_iterator iter, 
00189              InstanceIdentifier iid)
00190       :m_Iter(iter), m_InstanceIdentifier(iid)
00191     {}
00192     
00193     FrequencyType GetFrequency() const
00194     { return 1 ;}
00195 
00196     const MeasurementVectorType & GetMeasurementVector() const
00197     { return (MeasurementVectorType&) *m_Iter ;} 
00198 
00199     InstanceIdentifier GetInstanceIdentifier() const
00200     { return m_InstanceIdentifier ;}
00201 
00202     ConstIterator& operator++()
00203     { ++m_Iter ; ++m_InstanceIdentifier ; return *this ;}
00204     
00205     ConstIterator& operator--()
00206     { 
00207       --m_Iter ; 
00208 
00209       if ( m_InstanceIdentifier > 1 )
00210         m_InstanceIdentifier; 
00211       
00212       return *this ;
00213     }
00214 
00215     bool operator!=(const ConstIterator &it)
00216     { return (m_Iter != it.m_Iter) ;}
00217     
00218     bool operator==(const ConstIterator &it)
00219     { return (m_Iter == it.m_Iter) ;}
00220     
00221     ConstIterator& operator = (const ConstIterator iter)
00222     { 
00223       m_Iter = iter.m_Iter; 
00224       m_InstanceIdentifier = iter.m_InstanceIdentifier ;
00225       return *this ;
00226     }
00227 
00228     ConstIterator& operator = (const Iterator & iter)
00229     { 
00230       m_Iter = iter.m_Iter; 
00231       m_InstanceIdentifier = iter.m_InstanceIdentifier ;
00232       return *this ;
00233     }
00234 
00235 
00236     ConstIterator(const ConstIterator &iter)
00237     {
00238       m_Iter = iter.m_Iter; 
00239       m_InstanceIdentifier = iter.m_InstanceIdentifier ;
00240     }
00241 
00242     ConstIterator(const Iterator &iter)
00243     {
00244       m_Iter = iter.m_Iter; 
00245       m_InstanceIdentifier = iter.m_InstanceIdentifier ;
00246     }
00247     
00248   private:
00249     typename InternalDataContainerType::const_iterator m_Iter ;
00250     InstanceIdentifier m_InstanceIdentifier ;
00251   } ;
00252 
00254   Iterator Begin()
00255   { 
00256     Iterator iter(m_InternalContainer.begin(), 0);
00257     return iter; 
00258   }
00259   
00261   Iterator End()        
00262   {
00263     Iterator iter(m_InternalContainer.end(), m_InternalContainer.size()); 
00264     return iter; 
00265   }
00266 
00268   ConstIterator Begin() const
00269   { 
00270     ConstIterator iter(m_InternalContainer.begin(), 0);
00271     return iter; 
00272   }
00273   
00275   ConstIterator End() const
00276   {
00277     ConstIterator iter(m_InternalContainer.end(), m_InternalContainer.size()); 
00278     return iter; 
00279   }
00280  
00281 protected:
00282   ListSample() ;
00283   virtual ~ListSample() {}
00284   void PrintSelf(std::ostream& os, Indent indent) const; 
00285   
00286 
00287 private:
00288   ListSample(const Self&) ; //purposely not implemented
00289   void operator=(const Self&) ; //purposely not implemented
00290 
00291   InternalDataContainerType m_InternalContainer ;
00292 
00293 };
00294 
00295 } // end of namespace Statistics 
00296 } // end of namespace itk 
00297 
00298 #ifndef ITK_MANUAL_INSTANTIATION
00299 #include "itkListSample.txx"
00300 #endif
00301 
00302 #endif

Generated at Wed May 24 23:36:43 2006 for ITK by doxygen 1.3.5 written by Dimitri van Heesch, © 1997-2000