X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2FcpExtensions%2FDataStructures%2FGraph.hxx;h=62c6b75c60012c7f9584e470f300451f01880822;hb=510ac31d52c1ac725baf278243c958e6c564b5b3;hp=8470099faf483a9e063a1795e1b667b2e2c811bd;hpb=b5417af22a8c30e05961789f4758c10e0cc1b926;p=cpPlugins.git diff --git a/lib/cpExtensions/DataStructures/Graph.hxx b/lib/cpExtensions/DataStructures/Graph.hxx index 8470099..62c6b75 100644 --- a/lib/cpExtensions/DataStructures/Graph.hxx +++ b/lib/cpExtensions/DataStructures/Graph.hxx @@ -1,9 +1,9 @@ -#ifndef __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__ -#define __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__ +#ifndef __cpExtensions__DataStructures__Graph__hxx__ +#define __cpExtensions__DataStructures__Graph__hxx__ // ------------------------------------------------------------------------- -template< class V, class C, class I > -void cpExtensions::DataStructures::Graph< V, C, I >:: +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +void cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: Clear( ) { this->m_Vertices.clear( ); @@ -11,9 +11,9 @@ Clear( ) } // ------------------------------------------------------------------------- -template< class V, class C, class I > -bool cpExtensions::DataStructures::Graph< V, C, I >:: -RenameVertex( const I& old_index, const I& new_index ) +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +bool cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +RenameVertex( const TIndex& old_index, const TIndex& new_index ) { auto old_v = this->m_Vertices.find( old_index ); auto new_v = this->m_Vertices.find( new_index ); @@ -71,9 +71,9 @@ RenameVertex( const I& old_index, const I& new_index ) } // ------------------------------------------------------------------------- -template< class V, class C, class I > -void cpExtensions::DataStructures::Graph< V, C, I >:: -RemoveVertex( const I& index ) +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +void cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +RemoveVertex( const TIndex& index ) { auto i = this->m_Vertices.find( index ); if( i != this->m_Vertices.end( ) ) @@ -109,9 +109,60 @@ RemoveVertex( const I& index ) } // ------------------------------------------------------------------------- -template< class V, class C, class I > -bool cpExtensions::DataStructures::Graph< V, C, I >:: -HasEdge( const I& orig, const I& dest ) const +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +typename +cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +TEdges& +cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +GetEdges( const TIndex& orig, const TIndex& dest ) +{ + static TEdges null_edges; + auto o = this->m_Matrix.find( orig ); + if( o != this->m_Matrix.find( orig ) ) + { + auto d = o->second.find( dest ); + if( d == o->second.end( ) ) + { + null_edges.clear( ); + return( null_edges ); + } + else + return( d->second ); + } + else + { + null_edges.clear( ); + return( null_edges ); + + } // fi +} + +// ------------------------------------------------------------------------- +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +const typename +cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +TEdges& +cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +GetEdges( const TIndex& orig, const TIndex& dest ) const +{ + static const TEdges null_edges; + auto o = this->m_Matrix.find( orig ); + if( o != this->m_Matrix.find( orig ) ) + { + auto d = o->second.find( dest ); + if( d == o->second.end( ) ) + return( null_edges ); + else + return( d->second ); + } + else + return( null_edges ); +} + +// ------------------------------------------------------------------------- +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +bool cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +HasEdge( const TIndex& orig, const TIndex& dest ) const { auto mIt = this->m_Matrix.find( orig ); if( mIt != this->m_Matrix.end( ) ) @@ -121,9 +172,9 @@ HasEdge( const I& orig, const I& dest ) const } // ------------------------------------------------------------------------- -template< class V, class C, class I > -void cpExtensions::DataStructures::Graph< V, C, I >:: -RemoveEdge( const I& orig, const I& dest, const C& cost ) +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +void cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +RemoveEdge( const TIndex& orig, const TIndex& dest, const TCost& cost ) { auto m = this->m_Matrix.find( orig ); if( m != this->m_Matrix.end( ) ) @@ -158,9 +209,9 @@ RemoveEdge( const I& orig, const I& dest, const C& cost ) } // ------------------------------------------------------------------------- -template< class V, class C, class I > -void cpExtensions::DataStructures::Graph< V, C, I >:: -RemoveEdges( const I& orig, const I& dest ) +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +void cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: +RemoveEdges( const TIndex& orig, const TIndex& dest ) { auto m = this->m_Matrix.find( orig ); if( m != this->m_Matrix.end( ) ) @@ -179,11 +230,12 @@ RemoveEdges( const I& orig, const I& dest ) } // ------------------------------------------------------------------------- -template< class V, class C, class I > -std::set< I > cpExtensions::DataStructures::Graph< V, C, I >:: +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +std::set< _TIndex, _TIndexCompare > +cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: GetSinks( ) const { - std::set< I > sinks; + std::set< _TIndex, _TIndexCompare > sinks; auto vIt = this->m_Vertices.begin( ); for( ; vIt != this->m_Vertices.end( ); ++vIt ) @@ -196,20 +248,20 @@ GetSinks( ) const } // ------------------------------------------------------------------------- -template< class V, class C, class I > -cpExtensions::DataStructures::Graph< V, C, I >:: +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: Graph( ) : Superclass( ) { } // ------------------------------------------------------------------------- -template< class V, class C, class I > -cpExtensions::DataStructures::Graph< V, C, I >:: +template< class _TVertex, class _TCost, class _TIndex, class _TIndexCompare > +cpExtensions::DataStructures::Graph< _TVertex, _TCost, _TIndex, _TIndexCompare >:: ~Graph( ) { } -#endif // __CPEXTENSIONS__DATASTRUCTURES__GRAPH__HXX__ +#endif // __cpExtensions__DataStructures__Graph__hxx__ // eof - $RCSfile$