From 048d28b28dcaba3b0773c129d8dd63084420b01e Mon Sep 17 00:00:00 2001 From: Nicolas James Date: Thu, 13 Feb 2025 17:29:05 +1100 Subject: initial commit --- src/memory/memory.hh | 43 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 43 insertions(+) create mode 100644 src/memory/memory.hh (limited to 'src/memory/memory.hh') diff --git a/src/memory/memory.hh b/src/memory/memory.hh new file mode 100644 index 0000000..c35feea --- /dev/null +++ b/src/memory/memory.hh @@ -0,0 +1,43 @@ +#ifndef MEMORY_MEMORY_HH_ +#define MEMORY_MEMORY_HH_ + +#include +#include +#include +#include +#include + +namespace memory { + +using buffer_t = std::vector; + +buffer_t read_buffer(const std::size_t num_bytes, const pid_t& pid, + const void* const address); +void write_buffer(const buffer_t& buffer, const pid_t& pid, + const void* const address); + +template +T read(const pid_t& pid, const void* const address) { + static_assert(std::is_trivially_copyable::value); + + const buffer_t data = read_buffer(sizeof(T), pid, address); + T ret; + std::memcpy(&ret, std::data(data), sizeof(T)); + return std::move(ret); +} + +template +void write(const T& data, const pid_t& pid, const void* const address) { + static_assert(std::is_trivially_copyable::value); + + const buffer_t buffer = [&]() { + buffer_t buffer{sizeof(T)}; + std::memcpy(std::data(buffer), &data, sizeof(T)); + return buffer; + }(); + write_buffer(buffer, pid, address); +} + +} // namespace memory + +#endif -- cgit v1.2.3