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