void update_rwalk_nodes (double cur_time) { int done = 0; job_list *tmp = job_vector[RWALK]; node_struct *my_node; while (tmp != NULL && done == 0) { //case1:time to next event equals to current time if (tmp->pair != NULL && ((double) tmp->pair->next_event_t >= cur_time - omg_eps) && ((double) tmp->pair->next_event_t <= cur_time + omg_eps)) { my_node = tmp->pair->b; if (my_node->mobile == 1) sleep_rwalk_node (tmp->pair, cur_time); else move_rwalk_node (tmp->pair, cur_time); } //case2: current time is greater than the time to next event else if (tmp->pair != NULL && (cur_time - omg_eps) > tmp->pair->next_event_t) { my_node = tmp->pair->b; while (cur_time >= tmp->pair->next_event_t) { if (my_node->mobile == 1) sleep_rwalk_node (tmp->pair, cur_time); else move_rwalk_node (tmp->pair, cur_time); } } //case3: current time less than the time to next event else { done = 1; //quit the loop } tmp = tmp->next; } //sorting the new entries // LOG_D (OMG, "--------DISPLAY JOB LIST--------\n"); //LOG_T //display_job_list (Job_Vector); job_vector[RWALK] = quick_sort (job_vector[RWALK]); /////////// // LOG_D (OMG, "--------DISPLAY JOB LIST AFTER SORTING--------\n"); //display_job_list (job_vector[RWALK]); }
void update_rwalk_nodes(double cur_time) {// need to implement an out-of-area check as well as a rebound function to stay in the area LOG_D(OMG, "--------UPDATE--------\n"); Job_list tmp = Job_Vector; int done = 0; // while ((tmp != NULL) && (done == 0)){ //if (tmp->pair == NULL){LOG_E(OMG, "UPDATE RWALK : tmp->pair ==NULL\n" );} //if (tmp->pair != NULL){LOG_E(OMG, "UPDATE RWALK : tmp->pair !=NULL\n" );} LOG_D(OMG, "cur_time %f\n", cur_time ); LOG_D(OMG, "tmp->pair->a %f\n", tmp->pair->a ); if((tmp->pair !=NULL) && ( (double)tmp->pair->a >= cur_time - eps) && ( (double)tmp->pair->a <= cur_time + eps) ) { if (tmp->pair->b->generator == RWALK){ LOG_D(OMG, " (first_job_time) %.2f == %.2f (cur_time) \n ",tmp->pair->a, cur_time ); LOG_D(OMG, " UPDATE RWALK \n "); NodePtr my_node = (NodePtr)tmp->pair->b; /*if(my_node->mobile == 1) { LOG_D(OMG, " stop node and let it sleep \n" ); my_node->mobile = 0; Pair pair = malloc(sizeof(Pair)); pair = sleep_rwalk_node(my_node, cur_time); tmp->pair = pair; tmp = tmp->next; }*/ if ((my_node->mobile ==0) || (my_node->mobile == 1)) { LOG_D(OMG, " node %d...let's move again \n", my_node->ID); my_node->mobile = 1; Pair pair = malloc(sizeof(Pair)); pair = move_rwalk_node(my_node, cur_time); tmp->pair = pair; tmp = tmp->next; } else{ LOG_E(OMG, "update_generator: unsupported node state - mobile : %d \n", my_node->mobile); //exit(-1); } } else { LOG_D(OMG, " (first_job_time) %.2f == %.2f(cur_time) but (generator=%d) != (RWALK=%d)\n ",tmp->pair->a, cur_time, tmp->pair->b->generator, RWALK ); tmp = tmp->next; } } else if ( (tmp->pair != NULL) && (cur_time < tmp->pair->a ) ){ //&& (tmp->pair->b->generator == RWALK) LOG_D(OMG, " %.2f < %.2f \n",cur_time, tmp->pair->a); LOG_D(OMG, "Nothing to do\n"); done = 1; //quit the loop } else { LOG_E(OMG, "\n %.2f > %.2f", cur_time,tmp->pair->a ); //LOG_D(OMG, " (generator=%d) != (RWALK=%d) \n", tmp->pair->b->generator, RWALK ); done = 1; //quit the loop exit(-1); } } //sorting the new entries LOG_D(OMG, "--------DISPLAY JOB LIST--------\n"); //LOG_T display_job_list(Job_Vector); Job_Vector = quick_sort (Job_Vector);/////////// LOG_D(OMG, "--------DISPLAY JOB LIST AFTER SORTING--------\n"); display_job_list(Job_Vector); }