Aleph-w  1.5a.2
Biblioteca general de algoritmos y estructuras de datos
 Todo Clases Archivos Funciones Variables 'typedefs' Enumeraciones Amigas Grupos Páginas
Referencia de la plantilla de la Estructura Aleph::Walking_Agent< Agent_Info >

#include <tpl_agent_graph.H>

+ Diagrama de colaboración para Aleph::Walking_Agent< Agent_Info >:

Tipos públicos

enum  Agent_State {
  Ready, Executing, Suspending, Suspended,
  Deleting_From_Ready, Deleting_From_Suspended, Without_Queue, Invalid
}
 
enum  Transition_Action {
  Remain_In_Node, Remain_In_Arc, Enter_In_Node, Enter_In_Arc,
  Out_Of_Location, Leave_Node, Leave_Arc, Suspend,
  Dead
}
 
typedef long(* Process_From_Node )(void *agent, void *graph, void *src, void *&arc)
 
typedef long(* Process_From_Arc )(void *agent, void *graph, void *arc)
 
typedef long(* Process_Out_Location )(void *agent, void *graph, void *&node, void *&arc)
 
typedef Agent_Info Agent_Type
 

Métodos públicos

void * get_src_node ()
 
void set_agent_state ()
 
void set_process_node (Process_From_Node __process_from_node)
 
void set_process_arc (Process_From_Arc __process_from_arc)
 
bool is_a_valid_agent () const
 
 Walking_Agent ()
 Instancia un agente vacío.
 
 Walking_Agent (const Agent_Info &agent_info, Process_From_Node __process_from_node=NULL, Process_From_Arc __process_from_arc=NULL, Process_Out_Location __process_out_location=NULL)
 
 Walking_Agent (Process_From_Node __process_from_node, Process_From_Arc __process_from_arc, Process_Out_Location __process_out_location)
 Instancia un agente con funciones de transito.
 
 LINKNAME_TO_TYPE (Walking_Agent, agent_link_in_graph)
 
 LINKNAME_TO_TYPE (Walking_Agent, schedule_link_in_graph)
 
 LINKNAME_TO_TYPE (Walking_Agent, location_link)
 
Agent_Info & get_info ()
 
void *& get_cookie ()
 Retorna una referencia al cookie del agente.
 
bool is_in_node () const
 Retorna true si el agente está en un nodo; false si está en un arco.
 
bool is_in_arc () const
 Retorna true si el agente está en un arco; false si está en un nodo.
 

Atributos públicos

Agent_State agent_state
 
pthread_t thread_id
 
Agent_Info info
 
Dlink agent_link_in_graph
 
Dlink schedule_link_in_graph
 
Dlink location_link
 
bool in_node
 
void * location
 
void * src
 
void * cookie
 
Process_From_Node process_from_node
 
Process_From_Arc process_from_arc
 
Process_Out_Location process_out_location
 

Descripción detallada

template<typename Agent_Info>
struct Aleph::Walking_Agent< Agent_Info >

Agente de un grafo.

Esta clase modeliza un agente que recorre un grafo.

Hay cuatro atributos que maneja un agente:

  1. Una información arbitraria expresada por el parámetro tipo Agent_Info.
  2. Un semáforo binario para proteger la información relacionada con el agente.
  3. Una función de transición que ejecuta el agente para caracterizar el comportamiento dentro del grafo. Tradicionalmente, en esta función se programa cómo el agente decide por cuál arco transitar. La función de transición debe especificarla por el usuario y es llamada por un planificador en la clase Agent_Graph.
  4. Un puntero opaco no tipeado cookie que permite extender el nodo a que guarde prácticamente cualquier clase de información.

En añadidura, diversos tipos de agentes pueden modelizarse mediante derivación de esta clase. De este modo se pueden especializar clases de agente y manejarse mediante la misma interfaz con la clase base.

Un agente tiene los siguientes estados de ejecución:

  • Ready: el agente está en la cola del planificador listo para ser ejecutado.
  • Executing: la función de transición del agente está ejecutándose.
  • Suspended: el agente está suspendido; esto implica que no está en la cola del planificador.
  • Suspending: se emitió una orden de suspensión del agente pero éste estaba en ejecución.
  • Deleting_From_Ready: se emitió una orden de eliminar el agente del grafo mientras éste estaba en estado de ejecución.
  • Deleting_From_Suspended: se emitió una orden de eliminar el agente del grafo mientras éste está suspendiéndose y su ejecución aún no está culminada.
Nota
Walking_Agent es struct por simplicidad de programación en la clase Agent_Graph. Ninguno de sus miembros debe ser directamente accedido, sino mediante la clase Agent_Graph. Los únicos métodos asequibles de Agent_Graph sonj los constructores, que puede pueden ser necesarios para programar agentes derivados y el método get_info()

Documentación de los 'Typedef' miembros de la clase

template<typename Agent_Info>
typedef long(* Aleph::Walking_Agent< Agent_Info >::Process_From_Arc)(void *agent, void *graph, void *arc)

Tipo de función a invocar cuando el agente se encuentre en un arco.

Una función de Process_From_Arc se invoca cuando un agente que será ejecutado se encuentra dentro de un arco del grafo. Los parámetros de la función son los siguientes:

Parámetros
[in]agentpuntero al agente.
[in]graphpuntero al grafo.
int]arc puntero al arco sobre el cual se encuentra el agente. El nodo origen del arco es asequible desde el agente a través del método get_src_node(). Con este nodo, el grafo y el arco arc es posible obtener el nodo destino mediante el método get_connected_node() del grafo.
Devuelve
un long entre los siguientes valores:
  • Remain_In_Arc: el agente se queda en el arco.
  • Enter_In_Node; el agente se mueve hacia el nodo destino del arco.
  • Leave_Arc: el agente deja el arco sin definir su destino.
  • Suspend: el agente será suspendido hasta que una llamada resume_agent() sea ejecutada.
  • Dead: el agente es eliminado del grafo. . Los valores de retorno restantes Remain_In_Node, Enter_In_Arc, Out_Of_Location y Leave_Node causarán una excepción.
template<typename Agent_Info>
typedef long(* Aleph::Walking_Agent< Agent_Info >::Process_From_Node)(void *agent, void *graph, void *src, void *&arc)

Tipo de función a invocar cuando el agente se encuentre en un nodo.

Process_From_Node es un tipo que representa la función que el planificador de agentes llamará cuando el agente se encuentre en un nodo.

Parámetros
[in]agentpuntero al agente.
[in]graphpountero al grafo.
[in]srcpuntero a nodo donde se encuentra el agente.
[out]arceventualmente puntero hacia el arco hacia el cual se dirigirá el agente.
Devuelve
un valor entre Enter_In_arc, Remain_In_Node, Leave_Node, Suspend o Dead.Cualquier otro valor causará una excepción. La semántica de los valores de retorno es la siguiente:
  • Enter_In_Arc: en este caso el agente sale del nodo y entra a un arco. El parámetro arc debe contener la dirección del arco seleccionado para que el agente entre. Este arco debe ser conexo según el nodo origen src.
  • Remain_In_Node: en este caso el agente se queda en el nodo src.
  • Leave_Node: el agente deja el nodo y queda fuera del grafo.
  • Suspend: el agente será suspendido hasta que una llamada resume_agent() sea ejecutada.
  • Dead: el agente es eliminado del grafo.
Los valores de retorno restantes Remain_In_Arc, Enter_In_Node, Out_Of_Location y Leave_Arc causarán una excepción.
template<typename Agent_Info>
typedef long(* Aleph::Walking_Agent< Agent_Info >::Process_Out_Location)(void *agent, void *graph, void *&node, void *&arc)

Tipo de función a invocar cuando el agente se encuentre fuera del grafo.

Una función de tipo Process_Out_Location es invocada cuando un agente que será ejecuta no se encuentra dentro del grafo. Los parámetros de la función son los siguientes:

Parámetros
[in]agentpuntero al agente.
[in]graphpuntero al grafo.
[out]nodepuntero al nodo donde entraría el agente en caso de que se retorne el valor Enter_In_Node.
[out]arcpuntero donde entraría el agente en caso de que se retorne el valor Enter_In_Arc.
Devuelve
un valor entre Enter_In_Node, Enter_In_Arc, Out_Of_Location, Suspend o Dead. Cualquier otro de valor de retorno causará una excepción.

Documentación del constructor y destructor

template<typename Agent_Info>
Aleph::Walking_Agent< Agent_Info >::Walking_Agent ( const Agent_Info &  agent_info,
Process_From_Node  __process_from_node = NULL,
Process_From_Arc  __process_from_arc = NULL,
Process_Out_Location  __process_out_location = NULL 
)
inline

Instancia un agente con información agent_info y función de transito transit.

Documentación de las funciones miembro

template<typename Agent_Info>
void* Aleph::Walking_Agent< Agent_Info >::get_src_node ( )
inline

En caso de que el agente se encuentre sobre un arco retorna el nodo origen del arco. De lo contrario retorna NULL.

template<typename Agent_Info>
void Aleph::Walking_Agent< Agent_Info >::set_process_arc ( Process_From_Arc  __process_from_arc)
inline

Coloca la función de transición cuando el agente se encuentre dentro de un arco

template<typename Agent_Info>
void Aleph::Walking_Agent< Agent_Info >::set_process_node ( Process_From_Node  __process_from_node)
inline

Coloca la función de transición cuando el agente se encuentre dentro de un nodo


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

Leandro Rabindranath León