Exemplo n.º 1
0
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]);
}
Exemplo n.º 2
0
Arquivo: rwalk.c Projeto: a4a881d4/oai
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);
}