- if (xbt_dynar_is_empty(route_list_d))
- route_list_d = xbt_dynar_new(sizeof(p_route_attr), &xbt_free_ref);
- 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);
+ if (xbt_dynar_is_empty(route_list_d))
+ route_list_d = xbt_dynar_new(sizeof(p_route_attr), &xbt_free_ref);
+
+ const char *links;
+ const char* link_id;
+ p_route_attr route = malloc(sizeof(route_attr));
+
+
+ if (!lua_istable(L, 3)) { // if Route.new is declared as an indexed table (FIXME : we check the third arg if it's not a table)
+ // get Source Value
+ lua_pushstring(L, "src");
+ lua_gettable(L, -2);
+ route->src_id = lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ // get Destination Value
+ lua_pushstring(L, "dest");
+ lua_gettable(L, -2);
+ route->dest_id = lua_tostring(L, -1);
+ lua_pop(L, 1);
+
+ // get Links Table (char* to be splited later)
+ lua_pushstring(L, "links");
+ lua_gettable(L, -2);
+ links = lua_tostring(L, -1);
+ lua_pop(L,1);
+
+ route->links_id = xbt_dynar_new(sizeof(char *), &xbt_free_ref);
+
+ char *tmp_links = malloc(sizeof(char)*strlen(links)+1);//use xbt
+ strcpy(tmp_links,links);
+ link_id = strtok(tmp_links,","); //tmp_link = strtok((char*)links,",");
+ while(link_id != NULL)
+ {
+ xbt_dynar_push(route->links_id, &link_id);
+ link_id = strtok(NULL,","); //Alternativelly, a null pointer may be specified, in which case the function continues scanning where a previous successful call to the function ended.
+ }
+ xbt_dynar_push(route_list_d, &route);
+ return 0;