]> Creatis software - FrontAlgorithms.git/blob - lib/fpa/Base/MinimumSpanningTree.h
Almost there...
[FrontAlgorithms.git] / lib / fpa / Base / MinimumSpanningTree.h
1 #ifndef __FPA__BASE__MINIMUMSPANNINGTREE__H__
2 #define __FPA__BASE__MINIMUMSPANNINGTREE__H__
3
4 #include <map>
5 #include <utility>
6 #include <vector>
7 #include <itkSimpleDataObjectDecorator.h>
8 #include <itkSmartPointer.h>
9
10 namespace fpa
11 {
12   namespace Base
13   {
14     /**
15      */
16     template< class V, class C, class VC >
17     class MinimumSpanningTree
18       : public itk::SimpleDataObjectDecorator< std::map< V, std::pair< V, short >, VC > >
19     {
20     public:
21       typedef std::pair< V, short >                        TNodeInfo;
22       typedef std::map< V, TNodeInfo, VC >                 TDecorated;
23       typedef MinimumSpanningTree                          Self;
24       typedef itk::SimpleDataObjectDecorator< TDecorated > Superclass;
25       typedef itk::SmartPointer< Self >                    Pointer;
26       typedef itk::SmartPointer< const Self >              ConstPointer;
27
28       typedef V  TVertex;
29       typedef C  TCollisions;
30       typedef VC TVertexCompare;
31
32     protected:
33       typedef std::vector< unsigned long > _TRow;
34       typedef std::vector< _TRow >         _TMatrix;
35
36     public:
37       itkNewMacro( Self );
38       itkTypeMacro( MinimumSpanningTree, B );
39
40       itkGetConstMacro( Collisions, TCollisions );
41
42     public:
43       void SetCollisions( const TCollisions& collisions );
44       void SetParent( const TVertex& v, const TVertex& p, const short& fid )
45         {
46           this->Get( )[ v ] = TNodeInfo( p, fid );
47           this->Modified( );
48         }
49
50       virtual void GetPath(
51         std::vector< V >& path, const V& a, const V& b
52         ) const;
53
54     protected:
55       MinimumSpanningTree( );
56       virtual ~MinimumSpanningTree( );
57
58       virtual void _Path( std::vector< V >& path, const V& a ) const;
59
60     private:
61       // Purposely not implemented
62       MinimumSpanningTree( const Self& other );
63       Self& operator=( const Self& other );
64
65     protected:
66       TCollisions m_Collisions;
67       _TMatrix    m_FrontPaths;
68       static const unsigned long INF_VALUE;
69     };
70
71   } // ecapseman
72
73 } // ecapseman
74
75 #include <fpa/Base/MinimumSpanningTree.hxx>
76
77 #endif // __FPA__BASE__MINIMUMSPANNINGTREE__H__
78
79 // eof - $RCSfile$