+ if(first_run) {
+ while ((next_event_date = tmgr_history_next_date(history)) != -1.0) {
+ if(next_event_date > NOW) break;
+ while ((event = tmgr_history_get_next_event_leq(history, next_event_date,
+ &value, (void **) &resource_obj))) {
+ resource_obj->resource->common_private->update_resource_state(resource_obj,
+ event, value);
+ }
+ }
+ xbt_dynar_foreach (resource_list,i,resource) {
+ resource->common_private->update_actions_state(NOW, 0.0);
+ }
+ first_run = 0;
+ return 0.0;
+ }
+
+ min = -1.0;
+
+ xbt_dynar_foreach (resource_list,i,resource) {
+ resource_next_action_end = resource->common_private->share_resources(NOW);
+ if((min<0) || (resource_next_action_end<min))
+ min = resource_next_action_end;
+ }
+
+ while ((next_event_date = tmgr_history_next_date(history)) != -1.0) {
+ if(next_event_date > NOW+min) break;
+ while ((event=tmgr_history_get_next_event_leq(history, next_event_date,
+ &value, (void **) &resource_obj))) {
+ if(resource_obj->resource->common_public->resource_used(resource_obj)) {
+ min = next_event_date-NOW;
+ }
+ /* update state of resource_obj according to new value. Does not touch lmm.
+ It will be modified if needed when updating actions */
+ resource_obj->resource->common_private->update_resource_state(resource_obj,
+ event, value);
+ }
+ }
+
+ xbt_dynar_foreach (resource_list,i,resource) {
+ resource->common_private->update_actions_state(NOW, min);
+ }
+
+ NOW=NOW+min;
+
+ return min;
+}
+
+xbt_heap_float_t surf_get_clock(void)
+{
+ return NOW;
+}