-
-/*****************************************************************************************
- * BYPASS XML SURF Methods *
- ***************************
- ***************************
-******************************************************************************************/
-#include "surf/surfxml_parse.h" /* to override surf_parse and bypass the parser */
-#include "surf/surf_private.h"
-typedef struct t_host_attr
-{
- //platform attribute
- const char* id;
- double power;
- //deployment attribute
- const char* function;
- xbt_dynar_t args_list;
-}host_attr,*p_host_attr;
-
-typedef struct t_link_attr
-{
- const char* id;
- double bandwidth;
- double latency;
-}link_attr,*p_link_attr;
-
-typedef struct t_route_attr
-{
- const char *src_id;
- const char *dest_id;
- xbt_dynar_t links_id;
-
-}route_attr,*p_route_attr;
-
-//using xbt_dynar_t :
-static xbt_dynar_t host_list_d ;
-static xbt_dynar_t link_list_d ;
-static xbt_dynar_t route_list_d ;
-
-static int Host_new(lua_State *L) //(id,power)
-{
- // if it's the first time ,instanciate the dynar
- if(xbt_dynar_is_empty(host_list_d))
- host_list_d = xbt_dynar_new(sizeof(p_host_attr), &xbt_free_ref);
-
- p_host_attr host = malloc(sizeof(host_attr));
- host->id = luaL_checkstring(L,1);
- host->power = luaL_checknumber(L,2);
- host->function = NULL;
- xbt_dynar_push(host_list_d, &host);
- return 0;
-}
-
-static int Link_new(lua_State *L) // (id,bandwidth,latency)
-{
- if(xbt_dynar_is_empty(link_list_d))
- link_list_d = xbt_dynar_new(sizeof(p_link_attr), &xbt_free_ref);
-
- p_link_attr link = malloc(sizeof(link_attr));
- link->id = luaL_checkstring(L,1);
- link->bandwidth = luaL_checknumber(L,2);
- link->latency = luaL_checknumber(L,3);
- xbt_dynar_push(link_list_d,&link);
- return 0;
-}
-
-static int Route_new(lua_State *L) // (src_id,dest_id,links_number,link_table)
-{
- if(xbt_dynar_is_empty(route_list_d))
- route_list_d = xbt_dynar_new(sizeof(p_route_attr), &xbt_free_ref);
- int i;
- const char * link_id;
- p_route_attr route = malloc(sizeof(route_attr));
- route->src_id = luaL_checkstring(L,1);
- route->dest_id = luaL_checkstring(L,2);
- route->links_id = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
- lua_pushnil(L);
- while (lua_next(L,3) != 0) {
- link_id = lua_tostring(L, -1);
- xbt_dynar_push(route->links_id, &link_id);
- DEBUG2("index = %f , Link_id = %s \n",lua_tonumber(L, -2),lua_tostring(L, -1));
- lua_pop(L, 1);
- }
- lua_pop(L, 1);
-
- //add route to platform's route list
- xbt_dynar_push(route_list_d,&route);
- return 0;
-}
-
-static int Host_set_function(lua_State *L) //(host,function,nb_args,list_args)
-{
- // look for the index of host in host_list
- const char *host_id = luaL_checkstring(L,1);
- const char* argument;
- unsigned int i;
- p_host_attr p_host;
-
- xbt_dynar_foreach(host_list_d,i,p_host)
- {
- if(p_host->id == host_id)
- {
- p_host->function = luaL_checkstring(L,2);
- p_host->args_list = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
- // fill the args list
- lua_pushnil(L);
- int j = 0;
- while (lua_next(L,3) != 0) {
- argument = lua_tostring(L, -1);
- xbt_dynar_push(p_host->args_list, &argument);
- DEBUG2("index = %f , Arg_id = %s \n",lua_tonumber(L, -2),lua_tostring(L, -1));
- j++;
- lua_pop(L, 1);
- }
- lua_pop(L, 1);
- return 0;
- }
- }
- ERROR1("Host : %s Not Fount !!",host_id);
- return 1;