1 #ifndef __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__
2 #define __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__
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 >::
10 return( this->m_Vertices.begin( ) );
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 >::
19 return( this->m_Vertices.end( ) );
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
28 return( this->m_Vertices.begin( ) );
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 >::
37 return( this->m_Vertices.end( ) );
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 >::
46 return( this->m_Matrix.begin( ) );
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 >::
55 return( this->m_Matrix.end( ) );
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
64 return( this->m_Matrix.begin( ) );
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 >::
73 return( this->m_Matrix.end( ) );
76 // -------------------------------------------------------------------------
77 template< class V, class C, class I >
78 void cpExtensions::DataStructures::Graph< V, C, I >::
81 this->m_Vertices.clear( );
82 this->m_Matrix.clear( );
85 // -------------------------------------------------------------------------
86 template< class V, class C, class I >
87 bool cpExtensions::DataStructures::Graph< V, C, I >::
88 HasVertexIndex( const I& index ) const
90 return( this->m_Vertices.find( index ) != this->m_Vertices.end( ) );
93 // -------------------------------------------------------------------------
94 template< class V, class C, class I >
95 void cpExtensions::DataStructures::Graph< V, C, I >::
96 InsertVertex( const I& index, V& vertex )
98 this->m_Vertices[ index ] = vertex;
101 // -------------------------------------------------------------------------
102 template< class V, class C, class I >
103 V& cpExtensions::DataStructures::Graph< V, C, I >::
104 GetVertex( const I& index )
106 return( this->m_Vertices[ index ] );
109 // -------------------------------------------------------------------------
110 template< class V, class C, class I >
111 const V& cpExtensions::DataStructures::Graph< V, C, I >::
112 GetVertex( const I& index ) const
114 return( this->m_Vertices[ index ] );
117 // -------------------------------------------------------------------------
118 template< class V, class C, class I >
119 void cpExtensions::DataStructures::Graph< V, C, I >::
120 AddConnection( const I& orig, const I& dest, const C& cost )
122 this->m_Matrix[ orig ][ dest ].push_back( cost );
125 // -------------------------------------------------------------------------
126 template< class V, class C, class I >
127 std::set< I > cpExtensions::DataStructures::Graph< V, C, I >::
132 auto vIt = this->m_Vertices.begin( );
133 for( ; vIt != this->m_Vertices.end( ); ++vIt )
134 sinks.insert( vIt->first );
135 auto mIt = this->m_Matrix.begin( );
136 for( ; mIt != this->m_Matrix.end( ); ++mIt )
137 sinks.erase( mIt->first );
142 // -------------------------------------------------------------------------
143 template< class V, class C, class I >
144 cpExtensions::DataStructures::Graph< V, C, I >::
150 // -------------------------------------------------------------------------
151 template< class V, class C, class I >
152 cpExtensions::DataStructures::Graph< V, C, I >::
157 #endif // __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__