X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/28b7f1f95510fe2efa30fc2fb4b4d27826da931e..0cb19863e8b0e5db48e444a50c1227a8ea82dbcf:/src/include/surf/surf.h diff --git a/src/include/surf/surf.h b/src/include/surf/surf.h index 536a63e86a..8f192f0304 100644 --- a/src/include/surf/surf.h +++ b/src/include/surf/surf.h @@ -8,8 +8,8 @@ #define _SURF_SURF_H #include "xbt/swag.h" -#include "xbt/heap.h" /* for xbt_heap_float_t only */ -#include "surf/maxmin.h" /* for xbt_maxmin_float_t only */ +#include "xbt/heap.h" /* for xbt_heap_float_t only */ +#include "surf/maxmin.h" /* for xbt_maxmin_float_t only */ /* Actions and resources are higly connected structures... */ typedef struct surf_action *surf_action_t; @@ -19,13 +19,20 @@ typedef struct surf_resource *surf_resource_t; /* Action object */ /*****************/ typedef enum { - SURF_ACTION_READY = 0, /* Ready */ - SURF_ACTION_RUNNING, /* Running */ - SURF_ACTION_FAILED, /* Task Failure */ - SURF_ACTION_DONE, /* Completed */ - SURF_ACTION_NOT_IN_THE_SYSTEM /* Not in the system anymore. Why did you ask ? */ + SURF_ACTION_READY = 0, /* Ready */ + SURF_ACTION_RUNNING, /* Running */ + SURF_ACTION_FAILED, /* Task Failure */ + SURF_ACTION_DONE, /* Completed */ + SURF_ACTION_NOT_IN_THE_SYSTEM /* Not in the system anymore. Why did you ask ? */ } e_surf_action_state_t; +typedef struct surf_action_state { + xbt_swag_t ready_action_set; + xbt_swag_t running_action_set; + xbt_swag_t failed_action_set; + xbt_swag_t done_action_set; +} s_surf_action_state_t, *surf_action_state_t; + /* Never create s_surf_action_t by yourself !!!! */ /* Use action_new from the corresponding resource */ typedef struct surf_action { @@ -44,72 +51,82 @@ typedef struct surf_action { /***************************/ /* Generic resource object */ /***************************/ -typedef struct surf_resource { - void (*parse_file)(const char *file); + +typedef struct surf_resource_private *surf_resource_private_t; +typedef struct surf_resource_public { + s_surf_action_state_t states; /* Any living action on this resource */ void *(*name_service)(const char *name); const char *(*get_resource_name)(void *resource_id); - - /* surf_action_t (*action_new)(void *callback); */ - /* Not defined here. Actions have to be created by actually - performing it and prototype may therefore vary with the resource - implementation */ + int (*resource_used)(void *resource_id); e_surf_action_state_t (*action_get_state)(surf_action_t action); - void (*action_free)(surf_action_t * action); /* Call it when you're done with this action */ - void (*action_cancel)(surf_action_t action); /* remove the variables from the linear system if needed */ - void (*action_recycle)(surf_action_t action); /* More efficient than free/new */ - void (*action_change_state)(surf_action_t action, e_surf_action_state_t state); - - xbt_heap_float_t (*share_resources)(void); /* Share the resources to the - actions and return the potential - next action termination */ - void (*solve)(xbt_heap_float_t date); /* Advance time to "date" and update - the actions' state*/ + void (*action_free)(surf_action_t action); + void (*action_cancel)(surf_action_t action); + void (*action_recycle)(surf_action_t action); + void (*action_change_state)(surf_action_t action, + e_surf_action_state_t state); +} s_surf_resource_public_t, *surf_resource_public_t; + +typedef struct surf_resource { + surf_resource_private_t common_private; + surf_resource_public_t common_public; } s_surf_resource_t; +typedef struct surf_resource_object { + surf_resource_t resource; +} s_surf_resource_object_t, *surf_resource_object_t; + /**************************************/ /* Implementations of resource object */ /**************************************/ /* Cpu resource */ typedef enum { SURF_CPU_ON = 1, /* Ready */ - SURF_CPU_OFF = 0, /* Running */ + SURF_CPU_OFF = 0 /* Running */ } e_surf_cpu_state_t; +typedef struct surf_cpu_resource_extension_private *surf_cpu_resource_extension_private_t; +typedef struct surf_cpu_resource_extension_public { + surf_action_t(*execute) (void *cpu, xbt_maxmin_float_t size); + surf_action_t(*wait) (void *cpu, xbt_maxmin_float_t size); + e_surf_cpu_state_t(*get_state) (void *cpu); +} s_surf_cpu_resource_extension_public_t, *surf_cpu_resource_extension_public_t; + typedef struct surf_cpu_resource { - s_surf_resource_t resource; - surf_action_t (*execute)(void *cpu, xbt_maxmin_float_t size); - e_surf_cpu_state_t (*get_state)(void *cpu); + surf_resource_private_t common_private; + surf_resource_public_t common_public; +/* surf_cpu_resource_extension_private_t extension_private; */ + surf_cpu_resource_extension_public_t extension_public; } s_surf_cpu_resource_t, *surf_cpu_resource_t; extern surf_cpu_resource_t surf_cpu_resource; +void surf_cpu_resource_init(const char *filename); /* Network resource */ +typedef struct surf_network_resource_extension_private *surf_network_resource_extension_private_t; +typedef struct surf_network_resource_extension_public { + surf_action_t(*communicate) (void *src, void *dst, + xbt_maxmin_float_t size); +} s_surf_network_resource_extension_public_t, *surf_network_resource_extension_public_t; + typedef struct surf_network_resource { - s_surf_resource_t resource; - surf_action_t (*communicate)(void *src, void *dst, xbt_maxmin_float_t size); -} s_surf_network_resource_t, surf_network_resource_t; -extern surf_network_resource_t surf_network_resource; + surf_resource_private_t common_private; + surf_resource_public_t common_public; +/* surf_network_resource_extension_private_t extension_private; */ + surf_network_resource_extension_public_t extension_public; +} s_surf_network_resource_t, *surf_network_resource_t; -/* Timer resource */ -typedef struct surf_timer_resource { - s_surf_resource_t resource; - surf_action_t (*wait)(void *cpu, void *dst, xbt_maxmin_float_t size); -} s_surf_timer_resource_t, surf_timer_resource_t; -extern surf_timer_resource_t surf_timer_resource; +extern surf_network_resource_t surf_network_resource; +void surf_network_resource_init(const char *filename); /*******************************************/ /*** SURF Globals **************************/ /*******************************************/ -typedef struct surf_global { - xbt_swag_t ready_action_set; - xbt_swag_t running_action_set; - xbt_swag_t failed_action_set; - xbt_swag_t done_action_set; -} s_surf_global_t; -/* The main function */ -extern s_surf_global_t surf_global; -void surf_init(void); /* initialize all resource objects */ -xbt_heap_float_t surf_solve(void); /* returns the next date */ +void surf_init(void); /* initialize common structures */ +xbt_heap_float_t surf_solve(void); /* update all states and returns + the time elapsed since last + event */ +xbt_heap_float_t surf_get_clock(void); +void surf_finalize(void); /* clean everything */ #endif /* _SURF_SURF_H */