#include <tpl_agent_graph.H>
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 |
Agente de un grafo.
Esta clase modeliza un agente que recorre un grafo.
Hay cuatro atributos que maneja un agente:
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:
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:
[in] | agent | puntero al agente. |
[in] | graph | puntero 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. |
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.
[in] | agent | puntero al agente. |
[in] | graph | pountero al grafo. |
[in] | src | puntero a nodo donde se encuentra el agente. |
[out] | arc | eventualmente puntero hacia el arco hacia el cual se dirigirá el agente. |
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:
[in] | agent | puntero al agente. |
[in] | graph | puntero al grafo. |
[out] | node | puntero al nodo donde entraría el agente en caso de que se retorne el valor Enter_In_Node. |
[out] | arc | puntero donde entraría el agente en caso de que se retorne el valor Enter_In_Arc. |
|
inline |
Instancia un agente con información agent_info y función de transito transit.
|
inline |
En caso de que el agente se encuentre sobre un arco retorna el nodo origen del arco. De lo contrario retorna NULL.
|
inline |
Coloca la función de transición cuando el agente se encuentre dentro de un arco
|
inline |
Coloca la función de transición cuando el agente se encuentre dentro de un nodo