X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/08a29a4221dc5cec95b766cd9b25c95dcc361df9..4bcfd40036f842e976d329cd0cee7349b8e0f4d6:/src/mc/sosp/RegionSnapshot.hpp diff --git a/src/mc/sosp/RegionSnapshot.hpp b/src/mc/sosp/RegionSnapshot.hpp index d1011aff9f..7d335bc2ab 100644 --- a/src/mc/sosp/RegionSnapshot.hpp +++ b/src/mc/sosp/RegionSnapshot.hpp @@ -28,42 +28,43 @@ enum class StorageType { NoData = 0, Flat = 1, Chunked = 2, Privatized = 3 }; class Buffer { private: - enum class Type { Malloc, Mmap }; void* data_ = nullptr; std::size_t size_; - Type type_ = Type::Malloc; - Buffer(std::size_t size, Type type = Type::Malloc); - Buffer(void* data, std::size_t size, Type type = Type::Malloc) : data_(data), size_(size), type_(type) {} + explicit Buffer(std::size_t size) : size_(size) { data_ = ::operator new(size_); } + + Buffer(void* data, std::size_t size) : data_(data), size_(size) {} public: Buffer() = default; - void clear() noexcept; + void clear() noexcept + { + ::operator delete(data_); + data_ = nullptr; + size_ = 0; + } + ~Buffer() noexcept { clear(); } - static Buffer malloc(std::size_t size) { return Buffer(size, Type::Malloc); } - static Buffer mmap(std::size_t size) { return Buffer(size, Type::Mmap); } + static Buffer malloc(std::size_t size) { return Buffer(size); } // No copy Buffer(Buffer const& buffer) = delete; Buffer& operator=(Buffer const& buffer) = delete; // Move - Buffer(Buffer&& that) noexcept : data_(that.data_), size_(that.size_), type_(that.type_) + Buffer(Buffer&& that) noexcept : data_(that.data_), size_(that.size_) { that.data_ = nullptr; that.size_ = 0; - that.type_ = Type::Malloc; } Buffer& operator=(Buffer&& that) noexcept { clear(); data_ = that.data_; size_ = that.size_; - type_ = that.type_; that.data_ = nullptr; that.size_ = 0; - that.type_ = Type::Malloc; return *this; } @@ -97,15 +98,15 @@ public: static const RegionType DataRegion = RegionType::Data; private: - RegionType region_type_; - StorageType storage_type_; - simgrid::mc::ObjectInformation* object_info_; + RegionType region_type_ = UnknownRegion; + StorageType storage_type_ = StorageType::NoData; + simgrid::mc::ObjectInformation* object_info_ = nullptr; /** @brief Virtual address of the region in the simulated process */ - void* start_addr_; + void* start_addr_ = nullptr; /** @brief Size of the data region in bytes */ - std::size_t size_; + std::size_t size_ = 0; /** @brief Permanent virtual address of the region * @@ -116,26 +117,16 @@ private: * on the region of the global variables. * * */ - void* permanent_addr_; + void* permanent_addr_ = nullptr; Buffer flat_data_; ChunkedData page_numbers_; std::vector privatized_regions_; public: - RegionSnapshot() - : region_type_(UnknownRegion) - , storage_type_(StorageType::NoData) - , object_info_(nullptr) - , start_addr_(nullptr) - , size_(0) - , permanent_addr_(nullptr) - { - } + RegionSnapshot() {} RegionSnapshot(RegionType type, void* start_addr, void* permanent_addr, size_t size) : region_type_(type) - , storage_type_(StorageType::NoData) - , object_info_(nullptr) , start_addr_(start_addr) , size_(size) , permanent_addr_(permanent_addr) @@ -247,6 +238,4 @@ simgrid::mc::RegionSnapshot region(RegionType type, void* start_addr, void* data } // namespace mc } // namespace simgrid -typedef simgrid::mc::RegionSnapshot s_mc_mem_region_t; -typedef s_mc_mem_region_t* mc_mem_region_t; #endif