]> 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 SetVertex( const I& index, V& vertex );
55       bool RenameVertex( const I& old_index, const I& new_index );
56       V& GetVertex( const I& index );
57       const V& GetVertex( const I& index ) const;
58
59       void AddConnection( const I& orig, const I& dest, const C& cost );
60
61       std::set< I > GetSinks( ) const;
62
63     protected:
64       Graph( );
65       virtual ~Graph( );
66
67     private:
68       // Purposely not implemented
69       Graph( const Self& other );
70       Self& operator=( const Self& other );
71
72     protected:
73       TVertices m_Vertices;
74       TMatrix   m_Matrix;
75     };
76
77   } // ecapseman
78
79 } // ecapseman
80
81 #ifndef ITK_MANUAL_INSTANTIATION
82 #include <cpExtensions/DataStructures/Graph.hxx>
83 #endif // ITK_MANUAL_INSTANTIATION
84
85 #endif // __CPEXTENSIONS__DATASTRUCTURES__GRAPH__H__
86
87 // eof - $RCSfile$