X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/ab0bf820128e74dc5e7d9e6413b88bca2621a34e..872d65264714799b25eb231609c3f05bae3d03dc:/src/mc/AddressSpace.hpp diff --git a/src/mc/AddressSpace.hpp b/src/mc/AddressSpace.hpp index 0ff146ac86..75fbcae0c7 100644 --- a/src/mc/AddressSpace.hpp +++ b/src/mc/AddressSpace.hpp @@ -7,12 +7,13 @@ #ifndef SIMGRID_MC_ADDRESS_SPACE_H #define SIMGRID_MC_ADDRESS_SPACE_H +#include #include #include #include #include "src/mc/mc_forward.hpp" -#include "src/mc/remote_ptr.hpp" +#include "src/mc/RemotePtr.hpp" namespace simgrid { namespace mc { @@ -90,6 +91,17 @@ public: static constexpr ReadOptions lazy() { return ReadOptions(1); } }; +/** A value read from another process */ +template +class Remote { +private: + char buffer[sizeof(T)]; +public: + void* data() { return buffer; } + const void* data() const { return buffer; } + constexpr std::size_t size() const { return sizeof(T); } +}; + /** A given state of a given process (abstract base class) * * Currently, this might either be: @@ -116,19 +128,25 @@ public: * @param options */ virtual const void* read_bytes(void* buffer, std::size_t size, - remote_ptr address, int process_index = ProcessIndexAny, + RemotePtr address, int process_index = ProcessIndexAny, ReadOptions options = ReadOptions::none()) const = 0; /** Read a given data structure from the address space */ template inline - void read(T *buffer, remote_ptr ptr, int process_index = ProcessIndexAny) + void read(T *buffer, RemotePtr ptr, int process_index = ProcessIndexAny) { this->read_bytes(buffer, sizeof(T), ptr, process_index); } + template inline + void read(Remote& buffer, RemotePtr ptr, int process_index = ProcessIndexAny) + { + this->read_bytes(buffer.data(), sizeof(T), ptr, process_index); + } + /** Read a given data structure from the address space */ template inline - T read(remote_ptr ptr, int process_index = ProcessIndexMissing) + T read(RemotePtr ptr, int process_index = ProcessIndexMissing) { static_assert(std::is_trivial::value, "Cannot read a non-trivial type"); T res;