Referencia de la plantilla de la Clase List_Digraph
[Grafos.]

Clase digrafo (grafo dirigido) implementado con listas de adyacencia. Más...

Diagrama de herencias de List_Digraph

Inheritance graph
[leyenda]
Diagrama de colaboración para List_Digraph:

Collaboration graph
[leyenda]

Lista de todos los miembros.

Tipos públicos

typedef Arc_Info Arc
 Tipo de arco.
typedef Arc::Arc_Type Arc_Type
 Tipo de dato contenido en arco.
typedef Node_Info Node
 Tipo de nodo.
typedef Node::Node_Type Node_Type
 Tipo de dato contenido en nodo.

Métodos públicos

bool arc_belong_to_graph (Arc *arc)
 Retorna true si el arco apuntado por arc está inserto dentro del grafo.
void clear_graph ()
 Limpia todo el grafo (todos sus nodos y arcos son eliminados y la memoria es liberada).
void copy_graph (List_Graph &src_graph, const bool cookie_map=false)
 Copia explícita de grafos.
Nodeget_connected_node (Arc *arc, Node *node)
 Retorna el nodo conectado a node mediante el arco arc.
Bit_Fieldsget_control_bits (Node *node)
 Retorna los bits de control de un nodo.
void *& get_cookie (Arc *arc)
 Obtiene el cookie de un arco.
void *& get_cookie (Node *node)
 Obtiene el cookie de un nodo.
long & get_counter (Arc *arc)
 Accede a contador de arco.
long & get_counter (Node *node)
 Accede a contador de nodo.
Arcget_first_arc ()
 Retorna el primer arco del grafo.
Nodeget_first_node ()
 Retorna el primer nodo del grafo.
const size_t & get_num_arcs (Node *node) const
 Retorna la cantidad total de arcos que tiene un nodo.
const size_t & get_num_arcs () const
 Retorna la cantidad total de arcos que tiene el grafo.
const size_t & get_num_nodes () const
 Retorna el número de nodos que tiene el grafo.
Nodeget_src_node (Arc *arc)
 Retorna el nodo origen de arc.
Nodeget_tgt_node (Arc *arc)
 Retorna el nodo destino de arc.
Arcinsert_arc (Node *src_node, Node *tgt_node, const typename Arc::Arc_Type &arc_info)
 Crea un nuevo arco entre dos nodos.
Nodeinsert_node (const Node_Type &node_info)
 Crea un nuevo nodo en un grafo.
Nodeinsert_node (Node *node)
 Inserción de un nodo cuya memoria ya ha sido apartada.
bool is_digraph () const
 Retorna true si this es un digrafo.
bool node_belong_to_arc (Arc *arc, Node *node) const
 Retorna true si el nodo node está conectado por el arco arc.
bool node_belong_to_graph (Node *node)
 Retorna true si el nodo apuntado por node está inserto dentro del grafo.
void operate_on_arcs (Node *node, void *ptr)
 Actuador sobre todos los arcos de un nodo con parámetro adicional.
void operate_on_arcs (Node *node)
 Actuador sobre todos los arcos de un grafo.
void operate_on_arcs (void *ptr)
 Actuador sobre todos los arcos de un grafo con parámetro adicional.
void operate_on_arcs ()
 Actuador sobre todos los arcos de un grafo.
void operate_on_nodes (void *ptr)
 Actuador sobre todos los nodos de un grafo.
void operate_on_nodes ()
 Actuador sobre todos los nodos de un grafo.
List_Digraphoperator= (List_Digraph &dg)
 Asignación digrafo a un grafo.
void remove_arc (Arc *arc)
 Elimina el arco arc.
void remove_node (Node *node)
 Elimina un nodo junto con todos sus arcos.
void reset_arc (Arc *arc)
 Reinicia un arco (bits de control, contador y cookie).
void reset_arcs ()
 Reinicia todos los arcos de un grafo (bits de control, contador y cookie).
void reset_bit (Arc *arc, const int &bit)
 Reinicia a cero un bit de control de un arco.
void reset_bit (Node *node, const int &bit)
 Reinicia a cero un bit de control de un nodo.
void reset_bit_arcs (const int &bit)
 Reinicia en cero un bit en todos los arcos de un grafo.
void reset_bit_nodes (const int &bit)
 Reinicia en cero un bit en todos los nodos de un grafo.
void reset_cookie_arcs ()
 Reinicia todos el cookie a NULL en todos los arcos del grafo.
void reset_cookie_nodes ()
 Reinicia todos el cookie a NULL en todos los nodos del grafo.
void reset_counter (Arc *arc)
 Reinicia en cero el contador de arco.
void reset_counter (Node *node)
 Reinicia en cero el contador de nodo.
void reset_counter_arcs ()
 Reinicia en cero todos los contadores de los arcos.
void reset_counter_nodes ()
 Reinicia en cero todos los contadores de los nodos.
void reset_node (Node *node)
 Reinicia un nodo (bits de control, contador y cookie).
void reset_nodes ()
 Reinicia todos los nodos de un grafo (bits de control, contador y cookie).
Arcsearch_arc (void *ptr)
 Búsqueda de nodo con criterio de igualdad y parámetro adicional.
Arcsearch_arc (const Arc_Type &arc_info)
 Búsqueda de arco con información arc_info.
Arcsearch_arc (const Arc_Type &arc_info)
 Búsqueda de arco con criterio de igualdad.
Nodesearch_node (void *ptr)
 Búsqueda de nodo con criterio de igualdad y parámetro adicional.
Nodesearch_node (const Node_Type &node_info)
 Búsqueda de nodo con información node_info.
Nodesearch_node (const Node_Type &node_info)
 Búsqueda de nodo con criterio de igualdad.
void set_bit (Arc *arc, const int &bit, const int &value)
 Escribe un valor de bit sobre un arco.
void set_bit (Node *node, const int &bit, const int &value)
 Escribe un valor de bit sobre un nodo.
void sort_arcs ()
 Ordena los arcos de un grafo.

Métodos públicos estáticos

static void map_arcs (Arc *p, Arc *q)
 Mapea dos arcos mediante sus cookies.
static void map_nodes (Node *p, Node *q)
 Mapea dos nodos mediante sus cookies.


Descripción detallada

template<typename Node_Info, typename Arc_Info>
class Aleph::List_Digraph< Node_Info, Arc_Info >

Esta clase modeliza un grafo dirigido. Funcionalmente es equivalente a la clase List_Graph, a la excepción de que ésta maneja grafos dirigidos.

Parámetros:
__Graph_Node El tipo de nodo. Debe estar definido a partir de la clase __Graph_Node, bien sea por inclusión de atributos, por derivación o por combinación de ambos
__Graph_Arc El tipo de arco. Debe estar definido a partir de la clase __Graph_Arc, bien sea por inclusión de atributos, por derivación o por combinación de ambos
Ver también:
Graph_Node Graph_Arc

List_graph

Definición en la línea 1930 del archivo tpl_graph.H.


Documentación de las funciones miembro

void copy_graph ( List_Graph< Node_Info, Arc_Info > &  src_graph,
const bool  cookie_map = false 
) [inherited]

La rutina primero limpia el grafo this (se eliminan sus nodos arcos y se libera toda la memoria); luego copia enteramente el grafo (o digrafo) g a this. Si el valor lógico cookie_map es cierto, entonces la copia es mapeada; es decir, todos los cookies de los nodos y arcos de ambos grafos quedan mapeados entre sí.

Parámetros:
[in] src_graph grafo o digrafo a ser copiado.
[in] cookie_map si el valor es true, entonces la copia es mapeada. Por omisión no se realiza copia mapeada.
Excepciones:
bad_alloc si no hay suficiente memoria para la copia.
Nota:
La copia no incluye los atributos de control del grafo (bit, contador y cookies)

Node* get_connected_node ( Arc *  arc,
Node *  node 
) [inline, inherited]

Esta es la primitiva a utilizar cuando se accede a un arco de un grafo (no digrafo) y se desea discernir un extremo del arco dado el otro nodo extremo.

Parámetros:
[in] arc arco del grafo
[in] node nodo conectado al arco
Devuelve:
el nodo conectado a node a través del arco arc
Nota:
No se verifica que node esté conectado a arc

Bit_Fields& get_control_bits ( Node *  node  )  [inline, inherited]

Parámetros:
[in] node puntero a nodo al cual se desea leer los bits de control.
Devuelve:
referencia a los bits de control.

void*& get_cookie ( Arc *  arc  )  [inline, inherited]

Parámetros:
[in] arc puntero al arco al cual se desea obtener el cookie.
Devuelve:
referencia al puntero cookie.

void*& get_cookie ( Node *  node  )  [inline, inherited]

Parámetros:
[in] node puntero al nodo al cual se desea obtener el cookie.
Devuelve:
referencia al puntero cookie.

long& get_counter ( Arc *  arc  )  [inline, inherited]

Parámetros:
[in] arc puntero a arco al cual se desea acceder al contador.
Devuelve:
referencia modificable al contador.

long& get_counter ( Node *  node  )  [inline, inherited]

Parámetros:
[in] node puntero a nodo al cual se desea acceder al contador.
Devuelve:
referencia modificable al contador.

Arc* get_first_arc (  )  [inline, inherited]

Esta rutina debe considerarse como un punto de entrada al grafo independientemente del valor del arc. Por lo general, no es recomendable asumir cuál será el nodo retornado por esta rutina. Sin embargo, a la excepción de su equivalente para nodos, los arcos pueden ordenarse según algún criterio específico de comparación (pesos por ejemplo). Consecuentemente, en caso de ordenamiento, el primer arco a retornar será el menor (o mayor) según el criterio de ordenamiento.

Devuelve:
puntero al primer nodo del grafo.
Ver también:
sort_arcs()

Node* get_first_node (  )  [inline, inherited]

Esta rutina debe considerarse como un punto de entrada al grafo independientemente del valor del nodo. No debe asumirse ninguna consideración acerca cuál será el nodo retornado por esta rutina.

Devuelve:
puntero al primer nodo del grafo.

const size_t& get_num_arcs ( Node *  node  )  const [inline, inherited]

Parámetros:
[in] node nodo sobre el cual se desea conocer el número de arcos.
Devuelve:
la cantidad de arcos.

Node* get_src_node ( Arc *  arc  )  [inline, inherited]

Parámetros:
[in] arc puntero al arco sobre el cual se desea consultar el nodo origen.
Devuelve:
puntero al nodo origen.
Nota:
Si se trata de un grafo, entonces la noción de nodo origen o destino no tiene sentido bien definido.

Node* get_tgt_node ( Arc *  arc  )  [inline, inherited]

Parámetros:
[in] arc puntero al arco sobre el cual se desea consultar el nodo destino.
Devuelve:
puntero al nodo destino.
Nota:
Si se trata de un grafo, entonces la noción de nodo origen o destino no tiene sentido bien definido.

Arc* insert_arc ( Node *  src_node,
Node *  tgt_node,
const typename Arc::Arc_Type &  arc_info 
) [inline, inherited]

Este método aparta memoria para un nuevo arco entre los nodos previamente definidos, src_node y tgt_node con valor de contenido en el arco arc_info.

Los nodos deben haber sido previamente insertados en el grafo. A este respecto, no se hace ninguna verificación. El operador de asignación de la clase Arc::Arc_Type debe haber sido definido.

No se realiza ninguna verificación de existencia previa de un arco entre los nodos involucrados (esto es necesario para operar con multigrafos).

Parámetros:
[in] src_node puntero al nodo origen.
[in] tgt_node puntero al nodo destino.
[in] arc_info valor de información a ser copiado en el arco.
Devuelve:
puntero al arco insertado
Excepciones:
bad_alloc si no hay memoria para el arco.

Node* insert_node ( const Node_Type &  node_info  )  [inline, inherited]

Este método aparta memoria para un nodo de tipo List_Graph::Node y le asigna como atributo el valor node_info.

Parámetros:
[in] node_info Información que se desea copiar en el nodo. Es imperativo que exista el constructor copia Node_Info.
Devuelve:
puntero al nodo recién creado.
Excepciones:
bad_alloc si no hay memoria para el nuevo.

Node* insert_node ( Node *  node  )  [inline, inherited]

Este método asume un nodo de tipo List_Graph::Node apuntado por el parámetro node y lo inserta en el grafo.

Parámetros:
[in] node puntero a un nodo ya creado que no pertenece a ningún grafo.
Devuelve:
Puntero al nodo insertado.
Nota:
Puesto que cuando se elimine el nodo o se destruya el grafo se invocará al operador delete, node debe haber sido imperativamente apartado con new.

Por lo general, esta rutina no debe usarse. En su lugar debe utilizarse la otra inserción (que aparta memoria automáticamente.

static void map_arcs ( Arc *  p,
Arc *  q 
) [static, inherited]

Dados dos punteros a arcos, por lo general de instancias distintas de grafos, esta función realiza un mapeo mediante los punteros cookies. Luego del mapeo, el cookie de un arco apunta al otro y viceversa.

Si el valor del cookie de p es distintos de NULL, entonces la primitiva asume que p ya está mapeado a otro arco y la primitiva continua el mapeo como una composición.

Por lo general, el mapeo se utiliza por algoritmos que requieren copiar grafos o subgrafos. Mediante el mapeo, se puede tener una imagen del grafo original en el subgrafo y viceversa.

Parámetros:
p puntero a arco a ser mapeado.
q puntero a arco a ser mapeado.

static void map_nodes ( Node *  p,
Node *  q 
) [static, inherited]

Dados dos punteros a nodos, por lo general de instancias distintas de grafos, esta función realiza un mapeo mediante los punteros cookies. Luego del mapeo, el cookie de un nodo apunta al otro y viceversa.

Si el valor del cookie de p es distintos de NULL, entonces la primitiva asume que p ya está mapeado a otro nodo y la primitiva continua el mapeo como una composición.

Por lo general, el mapeo se utiliza por algoritmos que requieren copiar grafos o subgrafos. Mediante el mapeo, se puede tener una imagen del grafo original en el subgrafo y viceversa.

Parámetros:
p puntero a nodo a ser mapeado.
q puntero a nodo a ser mapeado.

bool node_belong_to_arc ( Arc *  arc,
Node *  node 
) const [inline, inherited]

Parámetros:
[in] arc puntero a arco
[in] node puntero a nodo
Devuelve:
true si node está conectado por arc; false de lo contrario.

void operate_on_arcs ( Node *  node,
void *  ptr 
) [inline, inherited]

Esta rutina recorre cada arco de un nodo de grafo y sobre él ejecuta la operación Operation()(this, arco_actual, ptr).

Este es el actuador de escogencia en caso de que la operación requiera otra información que no pueda obtenerse del grafo o del arco.

Parámetros:
node nodo sobre el cual se recorrerán sus arcos.
ptr puntero opaco por el cual se puede pasar cualquier otra información a la operación.

Definición en la línea 1594 del archivo tpl_graph.H.

void operate_on_arcs ( Node *  node  )  [inline, inherited]

Esta rutina recorre cada arco de un nodo y sobre el ejecuta la operación Operation()(this, arco_actual).

Parámetros:
[in] node nodo sobre el cual se recorrerán sus arcos.

Definición en la línea 1575 del archivo tpl_graph.H.

void operate_on_arcs ( void *  ptr  )  [inline, inherited]

Esta rutina recorre cada arco del grafo y sobre el ejecuta la operación Operation()(this, arco_actual, ptr).

Este es el actuador de escogencia en caso de que la operación requiera otra información que no pueda obtenerse del grafo o del arco.

Parámetros:
[in] ptr puntero opaco por el cual se puede pasar cualquier otra información a la operación.

Definición en la línea 1562 del archivo tpl_graph.H.

void operate_on_arcs (  )  [inline, inherited]

Esta rutina recorre cada arco del grafo y sobre el ejecuta la operación Operation()(this, arco_actual).

Definición en la línea 1544 del archivo tpl_graph.H.

void operate_on_nodes ( void *  ptr  )  [inline, inherited]

Esta rutina recorre cada nodo del grafo y sobre el ejecuta la operación Operation()(this, nodo_actual, ptr).

Este es el actuador de escogencia en caso de que la operación requiera otra información que no pueda obtenerse del grafo o del nodo.

Parámetros:
ptr puntero opaco por el cual se puede pasar o recibir cualquier otra información a la operación.

Definición en la línea 1360 del archivo tpl_graph.H.

void operate_on_nodes (  )  [inline, inherited]

Esta rutina recorre cada nodo del grafo y sobre el ejecuta la operación Operation()(this, nodo_actual).

Definición en la línea 1342 del archivo tpl_graph.H.

List_Digraph& operator= ( List_Digraph< Node_Info, Arc_Info > &  g  ) 

Limpia todos el grafo this (sus nodos y arcos son eliminados y la memoria es liberada); luego copia enteramente el digrafo g a this. Toda la estructura es copiada con contenidos tanto en los nodos como en los arcos. Los arcos dirigidos son convertidos a arcos bidireccionales.

Parámetros:
g el digrafo a asignar
Excepciones:
bad_alloc si no hay suficiente memoria para la copia.
Nota:
La copia no incluye los atributos de control del grafo (bit, contador y cookies)

Reimplementado de List_Graph< Node_Info, Arc_Info >.

void remove_arc ( Arc *  arc  )  [inline, inherited]

La operación elimina del grafo el arco arc y luego libera su memoria.

El arco debe pertenecer al grafo y no se realiza ninguna verificación al respecto.

Parámetros:
[in] arc puntero al arco a eliminar

void remove_node ( Node *  node  )  [inline, inherited]

Esta rutina elimina todos los arcos del nodo node y luego elimina el mismo nodo. Toda la memoria ocupada por los arcos y el nodo es liberada.

Parámetros:
[in] node nodo a ser eliminado.

void reset_arc ( Arc *  arc  )  [inline, inherited]

Parámetros:
[in] arc puntero a arco a ser reiniciado.

void reset_bit ( Arc *  arc,
const int &  bit 
) [inline, inherited]

Parámetros:
[in] arc puntero del nodo cuyo bit se desea reiniciar.
[in] bit valor del bit a reiniciar.

void reset_bit ( Node *  node,
const int &  bit 
) [inline, inherited]

Parámetros:
[in] node puntero del nodo cuyo bit se desea reiniciar.
[in] bit valor del bit a reiniciar.

void reset_bit_arcs ( const int &  bit  )  [inline, inherited]

Parámetros:
[in] bit número de bit a reiniciar.

Definición en la línea 1647 del archivo tpl_graph.H.

Hace referencia a List_Graph::reset_bit().

void reset_bit_nodes ( const int &  bit  )  [inline, inherited]

Parámetros:
[in] bit número de bit a reiniciar.

Definición en la línea 1638 del archivo tpl_graph.H.

Hace referencia a List_Graph::reset_bit().

void reset_counter ( Arc *  arc  )  [inline, inherited]

Parámetros:
[in] arc puntero a arco al cual se desea acceder al contador.

void reset_counter ( Node *  node  )  [inline, inherited]

Parámetros:
[in] node puntero a nodo al cual se desea acceder al contador.

void reset_node ( Node *  node  )  [inline, inherited]

Parámetros:
[in] node puntero a nodo a ser reiniciado.

Arc* search_arc ( void *  ptr  )  [inline, inherited]

La rutina recorre linealmente todos los arcos del grafo. Por cada nodo revisado, aplica el criterio de igualdad Equal()() con parámetro especial dado mediante el puntero opaco ptr.

Este es el método para buscar arcos cuando lo que contenga el arco no pueda discernirse según el sistema de tipos. Por ejemplo, para buscar algo específico guardado en el cookie.

Parámetros:
[in] ptr puntero opaco a la información usada como criterio de búsqueda.
Nota:
En caso de que se encuentre un arco que cumpla el criterio de igualdad, se retorna el primero encontrado. Si existen arcos con información duplicada, entonces este método no es adecuado.
Devuelve:
puntero al primer arco encontrado; NULL de lo contrario.

Arc* search_arc ( const Arc_Type &  arc_info  )  [inherited]

La rutina recorre linealmente todos los arcos del grafo. Por cada arco revisado, aplica el operador == de la clase Arc_Info entre lo que está contenido en el arco y el valor del parámetro arc_info.

Nota:
En caso de que se encuentre un arco que cumpla el criterio de igualdad, se retorna el primero encontrado. Si existen arcos con información duplicada, entonces este método no es adecuado.
Parámetros:
[in] arc_info el valor de tipo Arc_Info con el cual se desea comparar.
Devuelve:
puntero al primer arco encontrado; NULL de lo contrario.

Arc* search_arc ( const Arc_Type &  arc_info  )  [inline, inherited]

La rutina recorre linealmente todos los arcos del grafo. Por cada arco revisado, se aplica el criterio de igualdad Equal()() para verificar si hay una correspondencia con el valor del parámetro arc_info.

Este es el método para buscar arcos cuando se el tipo Arc_Info sea estructurado y se desee discernir según algún campo especial, o cuando se desee buscar bajo otro criterio; una clase derivada cuya información no esté dentro de la clase base bajo el atributo get_info(), por ejemplo.

Parámetros:
[in] arc_info el valor de tipo Arc_Info con el cual se desea comparar.
Nota:
En caso de que se encuentre un nodo que cumpla el criterio de igualdad, se retorna el primero encontrado. Si existen nodos con información duplicada, entonces este método no es el adecuado.
Devuelve:
puntero al primer arco encontrado; NULL de lo contrario.

Node* search_node ( void *  ptr  )  [inline, inherited]

La rutina recorre linealmente todos los nodos del grafo. Por cada nodo revisado, la rutina aplica el criterio de igualdad Equal()() para verificar si hay una correspondencia con el valor del parámetro apuntado por ptr.

Este es el método para buscar nodos cuando lo que contenga el nodo no pueda discernirse según el sistema de tipos. Por ejemplo, para buscar algo específico guardado en el cookie.

Parámetros:
[in] ptr puntero opaco a la información usada como criterio. de búsqueda.
Nota:
En caso de que se encuentre un nodo que cumpla el criterio de igualdad, se retorna el primero encontrado. Si existen nodos con información duplicada, entonces este método no es el adecuado.
Devuelve:
puntero al primer nodo encontrado; NULL de lo contrario.

Node* search_node ( const Node_Type &  node_info  )  [inherited]

La rutina recorre linealmente todos los nodos del grafo. Por cada nodo revisado, la rutina aplica el operador == de la clase Node_Info entre lo que está contenido en el nodo y el valor del parámetro node_info.

Nota:
En caso de que se encuentre un nodo que cumpla el criterio de igualdad, se retorna el primero encontrado. Si existen nodos con información duplicada, entonces este método no es el adecuado.
Parámetros:
[in] node_info el valor de tipo Node_Info con el cual se desea comparar.
Devuelve:
puntero al primer nodo encontrado; NULL de lo contrario.

Node* search_node ( const Node_Type &  node_info  )  [inline, inherited]

La rutina recorre linealmente todos los nodos del grafo. Por cada nodo revisado, la rutina aplica el criterio de igualdad Equal()() para verificar si hay una correspondencia con el valor del parámetro node_info.

Este es el método para buscar nodos cuando se el tipo Node_Info sea estructurado y se desee discernir según algún campo especial, o cuando se desee buscar bajo otro criterio; una clase derivada cuya información no esté dentro de la clase base bajo el atributo get_info(), por ejemplo.

Parámetros:
[in] node_info el valor de tipo Node_Info con el cual se desea comparar.
Nota:
En caso de que se encuentre un nodo que cumpla el criterio de igualdad, se retorna el primero encontrado. Si existen nodos con información duplicada, entonces este método no es el adecuado.
Devuelve:
puntero al primer nodo encontrado; NULL de lo contrario.

void set_bit ( Arc *  arc,
const int &  bit,
const int &  value 
) [inline, inherited]

Parámetros:
[in] arc puntero del arco cuyo bit se desea escribir.
[in] bit valor del bit a escribir.
[in] value valor a escribir.

void set_bit ( Node *  node,
const int &  bit,
const int &  value 
) [inline, inherited]

Parámetros:
[in] node puntero del nodo cuyo bit se desea escribir.
[in] bit valor del bit a escribir.
[in] value valor a escribir.

void sort_arcs (  )  [inline, inherited]

Ordena los arcos de un grafo según el criterio de comparación Compare.


La documentación para esta clase fue generada a partir del siguiente fichero:

Leandro R. León