provider: Added insert bytes feature

This commit is contained in:
WerWolv
2022-01-20 23:24:26 +01:00
parent ee8b665472
commit 9ddd97a6eb
12 changed files with 121 additions and 40 deletions

View File

@@ -28,7 +28,8 @@ namespace hex::prv {
virtual void read(u64 offset, void *buffer, size_t size, bool overlays = true);
virtual void write(u64 offset, const void *buffer, size_t size);
virtual void resize(ssize_t newSize);
virtual void resize(size_t newSize);
virtual void insert(u64 offset, size_t size);
virtual void save();
virtual void saveAs(const fs::path &path);

View File

@@ -34,7 +34,23 @@ namespace hex::prv {
void Provider::save() { }
void Provider::saveAs(const fs::path &path) { }
void Provider::resize(ssize_t newSize) { }
void Provider::resize(size_t newSize) { }
void Provider::insert(u64 offset, size_t size) {
auto &patches = getPatches();
std::vector<std::pair<u64, u8>> patchesToMove;
for (auto &[address, value] : patches) {
if (address > offset)
patchesToMove.emplace_back(address, value);
}
for (const auto &[address, value] : patchesToMove)
patches.erase(address);
for (const auto &[address, value] : patchesToMove)
patches.insert({ address + offset, value });
}
void Provider::applyOverlays(u64 offset, void *buffer, size_t size) {
for (auto &overlay : this->m_overlays) {