+void surf_finalize(void)
+{
+ int i;
+ surf_resource_t resource = NULL;
+
+ xbt_dynar_foreach (resource_list,i,resource) {
+ resource->common_private->finalize();
+ }
+
+ if(maxmin_system) {
+ lmm_system_free(maxmin_system);
+ maxmin_system = NULL;
+ }
+ if(history) {
+ tmgr_history_free(history);
+ history = NULL;
+ }
+ if(resource_list) xbt_dynar_free(&resource_list);
+
+ tmgr_finalize();
+}
+
+xbt_heap_float_t surf_solve(void)
+{
+ static int first_run = 1;
+
+ xbt_heap_float_t min = -1.0;
+ xbt_heap_float_t next_event_date = -1.0;
+ xbt_heap_float_t resource_next_action_end = -1.0;
+ xbt_maxmin_float_t value = -1.0;
+ surf_resource_object_t resource_obj = NULL;
+ surf_resource_t resource = NULL;
+ tmgr_trace_event_t event = NULL;
+ int i;
+
+ 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;
+ }