Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
Make smx_file_t, surf_file_t and msg_file_t
[simgrid.git] / src / surf / surf_action.c
index 3b2b0fa..0622378 100644 (file)
@@ -27,7 +27,7 @@ const char *surf_action_state_names[6] = {
 static xbt_mallocator_t action_mallocator = NULL;
 static int action_mallocator_allocated_size = 0;
 static void* surf_action_mallocator_new_f(void);
-static void surf_action_mallocator_free_f(void* action);
+#define surf_action_mallocator_free_f xbt_free_f
 static void surf_action_mallocator_reset_f(void* action);
 
 /**
@@ -55,10 +55,6 @@ static void* surf_action_mallocator_new_f(void) {
   return xbt_malloc(action_mallocator_allocated_size);
 }
 
-static void surf_action_mallocator_free_f(void* action) {
-  xbt_free(action);
-}
-
 static void surf_action_mallocator_reset_f(void* action) {
   memset(action, 0, action_mallocator_allocated_size);
 }
@@ -66,7 +62,7 @@ static void surf_action_mallocator_reset_f(void* action) {
 void *surf_action_new(size_t size, double cost, surf_model_t model,
                       int failed)
 {
-  xbt_assert2(size <= action_mallocator_allocated_size,
+  xbt_assert(size <= action_mallocator_allocated_size,
       "Cannot create a surf action of size %zu: the mallocator only provides actions of size %d",
       size, action_mallocator_allocated_size);
 
@@ -158,12 +154,33 @@ XBT_INLINE void surf_action_ref(surf_action_t action)
   action->refcount++;
 }
 
-/*
-void surf_action_suspend(surf_action_t action)
-{
-  action->suspended = 1;
-}*/
-
 /*
  * Maxmin action
  */
+
+/* added to manage the communication action's heap */
+void surf_action_lmm_update_index_heap(void *action, int i) {
+  surf_action_lmm_t a = action;
+  a->index_heap = i;
+}
+/* insert action on heap using a given key and a hat (heap_action_type)
+ * a hat can be of three types for communications:
+ *
+ * NORMAL = this is a normal heap entry stating the date to finish transmitting
+ * LATENCY = this is a heap entry to warn us when the latency is payed
+ * MAX_DURATION =this is a heap entry to warn us when the max_duration limit is reached
+ */
+void surf_action_lmm_heap_insert(xbt_heap_t heap, surf_action_lmm_t action, double key,
+    enum heap_action_type hat)
+{
+  action->hat = hat;
+  xbt_heap_push(heap, action, key);
+}
+
+void surf_action_lmm_heap_remove(xbt_heap_t heap, surf_action_lmm_t action)
+{
+  action->hat = NOTSET;
+  if (action->index_heap >= 0) {
+    xbt_heap_remove(heap, action->index_heap);
+  }
+}