Logo AND Algorithmique Numérique Distribuée

Public GIT Repository
[mc] Make Snapshot::stack_sizes a std::vector
[simgrid.git] / src / mc / mc_snapshot.h
index 87e007f..075b9b7 100644 (file)
@@ -10,6 +10,9 @@
 #include <sys/types.h> // off_t
 #include <stdint.h> // size_t
 
+#include <vector>
+#include <set>
+
 #include <simgrid_config.h>
 #include "../xbt/mmalloc/mmprivate.h"
 #include <xbt/asserts.h>
@@ -29,12 +32,6 @@ SG_BEGIN_DECL()
 
 XBT_INTERNAL void mc_region_restore_sparse(mc_process_t process, mc_mem_region_t reg);
 
-static inline  __attribute__ ((always_inline))
-bool mc_region_contain(mc_mem_region_t region, const void* p)
-{
-  return region->contain(simgrid::mc::remote(p));
-}
-
 static inline __attribute__((always_inline))
 void* mc_translate_address_region_chunked(uintptr_t addr, mc_mem_region_t region)
 {
@@ -48,20 +45,20 @@ static inline __attribute__((always_inline))
 void* mc_translate_address_region(uintptr_t addr, mc_mem_region_t region, int process_index)
 {
   switch (region->storage_type()) {
-  case MC_REGION_STORAGE_TYPE_NONE:
+  case simgrid::mc::StorageType::NoData:
   default:
     xbt_die("Storage type not supported");
 
-  case MC_REGION_STORAGE_TYPE_FLAT:
+  case simgrid::mc::StorageType::Flat:
     {
       uintptr_t offset = (uintptr_t) addr - (uintptr_t) region->start().address();
       return (void *) ((uintptr_t) region->flat_data().data() + offset);
     }
 
-  case MC_REGION_STORAGE_TYPE_CHUNKED:
+  case simgrid::mc::StorageType::Chunked:
     return mc_translate_address_region_chunked(addr, region);
 
-  case MC_REGION_STORAGE_TYPE_PRIVATIZED:
+  case simgrid::mc::StorageType::Privatized:
     {
       xbt_assert(process_index >=0,
         "Missing process index for privatized region");
@@ -114,9 +111,9 @@ public: // To be private
   size_t heap_bytes_used;
   mc_mem_region_t* snapshot_regions;
   size_t snapshot_regions_count;
-  xbt_dynar_t enabled_processes;
+  std::set<pid_t> enabled_processes;
   int privatization_index;
-  size_t *stack_sizes;
+  std::vector<size_t> stack_sizes;
   xbt_dynar_t stacks;
   xbt_dynar_t to_ignore;
   uint64_t hash;
@@ -133,7 +130,7 @@ extern "C" {
 static inline __attribute__ ((always_inline))
 mc_mem_region_t mc_get_region_hinted(void* addr, mc_snapshot_t snapshot, int process_index, mc_mem_region_t region)
 {
-  if (mc_region_contain(region, addr))
+  if (region->contain(simgrid::mc::remote(addr)))
     return region;
   else
     return mc_get_snapshot_region(addr, snapshot, process_index);
@@ -213,18 +210,18 @@ const void* MC_region_read(mc_mem_region_t region, void* target, const void* add
 
   uintptr_t offset = (uintptr_t) addr - (uintptr_t) region->start().address();
 
-  xbt_assert(mc_region_contain(region, addr),
+  xbt_assert(region->contain(simgrid::mc::remote(addr)),
     "Trying to read out of the region boundary.");
 
   switch (region->storage_type()) {
-  case MC_REGION_STORAGE_TYPE_NONE:
+  case simgrid::mc::StorageType::NoData:
   default:
     xbt_die("Storage type not supported");
 
-  case MC_REGION_STORAGE_TYPE_FLAT:
+  case simgrid::mc::StorageType::Flat:
     return (char*) region->flat_data().data() + offset;
 
-  case MC_REGION_STORAGE_TYPE_CHUNKED:
+  case simgrid::mc::StorageType::Chunked:
     {
       // Last byte of the region:
       void* end = (char*) addr + size - 1;
@@ -239,7 +236,7 @@ const void* MC_region_read(mc_mem_region_t region, void* target, const void* add
 
   // We currently do not pass the process_index to this function so we assume
   // that the privatized region has been resolved in the callers:
-  case MC_REGION_STORAGE_TYPE_PRIVATIZED:
+  case simgrid::mc::StorageType::Privatized:
     xbt_die("Storage type not supported");
   }
 }