Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Remove MCer_ignore_global_variable
authorGabriel Corona <gabriel.corona@loria.fr>
Fri, 20 Nov 2015 10:50:37 +0000 (11:50 +0100)
committerGabriel Corona <gabriel.corona@loria.fr>
Mon, 23 Nov 2015 15:40:08 +0000 (16:40 +0100)
src/mc/ModelChecker.cpp
src/mc/ObjectInformation.cpp
src/mc/ObjectInformation.hpp
src/mc/Process.hpp
src/mc/mcer_ignore.cpp
src/mc/mcer_ignore.h

index 9ceba06..2a870fa 100644 (file)
@@ -152,10 +152,10 @@ void ModelChecker::setup_ignore()
   MC_ignore_local_variable("start_time", "*");
 
   /* Static variable used for tracing */
-  MCer_ignore_global_variable("counter");
+  this->process().ignore_global_variable("counter");
 
   /* SIMIX */
-  MCer_ignore_global_variable("smx_total_comms");
+  this->process().ignore_global_variable("smx_total_comms");
 }
 
 void ModelChecker::shutdown()
index 62b793e..9889f08 100644 (file)
@@ -94,5 +94,44 @@ simgrid::mc::Variable* ObjectInformation::find_variable(const char* name) const
   return nullptr;
 }
 
+void ObjectInformation::remove_global_variable(const char* name)
+{
+  typedef std::vector<Variable>::size_type size_type;
+
+  if (this->global_variables.empty())
+    return;
+
+  // Binary search:
+  size_type start = 0;
+  size_type end = this->global_variables.size() - 1;
+
+  while (start <= end) {
+    size_type cursor = start + (end - start) / 2;
+    simgrid::mc::Variable& current_var = this->global_variables[cursor];
+    int cmp = current_var.name.compare(name);
+
+    if (cmp == 0) {
+      // Find the whole range:
+      start = cursor;
+      while (start != 0 && this->global_variables[start - 1].name == name)
+        start--;
+      size_type size = this->global_variables.size();
+      end = cursor;
+      while (end != size - 1 && this->global_variables[end + 1].name == name)
+        end++;
+      // Remove the whole range:
+      this->global_variables.erase(
+        this->global_variables.begin() + cursor,
+        this->global_variables.begin() + end + 1);
+      return;
+    } else if (cmp < 0)
+      start = cursor + 1;
+    else if (cursor != 0)
+      end = cursor - 1;
+    else
+      break;
+  }
+}
+
 }
 }
\ No newline at end of file
index 74c958b..1a59340 100644 (file)
@@ -92,6 +92,7 @@ public:
 
   simgrid::mc::Frame* find_function(const void *ip) const;
   simgrid::mc::Variable* find_variable(const char* name) const;
+  void remove_global_variable(const char* name);
 
 };
 
index 55ba5fd..7cb054d 100644 (file)
@@ -161,6 +161,13 @@ public:
   }
   void privatized(bool privatized) { privatized_ = privatized; }
 
+  void ignore_global_variable(const char* name)
+  {
+    for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info :
+        this->object_infos)
+      info->remove_global_variable(name);
+  }
+
 private:
   void init_memory_map_info();
   void refresh_heap();
index ce0478e..bbcef78 100644 (file)
@@ -113,36 +113,6 @@ XBT_PRIVATE void MC_heap_region_ignore_remove(void *address, size_t size)
   }
 }
 
-// ***** Ignore global variables
-
-XBT_PRIVATE void MCer_ignore_global_variable(const char *name)
-{
-  simgrid::mc::Process* process = &mc_model_checker->process();
-  xbt_assert(!process->object_infos.empty(), "MC subsystem not initialized");
-
-  for (std::shared_ptr<simgrid::mc::ObjectInformation> const& info : process->object_infos) {
-
-    // Binary search:
-    int start = 0;
-    int end = info->global_variables.size() - 1;
-    while (start <= end) {
-      unsigned int cursor = (start + end) / 2;
-      simgrid::mc::Variable* current_var = &info->global_variables[cursor];
-      int cmp = current_var->name.compare(name);
-      if (cmp == 0) {
-        info->global_variables.erase(
-          info->global_variables.begin() + cursor);
-        start = 0;
-        end = info->global_variables.size() - 1;
-      } else if (cmp < 0) {
-        start = cursor + 1;
-      } else {
-        end = cursor - 1;
-      }
-    }
-  }
-}
-
 // ***** Ignore local variables
 
 static void mc_ignore_local_variable_in_scope(const char *var_name,
index 65f843f..1961f4b 100644 (file)
@@ -16,7 +16,6 @@
 
 SG_BEGIN_DECL();
 
-XBT_PRIVATE void MCer_ignore_global_variable(const char *var_name);
 XBT_PRIVATE void MC_heap_region_ignore_insert(mc_heap_ignore_region_t region);
 XBT_PRIVATE void MC_heap_region_ignore_remove(void *address, size_t size);