summaryrefslogtreecommitdiffstats
path: root/src/core/hle/service/ldr_ro/memory_synchronizer.cpp
diff options
context:
space:
mode:
authorwwylele <wwylele@gmail.com>2016-07-15 08:17:01 +0200
committerwwylele <wwylele@gmail.com>2016-08-27 15:38:06 +0200
commit1c9612b79155de9538d4b71ff71938786adcea11 (patch)
tree21385759254942ecc1a70e6a3f4bf4345677f3c2 /src/core/hle/service/ldr_ro/memory_synchronizer.cpp
parentARM: add ClearInstructionCache function (diff)
downloadyuzu-1c9612b79155de9538d4b71ff71938786adcea11.tar
yuzu-1c9612b79155de9538d4b71ff71938786adcea11.tar.gz
yuzu-1c9612b79155de9538d4b71ff71938786adcea11.tar.bz2
yuzu-1c9612b79155de9538d4b71ff71938786adcea11.tar.lz
yuzu-1c9612b79155de9538d4b71ff71938786adcea11.tar.xz
yuzu-1c9612b79155de9538d4b71ff71938786adcea11.tar.zst
yuzu-1c9612b79155de9538d4b71ff71938786adcea11.zip
Diffstat (limited to '')
-rw-r--r--src/core/hle/service/ldr_ro/memory_synchronizer.cpp46
1 files changed, 46 insertions, 0 deletions
diff --git a/src/core/hle/service/ldr_ro/memory_synchronizer.cpp b/src/core/hle/service/ldr_ro/memory_synchronizer.cpp
new file mode 100644
index 000000000..4402876e6
--- /dev/null
+++ b/src/core/hle/service/ldr_ro/memory_synchronizer.cpp
@@ -0,0 +1,46 @@
+// Copyright 2016 Citra Emulator Project
+// Licensed under GPLv2 or any later version
+// Refer to the license.txt file included.
+
+#include <algorithm>
+
+#include "common/assert.h"
+
+#include "core/hle/service/ldr_ro/memory_synchronizer.h"
+
+////////////////////////////////////////////////////////////////////////////////////////////////////
+// Namespace LDR_RO
+
+namespace LDR_RO {
+
+auto MemorySynchronizer::FindMemoryBlock(VAddr mapping, VAddr original) {
+ auto block = std::find_if(memory_blocks.begin(), memory_blocks.end(), [=](MemoryBlock& b){
+ return b.original == original;
+ });
+ ASSERT(block->mapping == mapping);
+ return block;
+}
+
+void MemorySynchronizer::Clear() {
+ memory_blocks.clear();
+}
+
+void MemorySynchronizer::AddMemoryBlock(VAddr mapping, VAddr original, u32 size) {
+ memory_blocks.push_back(MemoryBlock{mapping, original, size});
+}
+
+void MemorySynchronizer::ResizeMemoryBlock(VAddr mapping, VAddr original, u32 size) {
+ FindMemoryBlock(mapping, original)->size = size;
+}
+
+void MemorySynchronizer::RemoveMemoryBlock(VAddr mapping, VAddr original) {
+ memory_blocks.erase(FindMemoryBlock(mapping, original));
+}
+
+void MemorySynchronizer::SynchronizeOriginalMemory() {
+ for (auto& block : memory_blocks) {
+ Memory::CopyBlock(block.original, block.mapping, block.size);
+ }
+}
+
+} // namespace