prv: Make data overlays work everywhere, not just in the hex editor view

This commit is contained in:
WerWolv
2021-03-21 14:50:47 +01:00
parent ef747cc4c0
commit 2a7b698a3d
5 changed files with 21 additions and 10 deletions

View File

@@ -18,7 +18,7 @@ namespace hex::prv {
this->deleteOverlay(overlay);
}
void Provider::read(u64 offset, void *buffer, size_t size) {
void Provider::read(u64 offset, void *buffer, size_t size, bool overlays) {
this->readRaw(offset, buffer, size);
}
@@ -26,6 +26,18 @@ namespace hex::prv {
this->writeRaw(offset, buffer, size);
}
void Provider::applyOverlays(u64 offset, void *buffer, size_t size) {
for (auto &overlay : this->m_overlays) {
auto overlayOffset = overlay->getAddress();
auto overlaySize = overlay->getSize();
s128 overlapMin = std::max(offset, overlayOffset);
s128 overlapMax = std::min(offset + size, overlayOffset + overlaySize);
if (overlapMax > overlapMin)
std::memcpy(static_cast<u8*>(buffer) + std::max<s128>(0, overlapMin - offset), overlay->getData().data() + std::max<s128>(0, overlapMin - overlayOffset), overlapMax - overlapMin);
}
}
std::map<u64, u8>& Provider::getPatches() {
return this->m_patches.back();