X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/f22a365751c586e7d4d9836824730685a30a485c..3082f058f27fdbc39b5daebf6a720ab2272d6585:/src/mc/RegionSnapshot.hpp diff --git a/src/mc/RegionSnapshot.hpp b/src/mc/RegionSnapshot.hpp index f1007acc9e..182c6f185b 100644 --- a/src/mc/RegionSnapshot.hpp +++ b/src/mc/RegionSnapshot.hpp @@ -15,7 +15,7 @@ #include -#include "src/mc/remote_ptr.hpp" +#include "src/mc/RemotePtr.hpp" #include "src/mc/PageStore.hpp" #include "src/mc/AddressSpace.hpp" #include "src/mc/ChunkedData.hpp" @@ -29,7 +29,6 @@ enum class RegionType { Data = 2 }; -// TODO, use Boost.Variant instead of this enum class StorageType { NoData = 0, Flat = 1, @@ -37,37 +36,46 @@ enum class StorageType { Privatized = 3 }; -class buffer { -public: +class Buffer { +private: enum class Type { Malloc, Mmap }; -private: void* data_ = nullptr; std::size_t size_; Type type_ = Type::Malloc; -public: - buffer() {} - buffer(std::size_t size, Type type = Type::Malloc); - buffer(void* data, std::size_t size, Type type = Type::Malloc) : +private: + 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) {} +public: + Buffer() {} void clear() noexcept; - ~buffer() noexcept { clear(); } + ~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); + } // No copy - buffer(buffer const& buffer) = delete; - buffer& operator=(buffer const& buffer) = delete; + Buffer(Buffer const& buffer) = delete; + Buffer& operator=(Buffer const& buffer) = delete; // Move - buffer(buffer&& that) noexcept + Buffer(Buffer&& that) noexcept : data_(that.data_), size_(that.size_), type_(that.type_) { that.data_ = nullptr; that.size_ = 0; that.type_ = Type::Malloc; } - buffer& operator=(buffer&& that) noexcept + Buffer& operator=(Buffer&& that) noexcept { clear(); data_ = that.data_; @@ -82,7 +90,6 @@ public: void* get() { return data_; } const void* get() const { return data_; } std::size_t size() const { return size_; } - Type type() const { return type_; } }; /** A copy/snapshot of a given memory region @@ -130,7 +137,7 @@ private: * */ void *permanent_addr_; - buffer flat_data_; + Buffer flat_data_; ChunkedData page_numbers_; std::vector privatized_regions_; public: @@ -204,15 +211,15 @@ public: privatized_regions_.clear(); } - void flat_data(buffer data) + void flat_data(Buffer data) { storage_type_ = StorageType::Flat; flat_data_ = std::move(data); page_numbers_.clear(); privatized_regions_.clear(); } - const buffer& flat_data() const { return flat_data_; } - buffer& flat_data() { return flat_data_; } + const Buffer& flat_data() const { return flat_data_; } + Buffer& flat_data() { return flat_data_; } void page_data(ChunkedData page_data) { @@ -244,14 +251,14 @@ public: // Other getters - remote_ptr start() const { return remote(start_addr_); } - remote_ptr end() const { return remote((char*)start_addr_ + size_); } - remote_ptr permanent_address() const { return remote(permanent_addr_); } + RemotePtr start() const { return remote(start_addr_); } + RemotePtr end() const { return remote((char*)start_addr_ + size_); } + RemotePtr permanent_address() const { return remote(permanent_addr_); } std::size_t size() const { return size_; } StorageType storage_type() const { return storage_type_; } RegionType region_type() const { return region_type_; } - bool contain(remote_ptr p) const + bool contain(RemotePtr p) const { return p >= start() && p < end(); } @@ -259,15 +266,13 @@ public: RegionSnapshot privatized_region( RegionType region_type, void *start_addr, void* permanent_addr, - std::size_t size, const RegionSnapshot* ref_region); + std::size_t size); RegionSnapshot dense_region( RegionType type, void *start_addr, void* data_addr, std::size_t size); simgrid::mc::RegionSnapshot sparse_region( - RegionType type, void *start_addr, void* data_addr, std::size_t size, - RegionSnapshot const* ref_region); + RegionType type, void *start_addr, void* data_addr, std::size_t size); simgrid::mc::RegionSnapshot region( - RegionType type, void *start_addr, void* data_addr, std::size_t size, - RegionSnapshot const* ref_region); + RegionType type, void *start_addr, void* data_addr, std::size_t size); } }