X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/bf23fe353d38f31a84d517a064eed072cd6197f1..928649fec04d89b678017ec4cadbc97e5ef901f5:/src/mc/mc_snapshot.h diff --git a/src/mc/mc_snapshot.h b/src/mc/mc_snapshot.h index 7b9fa10dc9..4ce34ed26e 100644 --- a/src/mc/mc_snapshot.h +++ b/src/mc/mc_snapshot.h @@ -33,7 +33,7 @@ typedef enum e_mc_region_type_t { } mc_region_type_t; // TODO, use OO instead of this -typedef enum e_mc_region_storeage_type_t { +typedef enum e_mc_region_storage_type_t { MC_REGION_STORAGE_TYPE_NONE = 0, MC_REGION_STORAGE_TYPE_FLAT = 1, MC_REGION_STORAGE_TYPE_CHUNKED = 2, @@ -151,7 +151,7 @@ private: std::vector flat_data_; PerPageCopy page_numbers_; - std::vector> privatized_regions_; + std::vector privatized_regions_; public: RegionSnapshot() : region_type_(MC_REGION_TYPE_UNKNOWN), @@ -170,11 +170,51 @@ public: permanent_addr_(permanent_addr) {} ~RegionSnapshot(); - RegionSnapshot(RegionSnapshot const&) = delete; - RegionSnapshot& operator=(RegionSnapshot const&) = delete; + RegionSnapshot(RegionSnapshot const&) = default; + RegionSnapshot& operator=(RegionSnapshot const&) = default; + RegionSnapshot(RegionSnapshot&& that) + { + region_type_ = that.region_type_; + storage_type_ = that.storage_type_; + object_info_ = that.object_info_; + start_addr_ = that.start_addr_; + size_ = that.size_; + permanent_addr_ = that.permanent_addr_; + flat_data_ = std::move(that.flat_data_); + page_numbers_ = std::move(that.page_numbers_); + privatized_regions_ = std::move(that.privatized_regions_); + that.clear(); + } + RegionSnapshot& operator=(RegionSnapshot&& that) + { + region_type_ = that.region_type_; + storage_type_ = that.storage_type_; + object_info_ = that.object_info_; + start_addr_ = that.start_addr_; + size_ = that.size_; + permanent_addr_ = that.permanent_addr_; + flat_data_ = std::move(that.flat_data_); + page_numbers_ = std::move(that.page_numbers_); + privatized_regions_ = std::move(that.privatized_regions_); + that.clear(); + return *this; + } // Data + void clear() + { + region_type_ = MC_REGION_TYPE_UNKNOWN; + storage_type_ = MC_REGION_STORAGE_TYPE_NONE; + privatized_regions_.clear(); + page_numbers_.clear(); + flat_data_.clear(); + object_info_ = nullptr; + start_addr_ = nullptr; + size_ = 0; + permanent_addr_ = nullptr; + } + void clear_data() { storage_type_ = MC_REGION_STORAGE_TYPE_NONE; @@ -201,14 +241,18 @@ public: } PerPageCopy const& page_data() const { return page_numbers_; } - void privatized_data(std::vector> data) + void privatized_data(std::vector data) { storage_type_ = MC_REGION_STORAGE_TYPE_PRIVATIZED; flat_data_.clear(); page_numbers_.clear(); privatized_regions_ = std::move(data); } - std::vector> const& privatized_data() const + std::vector const& privatized_data() const + { + return privatized_regions_; + } + std::vector& privatized_data() { return privatized_regions_; } @@ -236,7 +280,7 @@ public: typedef class simgrid::mc::RegionSnapshot s_mc_mem_region_t, *mc_mem_region_t; -MC_SHOULD_BE_INTERNAL mc_mem_region_t mc_region_new_sparse( +MC_SHOULD_BE_INTERNAL simgrid::mc::RegionSnapshot MC_region_sparse( mc_region_type_t type, void *start_addr, void* data_addr, size_t size); XBT_INTERNAL void mc_region_restore_sparse(mc_process_t process, mc_mem_region_t reg); @@ -278,9 +322,8 @@ void* mc_translate_address_region(uintptr_t addr, mc_mem_region_t region, int pr "Missing process index for privatized region"); xbt_assert((size_t) process_index < region->privatized_data().size(), "Out of range process index"); - mc_mem_region_t subregion = region->privatized_data()[process_index].get(); - xbt_assert(subregion, "Missing memory region for process %i", process_index); - return mc_translate_address_region(addr, subregion, process_index); + simgrid::mc::RegionSnapshot& subregion= region->privatized_data()[process_index]; + return mc_translate_address_region(addr, &subregion, process_index); } } } @@ -395,16 +438,6 @@ XBT_INTERNAL void mc_restore_page_snapshot_region( MC_SHOULD_BE_INTERNAL const void* MC_region_read_fragmented( mc_mem_region_t region, void* target, const void* addr, size_t size); -// Deprecated compatibility wrapper -static inline -const void* MC_snapshot_read(mc_snapshot_t snapshot, - simgrid::mc::AddressSpace::ReadMode mode, - void* target, const void* addr, size_t size, int process_index) -{ - return snapshot->read_bytes(target, size, simgrid::mc::remote(addr), - process_index, mode); -} - MC_SHOULD_BE_INTERNAL int MC_snapshot_region_memcmp( const void* addr1, mc_mem_region_t region1, const void* addr2, mc_mem_region_t region2, size_t size);