diff options
Diffstat (limited to 'src/core/hle/kernel/object_address_table.cpp')
-rw-r--r-- | src/core/hle/kernel/object_address_table.cpp | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/src/core/hle/kernel/object_address_table.cpp b/src/core/hle/kernel/object_address_table.cpp new file mode 100644 index 000000000..dda532a88 --- /dev/null +++ b/src/core/hle/kernel/object_address_table.cpp @@ -0,0 +1,34 @@ +// Copyright 2018 Citra Emulator Project +// Licensed under GPLv2 or any later version +// Refer to the license.txt file included. + +#include "common/assert.h" +#include "core/hle/kernel/object_address_table.h" + +namespace Kernel { + +ObjectAddressTable g_object_address_table; + +void ObjectAddressTable::Insert(VAddr addr, SharedPtr<Object> obj) { + ASSERT_MSG(objects.find(addr) == objects.end(), "Object already exists with addr=0x%llx", addr); + objects[addr] = obj; +} + +void ObjectAddressTable::Close(VAddr addr) { + ASSERT_MSG(objects.find(addr) != objects.end(), "Object does not exist with addr=0x%llx", addr); + objects.erase(addr); +} + +SharedPtr<Object> ObjectAddressTable::GetGeneric(VAddr addr) const { + auto iter = objects.find(addr); + if (iter != objects.end()) { + return iter->second; + } + return {}; +} + +void ObjectAddressTable::Clear() { + objects.clear(); +} + +} // namespace Kernel |