]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/DataStructures/Graph.h
More on graph editor
[cpPlugins.git] / lib / cpExtensions / DataStructures / Graph.h
1 #ifndef __CPEXTENSIONS__DATASTRUCTURES__GRAPH__H__
2 #define __CPEXTENSIONS__DATASTRUCTURES__GRAPH__H__
3
4 #include <map>
5 #include <set>
6 #include <vector>
7 #include <itkLightObject.h>
8 #include <itkObjectFactory.h>
9
10 namespace cpExtensions
11 {
12   namespace DataStructures
13   {
14     /**
15      */
16     template< class V, class C, class I = unsigned long >
17     class Graph
18       : public itk::LightObject
19     {
20     public:
21       typedef Graph                           Self;
22       typedef itk::LightObject                Superclass;
23       typedef itk::SmartPointer< Self >       Pointer;
24       typedef itk::SmartPointer< const Self > ConstPointer;
25
26       typedef V TVertex;
27       typedef C TCost;
28       typedef I TIndex;
29
30       // Graph types
31       typedef std::map< I, V >          TVertices;
32       typedef std::vector< C >          TEdges;
33       typedef std::map< I, TEdges >     TMatrixRow;
34       typedef std::map< I, TMatrixRow > TMatrix;
35
36     public:
37       itkNewMacro( Self );
38       itkTypeMacro( Graph, itk::LightObject );
39
40     public:
41       typename TVertices::iterator BeginVertices( );
42       typename TVertices::iterator EndVertices( );
43       typename TVertices::const_iterator BeginVertices( ) const;
44       typename TVertices::const_iterator EndVertices( ) const;
45
46       typename TMatrix::iterator BeginEdgesRows( );
47       typename TMatrix::iterator EndEdgetsRows( );
48       typename TMatrix::const_iterator BeginEdgesRows( ) const;
49       typename TMatrix::const_iterator EndEdgesRows( ) const;
50
51       void Clear( );
52
53       bool HasVertexIndex( const I& index ) const;
54       void InsertVertex( const I& index, V& vertex );
55       V& GetVertex( const I& index );
56       const V& GetVertex( const I& index ) const;
57
58       void AddConnection( const I& orig, const I& dest, const C& cost );
59
60       std::set< I > GetSinks( ) const;
61
62     protected:
63       Graph( );
64       virtual ~Graph( );
65
66     private:
67       // Purposely not implemented
68       Graph( const Self& other );
69       Self& operator=( const Self& other );
70
71     protected:
72       TVertices m_Vertices;
73       TMatrix   m_Matrix;
74     };
75
76   } // ecapseman
77
78 } // ecapseman
79
80 #ifndef ITK_MANUAL_INSTANTIATION
81 #include <cpExtensions/DataStructures/Graph.hxx>
82 #endif // ITK_MANUAL_INSTANTIATION
83
84 #endif // __CPEXTENSIONS__DATASTRUCTURES__GRAPH__H__
85
86 // eof - $RCSfile$