]> Creatis software - cpPlugins.git/blob - lib/cpExtensions/DataStructures/Graph.hxx
Pipeline editor added.
[cpPlugins.git] / lib / cpExtensions / DataStructures / Graph.hxx
1 #ifndef __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__
2 #define __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__
3
4 // -------------------------------------------------------------------------
5 template< class V, class C, class I >
6 typename cpExtensions::DataStructures::Graph< V, C, I >::
7 TVertices::iterator cpExtensions::DataStructures::Graph< V, C, I >::
8 BeginVertices( )
9 {
10   return( this->m_Vertices.begin( ) );
11 }
12
13 // -------------------------------------------------------------------------
14 template< class V, class C, class I >
15 typename cpExtensions::DataStructures::Graph< V, C, I >::
16 TVertices::iterator cpExtensions::DataStructures::Graph< V, C, I >::
17 EndVertices( )
18 {
19   return( this->m_Vertices.end( ) );
20 }
21
22 // -------------------------------------------------------------------------
23 template< class V, class C, class I >
24 typename cpExtensions::DataStructures::Graph< V, C, I >::
25 TVertices::const_iterator cpExtensions::DataStructures::Graph< V, C, I >::
26 BeginVertices( ) const
27 {
28   return( this->m_Vertices.begin( ) );
29 }
30
31 // -------------------------------------------------------------------------
32 template< class V, class C, class I >
33 typename cpExtensions::DataStructures::Graph< V, C, I >::
34 TVertices::const_iterator cpExtensions::DataStructures::Graph< V, C, I >::
35 EndVertices( ) const
36 {
37   return( this->m_Vertices.end( ) );
38 }
39
40 // -------------------------------------------------------------------------
41 template< class V, class C, class I >
42 typename cpExtensions::DataStructures::Graph< V, C, I >::
43 TMatrix::iterator cpExtensions::DataStructures::Graph< V, C, I >::
44 BeginEdgesRows( )
45 {
46   return( this->m_Matrix.begin( ) );
47 }
48
49 // -------------------------------------------------------------------------
50 template< class V, class C, class I >
51 typename cpExtensions::DataStructures::Graph< V, C, I >::
52 TMatrix::iterator cpExtensions::DataStructures::Graph< V, C, I >::
53 EndEdgetsRows( )
54 {
55   return( this->m_Matrix.end( ) );
56 }
57
58 // -------------------------------------------------------------------------
59 template< class V, class C, class I >
60 typename cpExtensions::DataStructures::Graph< V, C, I >::
61 TMatrix::const_iterator cpExtensions::DataStructures::Graph< V, C, I >::
62 BeginEdgesRows( ) const
63 {
64   return( this->m_Matrix.begin( ) );
65 }
66
67 // -------------------------------------------------------------------------
68 template< class V, class C, class I >
69 typename cpExtensions::DataStructures::Graph< V, C, I >::
70 TMatrix::const_iterator cpExtensions::DataStructures::Graph< V, C, I >::
71 EndEdgesRows( ) const
72 {
73   return( this->m_Matrix.end( ) );
74 }
75
76 // -------------------------------------------------------------------------
77 template< class V, class C, class I >
78 bool cpExtensions::DataStructures::Graph< V, C, I >::
79 HasVertexIndex( const I& index ) const
80 {
81   return( this->m_Vertices.find( index ) != this->m_Vertices.end( ) );
82 }
83
84 // -------------------------------------------------------------------------
85 template< class V, class C, class I >
86 void cpExtensions::DataStructures::Graph< V, C, I >::
87 InsertVertex( const I& index, V& vertex )
88 {
89   this->m_Vertices[ index ] = vertex;
90 }
91
92 // -------------------------------------------------------------------------
93 template< class V, class C, class I >
94 V& cpExtensions::DataStructures::Graph< V, C, I >::
95 GetVertex( const I& index )
96 {
97   return( this->m_Vertices[ index ] );
98 }
99
100 // -------------------------------------------------------------------------
101 template< class V, class C, class I >
102 const V& cpExtensions::DataStructures::Graph< V, C, I >::
103 GetVertex( const I& index ) const
104 {
105   return( this->m_Vertices[ index ] );
106 }
107
108 // -------------------------------------------------------------------------
109 template< class V, class C, class I >
110 void cpExtensions::DataStructures::Graph< V, C, I >::
111 AddConnection( const I& orig, const I& dest, const C& cost )
112 {
113   this->m_Matrix[ orig ][ dest ].push_back( cost );
114 }
115
116 // -------------------------------------------------------------------------
117 template< class V, class C, class I >
118 std::set< I > cpExtensions::DataStructures::Graph< V, C, I >::
119 GetSinks( ) const
120 {
121   std::set< I > sinks;
122
123   auto vIt = this->m_Vertices.begin( );
124   for( ; vIt != this->m_Vertices.end( ); ++vIt )
125     sinks.insert( vIt->first );
126   auto mIt = this->m_Matrix.begin( );
127   for( ; mIt != this->m_Matrix.end( ); ++mIt )
128     sinks.erase( mIt->first );
129
130   return( sinks );
131 }
132
133 // -------------------------------------------------------------------------
134 template< class V, class C, class I >
135 cpExtensions::DataStructures::Graph< V, C, I >::
136 Graph( )
137   : Superclass( )
138 {
139 }
140
141 // -------------------------------------------------------------------------
142 template< class V, class C, class I >
143 cpExtensions::DataStructures::Graph< V, C, I >::
144 ~Graph( )
145 {
146 }
147
148 #endif // __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__
149
150 // eof - $RCSfile$