Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE > Class Template Reference

Clase de tipo "Template" que permite crear grafos ponderados. More...

#include <Graph.h>

Inheritance diagram for Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >:

Inheritance graph
[legend]
Collaboration diagram for Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >:

Collaboration graph
[legend]

List of all members.

Public Member Functions

 Graph ()
 Constructor.
 Graph (const Graph &g)
 Graph (const Graph &g, const list< Node > &listNode)
void operator= (const Graph &g)
void copy (const Graph &g)
 ~Graph ()
 Destructor.
void assign (const GRAPH_TYPE &x)
const GRAPH_TYPE & inf ()
virtual Node newNode (const NODE_TYPE &x)
void assign (Node n, const NODE_TYPE &x)
NODE_TYPE & inf (Node n)
NODE_TYPE inf (Node n) const
virtual void removeNode (Node n)
virtual Edge newEdge (Node source, Node target, const EDGE_TYPE &x=0)
void assign (Edge n, const EDGE_TYPE &x)
EDGE_TYPE & inf (Edge n)
EDGE_TYPE inf (Edge n) const
virtual void removeEdge (Edge e)
map< Node, NODE_TYPE > getNodeMap () const
map< Edge, EDGE_TYPE > getEdgeMap () const

Protected Attributes

map< Node, NODE_TYPE > nodeMap
map< Edge, EDGE_TYPE > edgeMap

Private Attributes

GRAPH_TYPE x


Detailed Description

template<class NODE_TYPE = int, class EDGE_TYPE = int, class GRAPH_TYPE = int>
class Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >

Clase de tipo "Template" que permite crear grafos ponderados.

Author:
Néstor Aguirre
Fecha de creación : 2007-03-18

Definition at line 39 of file Graph.h.


Constructor & Destructor Documentation

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::Graph (  )  [inline]

Constructor.

Definition at line 25 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::edgeMap, and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

00025                                                  : graph()
00026 {
00027         nodeMap = map< Node, NODE_TYPE >() ;
00028         edgeMap = map< Edge, EDGE_TYPE >() ;
00029 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::Graph ( const Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE > &  g  )  [inline]

Definition at line 32 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::copy().

00033 {
00034         this->copy( g ) ;
00035 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::Graph ( const Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE > &  g,
const list< Node > &  listNode 
) [inline]

Definition at line 38 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::copy(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf(), Node, and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

00039 {
00040         node_map<Node> copy(g, node());
00041         
00042         for( list<Node>::const_iterator it = listNode.begin(); it != listNode.end(); ++it)
00043         {
00044                 Node tmp = new_node();
00045                 copy[*it] = tmp ;
00046                 nodeMap[ tmp ] = g.inf(*it) ;
00047  
00048 //              copy[*it] = newNode( g.inf( *it ) );
00049         }
00050         
00051         for( list<Node>::const_iterator it = listNode.begin(); it != listNode.end(); ++it){
00052                 
00053                 node::out_edges_iterator e_it, e_end;
00054                 
00055                 for (e_it = (*it).out_edges_begin(), e_end = (*it).out_edges_end(); e_it != e_end; ++e_it) {
00056                         
00057                         if ( copy[e_it->target()] != node() ) {
00058                                 
00059                                 new_edge( copy[e_it->source()], copy[e_it->target()] );
00060                                 
00061                         }
00062                         
00063                 }
00064         }
00065         
00066 //      nodeMap = g.getNodeMap() ;
00067 //      edgeMap = g.getEdgeMap() ;
00068 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::~Graph (  )  [inline]

Destructor.

Definition at line 111 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::edgeMap, and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

00112 {
00113         nodeMap.clear() ;
00114         edgeMap.clear() ;
00115 }


Member Function Documentation

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
void Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::operator= ( const Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE > &  g  )  [inline]

Definition at line 71 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::copy().

00072 {
00073         this->copy( g ) ;
00074 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
void Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::copy ( const Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE > &  g  )  [inline]

Definition at line 77 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf(), Node, and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

Referenced by Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::Graph(), and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::operator=().

00078 {
00079         node_map<node> copy(g, node());
00080 
00081         for( graph::node_iterator it = g.nodes_begin(); it != g.nodes_end(); ++it)
00082         {
00083                 Node tmp = new_node();
00084                 copy[*it] = tmp ;
00085                 nodeMap[ tmp ] = g.inf(*it) ;
00086         }
00087         
00088         for( graph::node_iterator it = g.nodes_begin(); it != g.nodes_end(); ++it){
00089                 
00090                 node::out_edges_iterator e_it, e_end;
00091                 
00092                 for (e_it = (*it).out_edges_begin(), e_end = (*it).out_edges_end(); e_it != e_end; ++e_it) {
00093                         
00094                         if ( copy[e_it->target()] != node() ) {
00095                                 
00096                                 new_edge( copy[e_it->source()], copy[e_it->target()] );
00097                                 
00098                         }
00099                         
00100                 }
00101         }
00102         
00103 //      nodeMap = g.getNodeMap() ;
00104 //      edgeMap = g.getEdgeMap() ;
00105 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
void Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::assign ( const GRAPH_TYPE &  x  )  [inline]

Definition at line 121 of file Graph.cpp.

00122 {
00123         this->x = x ;
00124 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
const GRAPH_TYPE & Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf (  )  [inline]

Definition at line 130 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::x.

Referenced by Tree::areSubtreesEqual(), HyperSurface::buildAreaTree(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::copy(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::Graph(), Tree::print(), and Tree::swapSubtrees().

00131 {
00132         return x ;
00133 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
Node Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::newNode ( const NODE_TYPE &  x  )  [inline, virtual]

Parameters:
x 

Definition at line 159 of file Graph.cpp.

References Node, and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

Referenced by HyperSurface::buildAreaTree().

00160 {
00161         Node n = new_node() ;
00162         nodeMap[n] = x ;
00163         return n ;
00164 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
void Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::assign ( Node  n,
const NODE_TYPE &  x 
) [inline]

Parameters:
n 
x 

Definition at line 172 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

00173 {
00174         nodeMap[n] = x ;
00175 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
NODE_TYPE & Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf ( Node  n  )  [inline]

Parameters:
n 
Returns:

Definition at line 183 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

00184 {
00185         return nodeMap[n] ;
00186 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
NODE_TYPE Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf ( Node  n  )  const [inline]

Parameters:
n 
Returns:

Definition at line 194 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

00195 {
00196         return nodeMap.find(n)->second ;
00197 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
void Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::removeNode ( Node  n  )  [inline, virtual]

Parameters:
n 

Definition at line 140 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::edgeMap, and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

Referenced by HyperSurface::buildAreaTree().

00141 {
00142         if( !n.is_hidden() ){
00143                 for( typename Node::inout_edges_iterator it = n.inout_edges_begin(); it != n.inout_edges_end(); ++it ){
00144                         edgeMap.erase(*it) ;
00145                 }
00146         }else{
00147                 cout << "Warning!!!: Not implement, remove node hidden" << endl ;
00148         }
00149         
00150         del_node( n ) ;
00151         nodeMap.erase( n ) ;
00152 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
Edge Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::newEdge ( Node  source,
Node  target,
const EDGE_TYPE &  x = 0 
) [inline, virtual]

Parameters:
source 
target 
x 

Definition at line 206 of file Graph.cpp.

References Edge, and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::edgeMap.

00207 {
00208         Edge e = new_edge( source, target ) ;
00209         edgeMap[e] = x ;
00210         return e ;
00211 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
void Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::assign ( Edge  n,
const EDGE_TYPE &  x 
) [inline]

Parameters:
n 
x 

Definition at line 219 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::edgeMap.

00220 {
00221         edgeMap[n] = x ;
00222 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
EDGE_TYPE & Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf ( Edge  n  )  [inline]

Parameters:
n 
Returns:

Definition at line 230 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::edgeMap.

00231 {
00232         return edgeMap[n] ;
00233 }

template<class NODE_TYPE = int, class EDGE_TYPE = int, class GRAPH_TYPE = int>
EDGE_TYPE Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf ( Edge  n  )  const

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
void Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::removeEdge ( Edge  e  )  [inline, virtual]

Parameters:
n 

Definition at line 240 of file Graph.cpp.

00241 {
00242 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
map< Node, NODE_TYPE > Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::getNodeMap (  )  const [inline]

Definition at line 245 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap.

00246 {
00247         return nodeMap ;
00248 }

template<class NODE_TYPE, class EDGE_TYPE, class GRAPH_TYPE>
map< Edge, EDGE_TYPE > Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::getEdgeMap (  )  const [inline]

Definition at line 251 of file Graph.cpp.

References Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::edgeMap.

00252 {
00253         return edgeMap ;
00254 }


Member Data Documentation

template<class NODE_TYPE = int, class EDGE_TYPE = int, class GRAPH_TYPE = int>
map< Node, NODE_TYPE > Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::nodeMap [protected]

Definition at line 68 of file Graph.h.

Referenced by Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::assign(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::copy(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::getNodeMap(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::Graph(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::newNode(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::removeNode(), and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::~Graph().

template<class NODE_TYPE = int, class EDGE_TYPE = int, class GRAPH_TYPE = int>
map< Edge, EDGE_TYPE > Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::edgeMap [protected]

Definition at line 69 of file Graph.h.

Referenced by Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::assign(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::getEdgeMap(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::Graph(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::newEdge(), Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::removeNode(), and Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::~Graph().

template<class NODE_TYPE = int, class EDGE_TYPE = int, class GRAPH_TYPE = int>
GRAPH_TYPE Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::x [private]

Definition at line 72 of file Graph.h.

Referenced by Graph< NODE_TYPE, EDGE_TYPE, GRAPH_TYPE >::inf().


The documentation for this class was generated from the following files:
Generated on Mon May 26 20:29:47 2008 for TARIS by  doxygen 1.5.4