Memory: Implemented InjectIntoMemory and ExtractFromMemory

This commit is contained in:
MerryMage 2016-01-25 22:13:31 +00:00 committed by Sean Maas
parent c25b85e18f
commit 82677e3dd8

View file

@ -140,6 +140,38 @@ u8* GetPointer(VAddr virtual_address);
*/
std::string GetString(const VAddr vaddr, const u32 size);
/**
* Extracts a POD type from memory. Returns false if address is invalid.
*/
template <typename T>
bool ExtractFromMemory(VAddr address, T& object) {
static_assert(std::is_standard_layout<T>::value, "Type must have standard layout");
const u8* memory = GetPointer(address);
if (!memory) {
return false;
}
std::memcpy(&object, memory, sizeof(T));
return true;
}
/**
* Injects a POD type into memory. Returns false if address is invalid.
*/
template <typename T>
bool InjectIntoMemory(VAddr address, const T& object) {
static_assert(std::is_standard_layout<T>::value, "Type must have standard layout");
u8* memory = GetPointer(address);
if (!memory) {
return false;
}
std::memcpy(memory, &object, sizeof(T));
return true;
}
/**
* Converts a virtual address inside a region with 1:1 mapping to physical memory to a physical
* address. This should be used by services to translate addresses for use by the hardware.