Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
getting rid of dynar in instr (part 1)
authorFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 18 Aug 2016 10:55:03 +0000 (12:55 +0200)
committerFrederic Suter <frederic.suter@cc.in2p3.fr>
Thu, 18 Aug 2016 10:55:03 +0000 (12:55 +0200)
src/instr/instr_config.cpp
src/instr/instr_private.h
src/instr/instr_trace.cpp

index 72cfabd..558bb7e 100644 (file)
@@ -7,6 +7,8 @@
 #include "src/instr/instr_private.h"
 #include "simgrid/sg_config.h"
 #include "surf/surf.h"
 #include "src/instr/instr_private.h"
 #include "simgrid/sg_config.h"
 #include "surf/surf.h"
+#include <functional>
+#include <vector>
 
 XBT_LOG_NEW_CATEGORY(instr, "Logging the behavior of the tracing system (used for Visualization/Analysis of simulations)");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration");
 
 XBT_LOG_NEW_CATEGORY(instr, "Logging the behavior of the tracing system (used for Visualization/Analysis of simulations)");
 XBT_LOG_NEW_DEFAULT_SUBCATEGORY (instr_config, instr, "Configuration");
@@ -87,12 +89,11 @@ static void TRACE_getopts()
   trace_precision           = xbt_cfg_get_int(OPT_TRACING_PRECISION);
 }
 
   trace_precision           = xbt_cfg_get_int(OPT_TRACING_PRECISION);
 }
 
-static xbt_dynar_t TRACE_start_functions = nullptr;
+static std::vector<std::function<void()>> TRACE_start_functions;
+
 void TRACE_add_start_function(void (*func) ())
 {
 void TRACE_add_start_function(void (*func) ())
 {
-  if (TRACE_start_functions == nullptr)
-    TRACE_start_functions = xbt_dynar_new(sizeof(void (*)()), nullptr);
-  xbt_dynar_push(TRACE_start_functions, &func);
+  TRACE_start_functions.push_back(func);
 }
 
 int TRACE_start()
 }
 
 int TRACE_start()
@@ -107,8 +108,6 @@ int TRACE_start()
 
     XBT_DEBUG("Tracing starts");
     /* init the tracing module to generate the right output */
 
     XBT_DEBUG("Tracing starts");
     /* init the tracing module to generate the right output */
-    /* open internal buffer */
-    TRACE_init();
 
     /* open the trace file(s) */
     const char* format = xbt_cfg_get_string(OPT_TRACING_FORMAT);
 
     /* open the trace file(s) */
     const char* format = xbt_cfg_get_string(OPT_TRACING_FORMAT);
@@ -137,24 +136,17 @@ int TRACE_start()
     user_vm_variables = xbt_dict_new_homogeneous(xbt_free_f);
     user_link_variables = xbt_dict_new_homogeneous(xbt_free_f);
 
     user_vm_variables = xbt_dict_new_homogeneous(xbt_free_f);
     user_link_variables = xbt_dict_new_homogeneous(xbt_free_f);
 
-    if (TRACE_start_functions != nullptr) {
-      void (*func) ();
-      unsigned int iter;
-      xbt_dynar_foreach(TRACE_start_functions, iter, func) {
-        func();
-      }
-    }
+    for (auto func: TRACE_start_functions)
+      func();
   }
   }
-  xbt_dynar_free(&TRACE_start_functions);
+  TRACE_start_functions.clear();
   return 0;
 }
 
   return 0;
 }
 
-static xbt_dynar_t TRACE_end_functions = nullptr;
+static std::vector<std::function<void()>> TRACE_end_functions;
 void TRACE_add_end_function(void (*func) (void))
 {
 void TRACE_add_end_function(void (*func) (void))
 {
-  if (TRACE_end_functions == nullptr)
-    TRACE_end_functions = xbt_dynar_new(sizeof(void (*)(void)), nullptr);
-  xbt_dynar_push(TRACE_end_functions, &func);
+  TRACE_end_functions.push_back(func);
 }
 
 int TRACE_end()
 }
 
 int TRACE_end()
@@ -178,13 +170,9 @@ int TRACE_end()
     PJ_container_release();
     PJ_type_release();
 
     PJ_container_release();
     PJ_type_release();
 
-    if (TRACE_end_functions != nullptr) {
-      void (*func) (void);
-      unsigned int iter;
-      xbt_dynar_foreach(TRACE_end_functions, iter, func) {
-        func();
-      }
-    }
+    for (auto func: TRACE_end_functions)
+      func();
+    TRACE_start_functions.clear();
 
     xbt_dict_free(&user_link_variables);
     xbt_dict_free(&user_host_variables);
 
     xbt_dict_free(&user_link_variables);
     xbt_dict_free(&user_host_variables);
@@ -202,15 +190,12 @@ int TRACE_end()
     }else{
       xbt_die("Unknown trace format :%s ", format);
     }
     }else{
       xbt_die("Unknown trace format :%s ", format);
     }
-    /* close internal buffer */
-    TRACE_finalize();
+
     /* de-activate trace */
     trace_active = 0;
     XBT_DEBUG("Tracing is off");
     XBT_DEBUG("Tracing system is shutdown");
   }
     /* de-activate trace */
     trace_active = 0;
     XBT_DEBUG("Tracing is off");
     XBT_DEBUG("Tracing system is shutdown");
   }
-  xbt_dynar_free(&TRACE_start_functions); /* useful when exiting early */
-  xbt_dynar_free(&TRACE_end_functions);
   return retval;
 }
 
   return retval;
 }
 
index 2a9e63e..de371d1 100644 (file)
@@ -240,8 +240,6 @@ extern XBT_PRIVATE double TRACE_last_timestamp_to_dump;
 XBT_PRIVATE void TRACE_header(int basic, int size);
 
 /* from paje.c */
 XBT_PRIVATE void TRACE_header(int basic, int size);
 
 /* from paje.c */
-XBT_PRIVATE void TRACE_init();
-XBT_PRIVATE void TRACE_finalize();
 XBT_PRIVATE void TRACE_paje_init();
 XBT_PRIVATE void TRACE_paje_start();
 XBT_PRIVATE void TRACE_paje_end();
 XBT_PRIVATE void TRACE_paje_init();
 XBT_PRIVATE void TRACE_paje_start();
 XBT_PRIVATE void TRACE_paje_end();
index 8f6e251..6caad2a 100644 (file)
@@ -26,7 +26,7 @@ s_instr_trace_writer_t active_writer = {
     print_NULL, print_NULL
 };
 
     print_NULL, print_NULL
 };
 
-xbt_dynar_t buffer = nullptr;
+std::vector<paje_event_t> buffer;
 
 void dump_comment (const char *comment)
 {
 
 void dump_comment (const char *comment)
 {
@@ -56,16 +56,6 @@ void dump_comment_file (const char *filename)
   fclose(file);
 }
 
   fclose(file);
 }
 
-void TRACE_init()
-{
-  buffer = xbt_dynar_new(sizeof(paje_event_t), nullptr);
-}
-
-void TRACE_finalize()
-{
-  xbt_dynar_free(&buffer);
-}
-
 double TRACE_last_timestamp_to_dump = 0;
 //dumps the trace file until the timestamp TRACE_last_timestamp_to_dump
 void TRACE_paje_dump_buffer (int force)
 double TRACE_last_timestamp_to_dump = 0;
 //dumps the trace file until the timestamp TRACE_last_timestamp_to_dump
 void TRACE_paje_dump_buffer (int force)
@@ -73,26 +63,22 @@ void TRACE_paje_dump_buffer (int force)
   if (!TRACE_is_enabled()) return;
   XBT_DEBUG("%s: dump until %f. starts", __FUNCTION__, TRACE_last_timestamp_to_dump);
   if (force){
   if (!TRACE_is_enabled()) return;
   XBT_DEBUG("%s: dump until %f. starts", __FUNCTION__, TRACE_last_timestamp_to_dump);
   if (force){
-    paje_event_t event;
-    unsigned int i;
-    xbt_dynar_foreach(buffer, i, event){
+    for (auto event :buffer){
       event->print (event);
       event->free (event);
     }
       event->print (event);
       event->free (event);
     }
-    xbt_dynar_free (&buffer);
-    buffer = xbt_dynar_new (sizeof(paje_event_t), nullptr);
+    buffer.clear();
   }else{
   }else{
-    paje_event_t event;
-    unsigned int cursor;
-    xbt_dynar_foreach(buffer, cursor, event) {
+    std::vector<paje_event_t>::iterator i = buffer.begin();
+    for (auto event :buffer){
       double head_timestamp = event->timestamp;
       double head_timestamp = event->timestamp;
-      if (head_timestamp > TRACE_last_timestamp_to_dump){
+      if (head_timestamp > TRACE_last_timestamp_to_dump)
         break;
         break;
-      }
       event->print (event);
       event->free (event);
       event->print (event);
       event->free (event);
+      ++i;
     }
     }
-    xbt_dynar_remove_n_at(buffer, cursor, 0);
+    buffer.erase(buffer.begin(), i);
   }
   XBT_DEBUG("%s: ends", __FUNCTION__);
 }
   }
   XBT_DEBUG("%s: ends", __FUNCTION__);
 }
@@ -107,19 +93,19 @@ static void insert_into_buffer (paje_event_t tbi)
   }
 
   XBT_DEBUG("%s: insert event_type=%d, timestamp=%f, buffersize=%lu)",
   }
 
   XBT_DEBUG("%s: insert event_type=%d, timestamp=%f, buffersize=%lu)",
-      __FUNCTION__, (int)tbi->event_type, tbi->timestamp, xbt_dynar_length(buffer));
-
-  unsigned int i;
-  for (i = xbt_dynar_length(buffer); i > 0; i--) {
-    paje_event_t e1 = *(paje_event_t*)xbt_dynar_get_ptr(buffer, i - 1);
+      __FUNCTION__, (int)tbi->event_type, tbi->timestamp, buffer.size());
+  std::vector<paje_event_t>::reverse_iterator i;
+  for (i = buffer.rbegin(); i != buffer.rend(); ++i) {
+    paje_event_t e1 = *i;
     if (e1->timestamp <= tbi->timestamp)
       break;
   }
     if (e1->timestamp <= tbi->timestamp)
       break;
   }
-  xbt_dynar_insert_at(buffer, i, &tbi);
-  if (i == 0)
+  buffer.insert(i.base(), tbi);
+  if (i == buffer.rend())
     XBT_DEBUG("%s: inserted at beginning", __FUNCTION__);
   else
     XBT_DEBUG("%s: inserted at beginning", __FUNCTION__);
   else
-    XBT_DEBUG("%s: inserted at%s %u", __FUNCTION__, (i == xbt_dynar_length(buffer) - 1 ? " end, pos =" : ""), i);
+    XBT_DEBUG("%s: inserted at%s %ld", __FUNCTION__, (i == buffer.rbegin()) ? " end" :"pos =",
+        std::distance(buffer.rend(),i));
 }
 
 static void free_paje_event (paje_event_t event)
 }
 
 static void free_paje_event (paje_event_t event)