[common] Switch to boost::unordered_flat containers (#4326)

Replaces all instances of ankerl's unordered map/set with boost's
`unordered_flat_*` classes. This uses std::hash since boost::hash is
actually a lot slower.

Also adds an abstraction layer in `Common` so future changes are quicker
and easier.

Other implementation details:
- ankerl provided hash specializations for tuple and pair, so those were
  ported here
- std::erase_if doesn't work on boost, so just used the ADL'd erase_if

This should be about equal or superior performance as unordered_dense for everything except iteration.

Signed-off-by: crueter <crueter@eden-emu.dev>

- [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions).
- [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md)
- [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability.

-------------------

Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4326
Reviewed-by: Lizzie and Samuel <lizzie@eden-emu.dev>
Reviewed-by: MaranBr <maranbr@eden-emu.dev>
This commit is contained in:
crueter
2026-08-31 02:58:09 +02:00
parent 106a61c943
commit 7fda6dde73
118 changed files with 348 additions and 340 deletions
@@ -20,7 +20,7 @@ struct RomMetadata {
std::vector<u8> icon;
bool isHomebrew;
};
static ankerl::unordered_dense::map<std::string, RomMetadata> m_rom_metadata_cache;
static ::Common::unordered_map<std::string, RomMetadata> m_rom_metadata_cache;
static RomMetadata CacheRomMetadata(const std::string& path) {
auto& instance = EmulationSession::GetInstance();
@@ -21,7 +21,7 @@
#include "input_common/drivers/virtual_gamepad.h"
#include "native.h"
ankerl::unordered_dense::map<std::string, std::unique_ptr<AndroidConfig>> map_profiles;
::Common::unordered_map<std::string, std::unique_ptr<AndroidConfig>> map_profiles;
bool IsHandheldOnly() {
const auto npad_style_set =
+3 -2
View File
@@ -147,7 +147,8 @@ add_library(
cpu_features.cpp
cpu_features.h
httplib.h
net/net.h net/net.cpp)
net/net.h net/net.cpp
container/unordered_map.h container/unordered_set.h)
if(WIN32)
target_sources(common PRIVATE windows/timer_resolution.cpp
@@ -241,7 +242,7 @@ if (lz4_ADDED)
target_include_directories(common PRIVATE ${lz4_SOURCE_DIR}/lib)
endif()
target_link_libraries(common PUBLIC fmt::fmt stb::headers Threads::Threads unordered_dense::unordered_dense)
target_link_libraries(common PUBLIC fmt::fmt stb::headers Threads::Threads)
target_link_libraries(common PRIVATE lz4::lz4 zstd::zstd)
# Please refer to src/common/demangle.cpp
+16
View File
@@ -0,0 +1,16 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include "common/container_hash.h"
#include <boost/unordered/unordered_flat_map.hpp>
namespace Common {
template <class Key, class T, class Hash = std::hash<Key>, class Pred = std::equal_to<Key>,
class Allocator = std::allocator<std::pair<const Key, T>>>
using unordered_map = boost::unordered::unordered_flat_map<Key, T, Hash, Pred, Allocator>;
}
+16
View File
@@ -0,0 +1,16 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include "common/container_hash.h"
#include <boost/unordered/unordered_flat_set.hpp>
namespace Common {
template <class Key, class Hash = std::hash<Key>, class Pred = std::equal_to<Key>,
class Allocator = std::allocator<Key>>
using unordered_set = boost::unordered::unordered_flat_set<Key, Hash, Pred, Allocator>;
}
+33
View File
@@ -10,8 +10,11 @@
#include <array>
#include <climits>
#include <cstdint>
#include <functional>
#include <limits>
#include <tuple>
#include <type_traits>
#include <utility>
#include <vector>
namespace Common {
@@ -69,10 +72,17 @@ struct HashCombineImpl<64> {
} // namespace detail
template <typename T>
requires std::is_unsigned_v<T>
inline void HashCombine(std::size_t& seed, const T& v) {
seed = detail::HashCombineImpl<sizeof(std::size_t) * CHAR_BIT>::fn(seed, detail::HashValue(v));
}
template <typename T>
requires (!std::is_unsigned_v<T>)
inline void HashCombine(std::size_t& seed, const T& v) {
seed = detail::HashCombineImpl<sizeof(std::size_t) * CHAR_BIT>::fn(seed, std::hash<T>{}(v));
}
template <typename It>
inline std::size_t HashRange(It first, It last) {
std::size_t seed = 0;
@@ -95,3 +105,26 @@ std::size_t HashValue(const std::vector<T, Allocator>& v) {
}
} // namespace Common
namespace std {
template <typename... Args>
struct hash<std::tuple<Args...>> {
std::size_t operator()(const std::tuple<Args...>& t) const noexcept {
std::size_t seed = 0;
std::apply([&seed](const Args&... args) { (Common::HashCombine(seed, args), ...); }, t);
return seed;
}
};
template <class A, class B>
struct hash<std::pair<A, B>> {
std::size_t operator()(const std::pair<A, B>& p) const noexcept {
std::size_t seed = 0;
Common::HashCombine(seed, p.first);
Common::HashCombine(seed, p.second);
return seed;
}
};
} // namespace std
+3 -3
View File
@@ -7,7 +7,7 @@
#include <algorithm>
#include <iostream>
#include <sstream>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/assert.h"
#include "common/fs/fs.h"
@@ -196,8 +196,8 @@ private:
SetLegacyPathImpl(legacy_path, new_path);
}
ankerl::unordered_dense::map<EdenPath, fs::path> eden_paths;
ankerl::unordered_dense::map<EmuPath, fs::path> legacy_paths;
::Common::unordered_map<EdenPath, fs::path> eden_paths;
::Common::unordered_map<EmuPath, fs::path> legacy_paths;
};
bool ValidatePath(const fs::path& path) {
+2 -2
View File
@@ -7,7 +7,7 @@
#ifdef _WIN32
#include <iterator>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <boost/icl/separate_interval_set.hpp>
#include <windows.h>
#include "common/dynamic_library.h"
@@ -391,7 +391,7 @@ private:
std::mutex placeholder_mutex; ///< Mutex for placeholders
boost::icl::separate_interval_set<size_t> placeholders; ///< Mapped placeholders
ankerl::unordered_dense::map<size_t, size_t> placeholder_host_pointers; ///< Placeholder backing offset
::Common::unordered_map<size_t, size_t> placeholder_host_pointers; ///< Placeholder backing offset
};
#elif defined(__OPENORBIS__) || defined(__managarm__)
+2 -2
View File
@@ -9,7 +9,7 @@
#include <functional>
#include <memory>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <utility>
#include <vector>
#include "common/logging.h"
@@ -412,7 +412,7 @@ public:
namespace Impl {
template <typename InputDeviceType>
using FactoryListType = ankerl::unordered_dense::map<std::string, std::shared_ptr<Factory<InputDeviceType>>>;
using FactoryListType = ::Common::unordered_map<std::string, std::shared_ptr<Factory<InputDeviceType>>>;
template <typename InputDeviceType>
struct FactoryList {
+2 -2
View File
@@ -8,14 +8,14 @@
#include <initializer_list>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
namespace Common {
/// A string-based key-value container supporting serializing to and deserializing from a string
class ParamPackage {
public:
using DataType = ankerl::unordered_dense::map<std::string, std::string>;
using DataType = ::Common::unordered_map<std::string, std::string>;
ParamPackage() = default;
explicit ParamPackage(const std::string& serialized);
+4 -3
View File
@@ -22,10 +22,11 @@
#endif
// You must ensure this matches with src/common/x64/xbyak.h on root dir
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include <boost/unordered_map.hpp>
#define XBYAK_STD_UNORDERED_SET ankerl::unordered_dense::set
#define XBYAK_STD_UNORDERED_MAP ankerl::unordered_dense::map
#define XBYAK_STD_UNORDERED_SET ::Common::unordered_set
#define XBYAK_STD_UNORDERED_MAP ::Common::unordered_map
#define XBYAK_STD_UNORDERED_MULTIMAP boost::unordered_multimap
#include <xbyak/xbyak.h>
#include <xbyak/xbyak_util.h>
+1 -1
View File
@@ -8,7 +8,7 @@
#include <atomic>
#include <memory>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <dynarmic/interface/A64/a64.h>
#include <dynarmic/interface/code_page.h>
+2 -2
View File
@@ -4,7 +4,7 @@
#pragma once
#include <span>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include <oaknut/code_block.hpp>
#include <oaknut/oaknut.hpp>
@@ -46,7 +46,7 @@ enum class PatchMode : u32 {
using ModuleTextAddress = u64;
using PatchTextAddress = u64;
using EntryTrampolines = ankerl::unordered_dense::map<ModuleTextAddress, PatchTextAddress>;
using EntryTrampolines = ::Common::unordered_map<ModuleTextAddress, PatchTextAddress>;
class Patcher {
public:
+2 -2
View File
@@ -8,7 +8,7 @@
#include <utility>
#include <span>
#include <cctype>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/hex_util.h"
#include "common/logging.h"
@@ -104,7 +104,7 @@ struct IPSwitchRecord {
size_t count;
};
struct IPSwitchCompiler::IPSwitchPatch {
ankerl::unordered_dense::map<u32, IPSwitchRecord> records;
::Common::unordered_map<u32, IPSwitchRecord> records;
bool enabled;
};
+1 -1
View File
@@ -566,7 +566,7 @@ VirtualFile RegisteredCache::GetFileAtID(NcaID id) const {
return file;
}
static std::optional<NcaID> CheckMapForContentRecord(const ankerl::unordered_dense::map<u64, CNMT>& map, u64 title_id, ContentRecordType type) {
static std::optional<NcaID> CheckMapForContentRecord(const ::Common::unordered_map<u64, CNMT>& map, u64 title_id, ContentRecordType type) {
auto cmnt_iter = map.find(title_id);
u8 id_offset = 0;
+6 -6
View File
@@ -12,7 +12,7 @@
#include <optional>
#include <string>
#include <vector>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <boost/container/flat_map.hpp>
#include "common/common_types.h"
#include "core/crypto/key_manager.h"
@@ -209,11 +209,11 @@ private:
ContentProviderParsingFunction parser;
// maps tid -> NcaID of meta
ankerl::unordered_dense::map<u64, NcaID> meta_id;
::Common::unordered_map<u64, NcaID> meta_id;
// maps tid -> meta
ankerl::unordered_dense::map<u64, CNMT> meta;
::Common::unordered_map<u64, CNMT> meta;
// maps tid -> meta for CNMT in yuzu_meta
ankerl::unordered_dense::map<u64, CNMT> yuzu_meta;
::Common::unordered_map<u64, CNMT> yuzu_meta;
};
enum class ContentProviderUnionSlot {
@@ -313,8 +313,8 @@ private:
void ProcessXCI(const VirtualFile& file);
std::vector<VirtualDir> load_dirs;
ankerl::unordered_dense::map<std::tuple<u64, ContentRecordType, TitleType>, VirtualFile> entries;
ankerl::unordered_dense::map<u64, u32> versions;
::Common::unordered_map<std::tuple<u64, ContentRecordType, TitleType>, VirtualFile> entries;
::Common::unordered_map<u64, u32> versions;
std::vector<ExternalUpdateEntry> multi_version_entries;
};
+3 -3
View File
@@ -6,7 +6,7 @@
#include <algorithm>
#include <set>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_set.h"
#include <utility>
#include "core/file_sys/vfs/vfs_layered.h"
@@ -63,7 +63,7 @@ std::string LayeredVfsDirectory::GetFullPath() const {
std::vector<VirtualFile> LayeredVfsDirectory::GetFiles() const {
std::vector<VirtualFile> out;
ankerl::unordered_dense::set<std::string> out_names;
::Common::unordered_set<std::string> out_names;
for (const auto& layer : dirs) {
for (auto& file : layer->GetFiles()) {
@@ -79,7 +79,7 @@ std::vector<VirtualFile> LayeredVfsDirectory::GetFiles() const {
std::vector<VirtualDir> LayeredVfsDirectory::GetSubdirectories() const {
std::vector<VirtualDir> out;
ankerl::unordered_dense::set<std::string> out_names;
::Common::unordered_set<std::string> out_names;
for (const auto& layer : dirs) {
for (const auto& sd : layer->GetSubdirectories()) {
+2 -2
View File
@@ -78,7 +78,7 @@ private:
std::array<DebugWatchpoint, Core::Hardware::NUM_WATCHPOINTS> m_watchpoints{};
std::map<KProcessAddress, u64> m_debug_page_refcounts{};
#ifdef HAS_NCE
ankerl::unordered_dense::map<u64, u64> m_post_handlers{};
::Common::unordered_map<u64, u64> m_post_handlers{};
#endif
std::unique_ptr<Core::ExclusiveMonitor> m_exclusive_monitor;
Core::Memory::Memory m_memory;
@@ -494,7 +494,7 @@ public:
static void Switch(KernelCore& kernel, KProcess* cur_process, KProcess* next_process);
#ifdef HAS_NCE
ankerl::unordered_dense::map<u64, u64>& GetPostHandlers() noexcept {
::Common::unordered_map<u64, u64>& GetPostHandlers() noexcept {
return m_post_handlers;
}
#endif
+4 -3
View File
@@ -10,7 +10,8 @@
#include <functional>
#include <memory>
#include <thread>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include <utility>
#include "common/assert.h"
@@ -792,8 +793,8 @@ struct KernelCore::Impl {
std::optional<KObjectNameGlobalData> object_name_global_data;
ankerl::unordered_dense::set<KAutoObject*> registered_objects;
ankerl::unordered_dense::set<KAutoObject*> registered_in_use_objects;
::Common::unordered_set<KAutoObject*> registered_objects;
::Common::unordered_set<KAutoObject*> registered_in_use_objects;
std::mutex server_lock;
std::vector<std::unique_ptr<Service::ServerManager>> server_managers;
+1 -1
View File
@@ -11,7 +11,7 @@
#include <list>
#include <memory>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/polyfill_thread.h"
@@ -7,7 +7,7 @@
#pragma once
#include <array>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/common_funcs.h"
@@ -176,6 +176,6 @@ struct WebCommonReturnValue {
};
static_assert(sizeof(WebCommonReturnValue) == 0x1010, "WebCommonReturnValue has incorrect size.");
using WebArgInputTLVMap = ankerl::unordered_dense::map<WebArgInputTLVType, std::vector<u8>>;
using WebArgInputTLVMap = ::Common::unordered_map<WebArgInputTLVType, std::vector<u8>>;
} // namespace Service::AM::Frontend
@@ -40,8 +40,8 @@ std::vector<u8> default_logo_small;
std::vector<u8> default_logo_large;
bool default_logos_loaded = false;
ankerl::unordered_dense::map<std::string, std::vector<u8>> news_images_small;
ankerl::unordered_dense::map<std::string, std::vector<u8>> news_images_large;
::Common::unordered_map<std::string, std::vector<u8>> news_images_small;
::Common::unordered_map<std::string, std::vector<u8>> news_images_large;
std::mutex images_mutex;
@@ -12,7 +12,7 @@
#include <optional>
#include <span>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/common_types.h"
@@ -93,7 +93,7 @@ private:
static s64 Now();
mutable std::mutex mtx;
ankerl::unordered_dense::map<std::string, StoredNews> items;
::Common::unordered_map<std::string, StoredNews> items;
size_t open_counter{};
};
+2 -2
View File
@@ -6,7 +6,7 @@
#pragma once
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/fs/fs.h"
#include "core/hle/result.h"
@@ -88,7 +88,7 @@ private:
AlbumFileDateTime ConvertToAlbumDateTime(u64 posix_time) const;
bool is_mounted{};
ankerl::unordered_dense::map<AlbumFileId, std::filesystem::path> album_files;
::Common::unordered_map<AlbumFileId, std::filesystem::path> album_files;
Core::System& system;
};
+2 -2
View File
@@ -15,7 +15,7 @@
#include <random>
#include <span>
#include <thread>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/logging.h"
#include "common/socket_types.h"
@@ -119,7 +119,7 @@ protected:
std::array<LanStation, StationCountMax> stations;
std::array<NodeLatestUpdate, NodeCountMax> node_changes{};
std::array<u8, NodeCountMax> node_last_states{};
ankerl::unordered_dense::map<MacAddress, NetworkInfo, MACAddressHash> scan_results{};
::Common::unordered_map<MacAddress, NetworkInfo, MACAddressHash> scan_results{};
NodeInfo node_info{};
NetworkInfo network_info{};
State state{State::None};
+2 -2
View File
@@ -7,7 +7,7 @@
#include <string>
#include <optional>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <boost/container_hash/hash.hpp>
#include "common/logging.h"
#include "core/core.h"
@@ -331,7 +331,7 @@ private:
};
static_assert(sizeof(LogPacketHeader) == 0x18, "LogPacketHeader is an invalid size");
ankerl::unordered_dense::map<LogPacketHeaderEntry, std::vector<u8>> entries{};
::Common::unordered_map<LogPacketHeaderEntry, std::vector<u8>> entries{};
LogDestination destination{LogDestination::All};
};
+1 -1
View File
@@ -23,7 +23,7 @@
#include <mutex>
#include <optional>
#include <thread>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <common/settings.h>
#ifdef _WIN32
+1 -1
View File
@@ -9,7 +9,7 @@
#include <deque>
#include <memory>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "core/device_memory_manager.h"
#include "core/hle/service/nvdrv/nvdata.h"
+2 -2
View File
@@ -12,7 +12,7 @@
#include <memory>
#include <mutex>
#include <optional>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <assert.h>
#include "common/bit_field.h"
@@ -161,7 +161,7 @@ private:
std::list<std::shared_ptr<Handle>> unmap_queue{};
std::mutex unmap_queue_lock{}; //!< Protects access to `unmap_queue`
ankerl::unordered_dense::map<Handle::Id, std::shared_ptr<Handle>>
::Common::unordered_map<Handle::Id, std::shared_ptr<Handle>>
handles{}; //!< Main owning map of handles
std::mutex handles_lock; //!< Protects access to `handles`
@@ -13,7 +13,7 @@
#include <memory>
#include <mutex>
#include <optional>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_set.h"
#include <vector>
#include "common/address_space.h"
@@ -113,7 +113,7 @@ private:
};
static_assert(sizeof(IoctlRemapEntry) == 20, "IoctlRemapEntry is incorrect size");
ankerl::unordered_dense::set<s64_le> map_buffer_offsets{};
::Common::unordered_set<s64_le> map_buffer_offsets{};
struct IoctlMapBufferEx {
MappingFlags flags{}; // bit0: fixed_offset, bit2: cacheable
@@ -217,7 +217,7 @@ private:
NvCore::SyncpointManager& syncpoint_manager;
NvCore::NvMap& nvmap;
std::shared_ptr<Tegra::Control::ChannelState> channel_state;
ankerl::unordered_dense::map<DeviceFD, NvCore::SessionId> sessions;
::Common::unordered_map<DeviceFD, NvCore::SessionId> sessions;
u32 channel_syncpoint;
std::mutex channel_mutex;
@@ -7,7 +7,7 @@
#pragma once
#include <deque>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/common_types.h"
@@ -138,7 +138,7 @@ protected:
NvCore::NvMap& nvmap;
NvCore::ChannelType channel_type;
std::array<u32, MaxSyncPoints> device_syncpoints{};
ankerl::unordered_dense::map<DeviceFD, NvCore::SessionId> sessions;
::Common::unordered_map<DeviceFD, NvCore::SessionId> sessions;
};
}; // namespace Devices
} // namespace Service::Nvidia
+2 -2
View File
@@ -7,7 +7,7 @@
#pragma once
#include <memory>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/common_funcs.h"
#include "common/common_types.h"
@@ -118,7 +118,7 @@ private:
NvCore::Container& container;
NvCore::NvMap& file;
ankerl::unordered_dense::map<DeviceFD, NvCore::SessionId> sessions;
::Common::unordered_map<DeviceFD, NvCore::SessionId> sessions;
};
} // namespace Service::Nvidia::Devices
+3 -3
View File
@@ -12,7 +12,7 @@
#include <memory>
#include <span>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "core/hle/service/kernel_helpers.h"
@@ -103,7 +103,7 @@ private:
/// Id to use for the next open file descriptor.
DeviceFD next_fd = 1;
using FilesContainerType = ankerl::unordered_dense::map<DeviceFD, std::shared_ptr<Devices::nvdevice>>;
using FilesContainerType = ::Common::unordered_map<DeviceFD, std::shared_ptr<Devices::nvdevice>>;
/// Mapping of file descriptors to the devices they reference.
FilesContainerType open_files;
@@ -111,7 +111,7 @@ private:
EventInterface events_interface;
ankerl::unordered_dense::map<std::string, std::function<FilesContainerType::iterator(DeviceFD)>> builders;
::Common::unordered_map<std::string, std::function<FilesContainerType::iterator(DeviceFD)>> builders;
};
void LoopProcess(Core::System& system);
@@ -8,7 +8,7 @@
#include <memory>
#include <mutex>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "core/hle/service/nvnflinger/binder.h"
@@ -39,8 +39,8 @@ private:
mutable std::mutex lock;
s32 last_id = 0;
ankerl::unordered_dense::map<s32, std::shared_ptr<android::IBinder>> binders;
ankerl::unordered_dense::map<s32, RefCounts> refcounts;
::Common::unordered_map<s32, std::shared_ptr<android::IBinder>> binders;
::Common::unordered_map<s32, RefCounts> refcounts;
};
} // namespace Service::Nvnflinger
@@ -6,7 +6,7 @@
#pragma once
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/uuid.h"
#include "core/hle/service/cmif_types.h"
@@ -56,10 +56,10 @@ private:
}
};
ankerl::unordered_dense::map<AppKey, bool, AppKeyHash> app_auto_transfer_{};
ankerl::unordered_dense::map<Common::UUID, bool> global_auto_upload_{};
ankerl::unordered_dense::map<Common::UUID, bool> global_auto_download_{};
ankerl::unordered_dense::map<AppKey, u8, AppKeyHash> autonomy_task_status_{};
::Common::unordered_map<AppKey, bool, AppKeyHash> app_auto_transfer_{};
::Common::unordered_map<Common::UUID, bool> global_auto_upload_{};
::Common::unordered_map<Common::UUID, bool> global_auto_download_{};
::Common::unordered_map<AppKey, u8, AppKeyHash> autonomy_task_status_{};
};
} // namespace Service::OLSC
+3 -3
View File
@@ -8,7 +8,7 @@
#include <cstddef>
#include <mutex>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "core/hle/service/hle_ipc.h"
@@ -99,8 +99,8 @@ private:
void ReportUnimplementedFunction(HLERequestContext& ctx, const FunctionInfoBase* info);
protected:
ankerl::unordered_dense::map<u32, FunctionInfoBase> handlers;
ankerl::unordered_dense::map<u32, FunctionInfoBase> handlers_tipc;
::Common::unordered_map<u32, FunctionInfoBase> handlers;
::Common::unordered_map<u32, FunctionInfoBase> handlers_tipc;
/// Used to gain exclusive access to the service members, e.g. from CoreTiming thread.
std::mutex lock_service;
/// System context that the service operates under.
+3 -3
View File
@@ -10,7 +10,7 @@
#include <memory>
#include <mutex>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <concepts>
#include "core/hle/kernel/k_port.h"
@@ -100,8 +100,8 @@ private:
/// Map of registered services, retrieved using GetServicePort.
mutable std::mutex lock;
ankerl::unordered_dense::map<std::string, SessionRequestHandlerFactory> registered_services;
ankerl::unordered_dense::map<std::string, Kernel::KClientPort*> service_ports;
::Common::unordered_map<std::string, SessionRequestHandlerFactory> registered_services;
::Common::unordered_map<std::string, Kernel::KClientPort*> service_ports;
/// Kernel context
Kernel::KernelCore& kernel;
+2 -2
View File
@@ -7,7 +7,7 @@
#pragma once
#include <memory>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "common/polyfill_thread.h"
@@ -49,7 +49,7 @@ private:
private:
Core::System& m_system;
Container& m_container;
ankerl::unordered_dense::map<u64, VsyncManager> m_vsync_managers;
::Common::unordered_map<u64, VsyncManager> m_vsync_managers;
std::shared_ptr<Core::Timing::EventType> m_event;
Common::Event m_signal;
std::jthread m_thread;
+3 -3
View File
@@ -8,7 +8,7 @@
#include <mutex>
#include <sstream>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <fmt/format.h>
#include <nlohmann/json.hpp>
@@ -21,8 +21,8 @@
namespace Core::LaunchTimestampCache {
namespace {
using CacheMap = ankerl::unordered_dense::map<u64, s64>;
using CountMap = ankerl::unordered_dense::map<u64, u64>;
using CacheMap = ::Common::unordered_map<u64, s64>;
using CountMap = ::Common::unordered_map<u64, u64>;
std::mutex g_mutex;
CacheMap g_cache;
-1
View File
@@ -120,7 +120,6 @@ if (NOT Boost_FOUND)
endif()
find_package(fmt 8 CONFIG)
find_package(unordered_dense REQUIRED)
if ("arm64" IN_LIST ARCHITECTURE OR DYNARMIC_TESTS)
find_package(oaknut 2.0.1 CONFIG)
@@ -8,7 +8,6 @@ if (NOT @BUILD_SHARED_LIBS@)
find_dependency(Boost 1.57)
find_dependency(fmt 9)
find_dependency(mcl 0.1.12 EXACT)
find_dependency(unordered_dense)
if ("arm64" IN_LIST ARCHITECTURE)
find_dependency(oaknut 2.0.1)
-1
View File
@@ -387,7 +387,6 @@ set_target_properties(dynarmic PROPERTIES
target_compile_options(dynarmic PRIVATE ${DYNARMIC_CXX_FLAGS})
target_link_libraries(dynarmic PRIVATE unordered_dense::unordered_dense)
target_link_libraries(dynarmic PUBLIC fmt::fmt common)
if (BOOST_NO_HEADERS)
@@ -75,7 +75,7 @@ CodePtr AddressSpace::GetOrEmit(IR::LocationDescriptor descriptor) {
return block_info.entry_point;
}
void AddressSpace::InvalidateBasicBlocks(const ankerl::unordered_dense::set<IR::LocationDescriptor>& descriptors) {
void AddressSpace::InvalidateBasicBlocks(const ::Common::unordered_set<IR::LocationDescriptor>& descriptors) {
UnprotectCodeMemory();
for (const auto& descriptor : descriptors) {
@@ -14,7 +14,8 @@
#include "common/common_types.h"
#include <oaknut/code_block.hpp>
#include <oaknut/oaknut.hpp>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include "dynarmic/backend/arm64/emit_arm64.h"
#include "dynarmic/backend/arm64/fastmem.h"
@@ -41,7 +42,7 @@ public:
CodePtr GetOrEmit(IR::LocationDescriptor descriptor);
void InvalidateBasicBlocks(const ankerl::unordered_dense::set<IR::LocationDescriptor>& descriptors);
void InvalidateBasicBlocks(const ::Common::unordered_set<IR::LocationDescriptor>& descriptors);
void ClearCache();
protected:
@@ -76,9 +77,9 @@ protected:
// A IR::LocationDescriptor will have one current CodePtr.
// However, there can be multiple other CodePtrs which are older, previously invalidated blocks.
std::map<CodePtr, IR::LocationDescriptor> reverse_block_entries;
ankerl::unordered_dense::map<IR::LocationDescriptor, CodePtr> block_entries;
ankerl::unordered_dense::map<CodePtr, EmittedBlockInfo> block_infos;
ankerl::unordered_dense::map<IR::LocationDescriptor, ankerl::unordered_dense::set<CodePtr>> block_references;
::Common::unordered_map<IR::LocationDescriptor, CodePtr> block_entries;
::Common::unordered_map<CodePtr, EmittedBlockInfo> block_infos;
::Common::unordered_map<IR::LocationDescriptor, ::Common::unordered_set<CodePtr>> block_references;
ExceptionHandler exception_handler;
FastmemManager fastmem_manager;
@@ -14,7 +14,7 @@
#include <vector>
#include "common/common_types.h"
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "dynarmic/backend/arm64/fastmem.h"
#include "dynarmic/interface/A32/coprocessor.h"
@@ -105,8 +105,8 @@ struct EmittedBlockInfo {
CodePtr entry_point;
std::size_t size;
std::vector<Relocation> relocations;
ankerl::unordered_dense::map<IR::LocationDescriptor, std::vector<BlockRelocation>> block_relocations;
ankerl::unordered_dense::map<std::ptrdiff_t, FastmemPatchInfo> fastmem_patch_info;
::Common::unordered_map<IR::LocationDescriptor, std::vector<BlockRelocation>> block_relocations;
::Common::unordered_map<std::ptrdiff_t, FastmemPatchInfo> fastmem_patch_info;
};
struct EmitConfig {
@@ -10,7 +10,7 @@
#include <cstddef>
#include <tuple>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_set.h"
#include "dynarmic/mcl/bit.hpp"
#include "common/common_types.h"
@@ -59,7 +59,7 @@ public:
private:
ExceptionHandler& exception_handler;
ankerl::unordered_dense::set<DoNotFastmemMarker, DoNotFastmemMarkerHash> do_not_fastmem;
::Common::unordered_set<DoNotFastmemMarker, DoNotFastmemMarkerHash> do_not_fastmem;
};
} // namespace Dynarmic::Backend::Arm64
@@ -18,7 +18,8 @@
#include "common/common_types.h"
#include "dynarmic/mcl/is_instance_of_template.hpp"
#include <oaknut/oaknut.hpp>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include "dynarmic/backend/arm64/stack_layout.h"
#include "dynarmic/ir/cond.h"
@@ -336,7 +337,7 @@ private:
std::array<HostLocInfo, SpillCount> spills;
mutable std::size_t alloc_candidate_index = 0;
ankerl::unordered_dense::set<const IR::Inst*> defined_insts;
::Common::unordered_set<const IR::Inst*> defined_insts;
};
template<typename T>
@@ -11,13 +11,13 @@
#include <boost/icl/interval_map.hpp>
#include <boost/icl/interval_set.hpp>
#include "common/common_types.h"
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_set.h"
namespace Dynarmic::Backend {
template<typename P>
void BlockRangeInformation<P>::AddRange(boost::icl::discrete_interval<P> range, IR::LocationDescriptor location) {
block_ranges.add(std::make_pair(range, ankerl::unordered_dense::set<IR::LocationDescriptor>{location}));
block_ranges.add(std::make_pair(range, ::Common::unordered_set<IR::LocationDescriptor>{location}));
}
template<typename P>
@@ -26,8 +26,8 @@ void BlockRangeInformation<P>::ClearCache() {
}
template<typename P>
ankerl::unordered_dense::set<IR::LocationDescriptor> BlockRangeInformation<P>::InvalidateRanges(const boost::icl::interval_set<P>& ranges) {
ankerl::unordered_dense::set<IR::LocationDescriptor> erase_locations;
::Common::unordered_set<IR::LocationDescriptor> BlockRangeInformation<P>::InvalidateRanges(const boost::icl::interval_set<P>& ranges) {
::Common::unordered_set<IR::LocationDescriptor> erase_locations;
for (auto invalidate_interval : ranges) {
auto pair = block_ranges.equal_range(invalidate_interval);
for (auto it = pair.first; it != pair.second; ++it)
@@ -12,7 +12,8 @@
#include <boost/icl/interval_map.hpp>
#include <boost/icl/interval_set.hpp>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include "dynarmic/ir/location_descriptor.h"
@@ -23,8 +24,8 @@ class BlockRangeInformation {
public:
void AddRange(boost::icl::discrete_interval<P> range, IR::LocationDescriptor location);
void ClearCache();
ankerl::unordered_dense::set<IR::LocationDescriptor> InvalidateRanges(const boost::icl::interval_set<P>& ranges);
boost::icl::interval_map<P, ankerl::unordered_dense::set<IR::LocationDescriptor>> block_ranges;
::Common::unordered_set<IR::LocationDescriptor> InvalidateRanges(const boost::icl::interval_set<P>& ranges);
boost::icl::interval_map<P, ::Common::unordered_set<IR::LocationDescriptor>> block_ranges;
};
} // namespace Dynarmic::Backend
@@ -17,7 +17,7 @@
#include <optional>
#include <shared_mutex>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <fmt/format.h>
#include <sys/mman.h>
@@ -55,7 +55,7 @@ class SigHandler {
});
}
ankerl::unordered_dense::map<u64, CodeBlockInfo> code_block_infos;
::Common::unordered_map<u64, CodeBlockInfo> code_block_infos;
std::shared_mutex code_block_infos_mutex;
struct sigaction old_sa_segv;
struct sigaction old_sa_bus;
@@ -4,7 +4,7 @@
#pragma once
#include "dynarmic/backend/loongarch64/lagoon_cpp.h"
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "dynarmic/backend/loongarch64/code_block.h"
#include "dynarmic/backend/loongarch64/emit_loongarch64.h"
@@ -53,8 +53,8 @@ private:
const A32::UserConfig conf;
CodeBlock cb;
ankerl::unordered_dense::map<u64, CodePtr> block_entries;
ankerl::unordered_dense::map<u64, EmittedBlockInfo> block_infos;
::Common::unordered_map<u64, CodePtr> block_entries;
::Common::unordered_map<u64, EmittedBlockInfo> block_infos;
public:
struct PreludeInfo {
@@ -9,7 +9,7 @@
#include <vector>
#include "dynarmic/backend/loongarch64/lagoon_cpp.h"
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/assert.h"
#include "common/common_types.h"
@@ -9,7 +9,7 @@
#pragma once
#include <biscuit/assembler.hpp>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "dynarmic/backend/riscv64/code_block.h"
#include "dynarmic/backend/riscv64/emit_riscv64.h"
@@ -74,8 +74,8 @@ private:
CodeBlock cb;
biscuit::Assembler as;
ankerl::unordered_dense::map<u64, CodePtr> block_entries;
ankerl::unordered_dense::map<u64, EmittedBlockInfo> block_infos;
::Common::unordered_map<u64, CodePtr> block_entries;
::Common::unordered_map<u64, EmittedBlockInfo> block_infos;
struct PreludeInfo {
CodePtr end_of_prelude;
@@ -19,7 +19,7 @@
#include "common/assert.h"
#include "common/common_types.h"
#include "dynarmic/mcl/is_instance_of_template.hpp"
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "dynarmic/backend/riscv64/stack_layout.h"
#include "dynarmic/ir/cond.h"
@@ -13,7 +13,8 @@
#include <set>
#include <tuple>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include "dynarmic/backend/block_range_information.h"
#include "dynarmic/backend/x64/a32_jitstate.h"
@@ -126,11 +127,11 @@ public:
RegAlloc reg_alloc; //reusable reg alloc
BlockRangeInformation<u32> block_ranges;
std::array<FastDispatchEntry, fast_dispatch_table_size> fast_dispatch_table;
ankerl::unordered_dense::map<u64, FastmemPatchInfo> fastmem_patch_info;
ankerl::unordered_dense::map<std::tuple<bool, size_t, int, int>, void (*)()> read_fallbacks;
ankerl::unordered_dense::map<std::tuple<bool, size_t, int, int>, void (*)()> write_fallbacks;
ankerl::unordered_dense::map<std::tuple<bool, size_t, int, int>, void (*)()> exclusive_write_fallbacks;
ankerl::unordered_dense::set<DoNotFastmemMarker> do_not_fastmem;
::Common::unordered_map<u64, FastmemPatchInfo> fastmem_patch_info;
::Common::unordered_map<std::tuple<bool, size_t, int, int>, void (*)()> read_fallbacks;
::Common::unordered_map<std::tuple<bool, size_t, int, int>, void (*)()> write_fallbacks;
::Common::unordered_map<std::tuple<bool, size_t, int, int>, void (*)()> exclusive_write_fallbacks;
::Common::unordered_set<DoNotFastmemMarker> do_not_fastmem;
boost::container::stable_vector<Xbyak::Label> shared_labels;
void (*memory_read_128)() = nullptr; // Dummy
void (*memory_write_128)() = nullptr; // Dummy
@@ -12,7 +12,8 @@
#include <map>
#include <optional>
#include <tuple>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include <boost/container/static_vector.hpp>
#include "dynarmic/backend/block_range_information.h"
@@ -122,11 +123,11 @@ public:
RegAlloc reg_alloc; //reusable reg alloc
BlockRangeInformation<u64> block_ranges;
std::array<FastDispatchEntry, fast_dispatch_table_size> fast_dispatch_table;
ankerl::unordered_dense::map<u64, FastmemPatchInfo> fastmem_patch_info;
ankerl::unordered_dense::map<std::tuple<bool, size_t, int, int>, void (*)()> read_fallbacks;
ankerl::unordered_dense::map<std::tuple<bool, size_t, int, int>, void (*)()> write_fallbacks;
ankerl::unordered_dense::map<std::tuple<bool, size_t, int, int>, void (*)()> exclusive_write_fallbacks;
ankerl::unordered_dense::set<DoNotFastmemMarker> do_not_fastmem;
::Common::unordered_map<u64, FastmemPatchInfo> fastmem_patch_info;
::Common::unordered_map<std::tuple<bool, size_t, int, int>, void (*)()> read_fallbacks;
::Common::unordered_map<std::tuple<bool, size_t, int, int>, void (*)()> write_fallbacks;
::Common::unordered_map<std::tuple<bool, size_t, int, int>, void (*)()> exclusive_write_fallbacks;
::Common::unordered_set<DoNotFastmemMarker> do_not_fastmem;
boost::container::stable_vector<Xbyak::Label> shared_labels;
const void* terminal_handler_pop_rsb_hint = nullptr;
const void* terminal_handler_fast_dispatch_hint = nullptr;
@@ -14,7 +14,7 @@
#include <utility>
#include "common/common_types.h"
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "dynarmic/backend/x64/xbyak.h"
namespace Dynarmic::Backend::X64 {
@@ -43,7 +43,7 @@ private:
}
};
ankerl::unordered_dense::map<ConstantT, void*, ConstantHash> constant_info;
::Common::unordered_map<ConstantT, void*, ConstantHash> constant_info;
std::span<ConstantT> pool;
std::size_t insertion_point;
};
@@ -14,7 +14,8 @@
#include <boost/variant/detail/apply_visitor_binary.hpp>
#include "dynarmic/mcl/bit.hpp"
#include "common/common_types.h"
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include "dynarmic/backend/x64/block_of_code.h"
#include "dynarmic/backend/x64/nzcv_util.h"
@@ -396,7 +397,7 @@ void EmitX64::ClearCache() {
PerfMapClear();
}
void EmitX64::InvalidateBasicBlocks(const ankerl::unordered_dense::set<IR::LocationDescriptor>& locations) {
void EmitX64::InvalidateBasicBlocks(const ::Common::unordered_set<IR::LocationDescriptor>& locations) {
code.EnableWriting();
for (const auto& descriptor : locations) {
if (auto const it = block_descriptors.find(descriptor); it != block_descriptors.end()) {
@@ -16,7 +16,8 @@
#include <type_traits>
#include <vector>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include <boost/container/stable_vector.hpp>
#include <boost/container/small_vector.hpp>
@@ -88,7 +89,7 @@ public:
virtual void ClearCache();
/// Invalidates a selection of basic blocks.
void InvalidateBasicBlocks(const ankerl::unordered_dense::set<IR::LocationDescriptor>& locations);
void InvalidateBasicBlocks(const ::Common::unordered_set<IR::LocationDescriptor>& locations);
//protected:
// Microinstruction emitters
@@ -131,8 +132,8 @@ public:
// State
BlockOfCode& code;
ExceptionHandler exception_handler;
ankerl::unordered_dense::map<IR::LocationDescriptor, BlockDescriptor> block_descriptors;
ankerl::unordered_dense::map<IR::LocationDescriptor, PatchInformation> patch_information;
::Common::unordered_map<IR::LocationDescriptor, BlockDescriptor> block_descriptors;
::Common::unordered_map<IR::LocationDescriptor, PatchInformation> patch_information;
// We need materialized protected members
friend class A64EmitX64;
@@ -4,10 +4,11 @@
#pragma once
// You must ensure this matches with src/common/x64/xbyak.h on root dir
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/container/unordered_set.h"
#include <boost/unordered_map.hpp>
#define XBYAK_STD_UNORDERED_SET ankerl::unordered_dense::set
#define XBYAK_STD_UNORDERED_MAP ankerl::unordered_dense::map
#define XBYAK_STD_UNORDERED_SET ::Common::unordered_set
#define XBYAK_STD_UNORDERED_MAP ::Common::unordered_map
#define XBYAK_STD_UNORDERED_MULTIMAP boost::unordered_multimap
#include <xbyak/xbyak.h>
#include <xbyak/xbyak_util.h>
+2 -2
View File
@@ -11,7 +11,7 @@
#include <map>
#include <bit>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "boost/container/small_vector.hpp"
#include "dynarmic/frontend/A32/a32_ir_emitter.h"
#include "dynarmic/frontend/A32/a32_location_descriptor.h"
@@ -1433,7 +1433,7 @@ static void VerificationPass(const IR::Block& block) {
ASSERT(IR::AreTypesCompatible(t1, t2));
}
}
ankerl::unordered_dense::map<IR::Inst*, size_t> actual_uses;
::Common::unordered_map<IR::Inst*, size_t> actual_uses;
for (auto const& inst : block.instructions) {
for (size_t i = 0; i < inst.NumArgs(); i++)
if (IR::Value const arg = inst.GetArg(i); !arg.IsImmediate())
+2 -2
View File
@@ -8,7 +8,7 @@
#include <array>
#include <exception>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <catch2/catch_test_macros.hpp>
#include "common/common_types.h"
@@ -23,7 +23,7 @@ namespace {
class MyEnvironment final : public A64::UserCallbacks {
public:
u64 ticks_left = 0;
ankerl::unordered_dense::map<u64, u8> memory{};
::Common::unordered_map<u64, u8> memory{};
u8 MemoryRead8(u64 vaddr) override {
return memory[vaddr];
+2 -2
View File
@@ -8,7 +8,7 @@
#pragma once
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/assert.h"
#include "common/common_types.h"
#include "dynarmic/interface/A64/a64.h"
@@ -17,7 +17,7 @@ using Vector = Dynarmic::A64::Vector;
class A64TestEnv : public Dynarmic::A64::UserCallbacks {
public:
ankerl::unordered_dense::map<u64, u8> modified_memory;
::Common::unordered_map<u64, u8> modified_memory;
std::vector<u32> code_mem;
u64 ticks_left = 0;
u64 code_mem_start_address = 0;
+5 -5
View File
@@ -24,7 +24,7 @@ add_executable(dynarmic_tests
A64/real_world.cpp
A64/testenv.h
)
target_link_libraries(dynarmic_tests PRIVATE merry::oaknut unordered_dense::unordered_dense)
target_link_libraries(dynarmic_tests PRIVATE merry::oaknut)
if (DYNARMIC_TESTS_USE_UNICORN)
target_link_libraries(dynarmic_tests PRIVATE Unicorn::Unicorn)
@@ -72,7 +72,7 @@ add_executable(dynarmic_print_info
print_info.cpp
)
create_target_directory_groups(dynarmic_print_info)
target_link_libraries(dynarmic_print_info PRIVATE dynarmic fmt::fmt unordered_dense::unordered_dense)
target_link_libraries(dynarmic_print_info PRIVATE dynarmic fmt::fmt)
if (BOOST_NO_HEADERS)
target_link_libraries(dynarmic_print_info PRIVATE Boost::variant Boost::icl Boost::pool)
else()
@@ -93,7 +93,7 @@ add_executable(dynarmic_test_generator
create_target_directory_groups(dynarmic_test_generator)
target_link_libraries(dynarmic_test_generator PRIVATE dynarmic fmt::fmt unordered_dense::unordered_dense)
target_link_libraries(dynarmic_test_generator PRIVATE dynarmic fmt::fmt)
if (BOOST_NO_HEADERS)
target_link_libraries(dynarmic_test_generator PRIVATE Boost::variant Boost::icl Boost::pool)
else()
@@ -110,7 +110,7 @@ add_executable(dynarmic_test_reader
test_reader.cpp
)
create_target_directory_groups(dynarmic_test_reader)
target_link_libraries(dynarmic_test_reader PRIVATE dynarmic fmt::fmt unordered_dense::unordered_dense)
target_link_libraries(dynarmic_test_reader PRIVATE dynarmic fmt::fmt)
if (BOOST_NO_HEADERS)
target_link_libraries(dynarmic_test_reader PRIVATE Boost::variant Boost::icl Boost::pool)
else()
@@ -123,7 +123,7 @@ target_compile_definitions(dynarmic_test_reader PRIVATE FMT_USE_USER_DEFINED_LIT
#
create_target_directory_groups(dynarmic_tests)
target_link_libraries(dynarmic_tests PRIVATE dynarmic Catch2::Catch2WithMain fmt::fmt unordered_dense::unordered_dense)
target_link_libraries(dynarmic_tests PRIVATE dynarmic Catch2::Catch2WithMain fmt::fmt)
if (BOOST_NO_HEADERS)
target_link_libraries(dynarmic_tests PRIVATE Boost::variant Boost::icl Boost::pool)
else()
+2 -2
View File
@@ -11,7 +11,7 @@
#include <memory>
#include <mutex>
#include <optional>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_funcs.h"
#include "common/common_types.h"
@@ -185,7 +185,7 @@ private:
mutable std::mutex mutex;
mutable std::mutex callback_mutex;
ankerl::unordered_dense::map<int, ConsoleUpdateCallback> callback_list;
::Common::unordered_map<int, ConsoleUpdateCallback> callback_list;
int last_callback_key = 0;
// Stores the current status of all console input
+2 -2
View File
@@ -14,7 +14,7 @@
#include <vector>
#include <atomic>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "common/input.h"
@@ -636,7 +636,7 @@ private:
ControllerMotionDevices virtual_motion_devices;
mutable std::mutex callback_mutex;
ankerl::unordered_dense::map<int, ControllerUpdateCallback> callback_list;
::Common::unordered_map<int, ControllerUpdateCallback> callback_list;
int last_callback_key = 0;
// Stores the current status of all controller input
+2 -2
View File
@@ -10,7 +10,7 @@
#include <functional>
#include <memory>
#include <mutex>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/common_types.h"
@@ -205,7 +205,7 @@ private:
mutable std::mutex mutex;
mutable std::mutex callback_mutex;
ankerl::unordered_dense::map<int, InterfaceUpdateCallback> callback_list;
::Common::unordered_map<int, InterfaceUpdateCallback> callback_list;
int last_callback_key = 0;
// Stores the current status of all external device input
+1 -1
View File
@@ -90,7 +90,7 @@ public:
Common::Input::ButtonNames GetUIName(const Common::ParamPackage& params) const override;
private:
ankerl::unordered_dense::map<PadIdentifier, jobject> input_devices;
::Common::unordered_map<PadIdentifier, jobject> input_devices;
/// Returns the correct identifier corresponding to the player index
PadIdentifier GetIdentifier(const std::string& guid, size_t port) const;
+1 -1
View File
@@ -732,7 +732,7 @@ SDLDriver::~SDLDriver() {
std::vector<Common::ParamPackage> SDLDriver::GetInputDevices() const {
std::vector<Common::ParamPackage> devices;
ankerl::unordered_dense::map<int, std::shared_ptr<SDLJoystick>> joycon_pairs;
::Common::unordered_map<int, std::shared_ptr<SDLJoystick>> joycon_pairs;
for (const auto& [key, value] : joystick_map) {
for (const auto& joystick : value) {
if (!joystick->GetSDLJoystick()) {
+2 -2
View File
@@ -9,7 +9,7 @@
#include <atomic>
#include <mutex>
#include <thread>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <SDL3/SDL.h>
@@ -117,7 +117,7 @@ private:
Common::SPSCQueue<VibrationRequest> vibration_queue;
/// Map of GUID of a list of corresponding virtual Joysticks
ankerl::unordered_dense::map<Common::UUID, std::vector<std::shared_ptr<SDLJoystick>>> joystick_map;
::Common::unordered_map<Common::UUID, std::vector<std::shared_ptr<SDLJoystick>>> joystick_map;
std::mutex joystick_map_mutex;
bool start_thread = false;
+7 -7
View File
@@ -8,7 +8,7 @@
#include <functional>
#include <mutex>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "common/input.h"
@@ -270,10 +270,10 @@ protected:
private:
struct ControllerData {
ankerl::unordered_dense::map<int, bool> buttons;
ankerl::unordered_dense::map<int, u8> hat_buttons;
ankerl::unordered_dense::map<int, float> axes;
ankerl::unordered_dense::map<int, BasicMotion> motions;
::Common::unordered_map<int, bool> buttons;
::Common::unordered_map<int, u8> hat_buttons;
::Common::unordered_map<int, float> axes;
::Common::unordered_map<int, BasicMotion> motions;
Common::Input::BatteryLevel battery{};
Common::Input::BodyColorStatus color{};
Common::Input::CameraStatus camera{};
@@ -301,8 +301,8 @@ private:
bool configuring{false};
const std::string input_engine;
int last_callback_key = 0;
ankerl::unordered_dense::map<PadIdentifier, ControllerData> controller_list;
ankerl::unordered_dense::map<int, InputIdentifier> callback_list;
::Common::unordered_map<PadIdentifier, ControllerData> controller_list;
::Common::unordered_map<int, InputIdentifier> callback_list;
MappingCallback mapping_callback;
};
+4 -4
View File
@@ -8,7 +8,7 @@
#include <memory>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
namespace Common {
@@ -56,9 +56,9 @@ enum class InputType { None, Button, Stick, Motion, Touch };
* Given a ParamPackage for a Device returned from `GetInputDevices`, attempt to get the default
* mapping for the device.
*/
using AnalogMapping = ankerl::unordered_dense::map<Settings::NativeAnalog::Values, Common::ParamPackage>;
using ButtonMapping = ankerl::unordered_dense::map<Settings::NativeButton::Values, Common::ParamPackage>;
using MotionMapping = ankerl::unordered_dense::map<Settings::NativeMotion::Values, Common::ParamPackage>;
using AnalogMapping = ::Common::unordered_map<Settings::NativeAnalog::Values, Common::ParamPackage>;
using ButtonMapping = ::Common::unordered_map<Settings::NativeButton::Values, Common::ParamPackage>;
using MotionMapping = ::Common::unordered_map<Settings::NativeMotion::Values, Common::ParamPackage>;
class InputSubsystem {
public:
@@ -9,7 +9,7 @@
#include <array>
#include <sirit/sirit.h>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_set.h"
#include "shader_recompiler/backend/bindings.h"
#include "shader_recompiler/frontend/ir/program.h"
@@ -370,7 +370,7 @@ public:
Id load_const_func_u32x4{};
// Sirit::Id doesn't play nice with *::set<>
ankerl::unordered_dense::set<u32> non_uniform_ids;
::Common::unordered_set<u32> non_uniform_ids;
bool uses_nonuniform_sampled_image{};
bool uses_nonuniform_storage_image{};
+4 -4
View File
@@ -7,7 +7,7 @@
#pragma once
#include <array>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "shader_recompiler/program_header.h"
@@ -126,9 +126,9 @@ protected:
u32 start_address{};
bool is_proprietary_driver{};
public:
ankerl::unordered_dense::map<CbufWordKey, u32, CbufWordKeyHash> cbuf_word_cache;
ankerl::unordered_dense::map<HandleKey, u32, HandleKeyHash> handle_cache;
ankerl::unordered_dense::map<const IR::Inst*, ConstBufferAddr> track_cache;
::Common::unordered_map<CbufWordKey, u32, CbufWordKeyHash> cbuf_word_cache;
::Common::unordered_map<HandleKey, u32, HandleKeyHash> handle_cache;
::Common::unordered_map<const IR::Inst*, ConstBufferAddr> track_cache;
};
} // namespace Shader
@@ -7,7 +7,7 @@
#include <algorithm>
#include <memory>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <utility>
#include <vector>
@@ -390,7 +390,7 @@ private:
std::optional<Node> return_label) {
Statement* const false_stmt{pool.Create(Identity{}, IR::Condition{false}, &root_stmt)};
Tree& root{root_stmt.children};
ankerl::unordered_dense::map<Flow::Block*, Node> local_labels;
::Common::unordered_map<Flow::Block*, Node> local_labels;
local_labels.reserve(function.blocks.size());
for (Flow::Block& block : function.blocks) {
@@ -19,7 +19,7 @@
#include <deque>
#include <map>
#include <span>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <variant>
#include <vector>
@@ -7,7 +7,7 @@
#include <algorithm>
#include <bit>
#include <optional>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <tuple>
#include <limits>
#include <boost/container/small_vector.hpp>
+2 -2
View File
@@ -11,7 +11,7 @@
#include <mutex>
#include <stdexcept>
#include <thread>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include <catch2/catch_test_macros.hpp>
@@ -39,7 +39,7 @@ public:
private:
mutable std::mutex mutex;
ankerl::unordered_dense::map<std::thread::id, u32> ids;
::Common::unordered_map<std::thread::id, u32> ids;
};
class TestControl1 {
+2 -2
View File
@@ -3,7 +3,7 @@
#include <memory>
#include <stdexcept>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <tuple>
#include <vector>
#include <optional>
@@ -65,7 +65,7 @@ public:
}
private:
ankerl::unordered_dense::map<u64, int> page_table;
::Common::unordered_map<u64, int> page_table;
std::vector<std::tuple<DAddr, u64, int>> calls;
size_t update_calls = 0;
};
@@ -16,7 +16,7 @@
#include <span>
#include <vector>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <boost/container/static_vector.hpp>
#include <boost/container/small_vector.hpp>
@@ -11,7 +11,7 @@
#include <deque>
#include <limits>
#include <type_traits>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_set.h"
#include <utility>
#include "common/alignment.h"
@@ -257,7 +257,7 @@ private:
std::array<Manager*, NUM_HIGH_PAGES> top_tier{};
std::deque<std::array<Manager, MANAGER_POOL_SIZE>> manager_pool;
std::deque<Manager*> free_managers;
ankerl::unordered_dense::set<u32> cached_pages;
::Common::unordered_set<u32> cached_pages;
DeviceTracker* device_tracker = nullptr;
};
+3 -3
View File
@@ -10,7 +10,7 @@
#include <limits>
#include <mutex>
#include <optional>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/common_types.h"
@@ -88,14 +88,14 @@ protected:
std::deque<P> channel_storage;
std::deque<size_t> free_channel_ids;
ankerl::unordered_dense::map<s32, size_t> channel_map;
::Common::unordered_map<s32, size_t> channel_map;
std::vector<size_t> active_channel_ids;
struct AddressSpaceRef {
size_t ref_count;
size_t storage_id;
Tegra::MemoryManager* gpu_memory;
};
ankerl::unordered_dense::map<size_t, AddressSpaceRef> address_spaces;
::Common::unordered_map<size_t, AddressSpaceRef> address_spaces;
mutable std::mutex config_mutex;
virtual void OnGPUASRegister([[maybe_unused]] size_t map_id) {}
+2 -2
View File
@@ -8,7 +8,7 @@
#include <memory>
#include <mutex>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "video_core/dma_pusher.h"
@@ -27,7 +27,7 @@ public:
void DeclareChannel(std::shared_ptr<ChannelState> new_channel);
private:
ankerl::unordered_dense::map<s32, std::shared_ptr<ChannelState>> channels;
::Common::unordered_map<s32, std::shared_ptr<ChannelState>> channels;
std::mutex scheduling_guard;
};
+1 -1
View File
@@ -3111,7 +3111,7 @@ public:
void SetHLEReplacementAttributeType(u32 bank, u32 offset, HLEReplacementAttributeType name);
ankerl::unordered_dense::map<u64, HLEReplacementAttributeType> replace_table;
::Common::unordered_map<u64, HLEReplacementAttributeType> replace_table;
static_assert(sizeof(Regs) == Regs::NUM_REGS * sizeof(u32), "Maxwell3D Regs has wrong size");
static_assert(std::is_trivially_copyable_v<Regs>, "Maxwell3D Regs must be trivially copyable");
@@ -7,7 +7,7 @@
#include <array>
#include <cmath>
#include <span>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <bit>
#include <numeric>
#include "common/assert.h"
@@ -924,7 +924,7 @@ public:
};
struct ConverterFactory::ConverterFactoryImpl {
ankerl::unordered_dense::map<RenderTargetFormat, std::unique_ptr<Converter>> converters_cache;
::Common::unordered_map<RenderTargetFormat, std::unique_ptr<Converter>> converters_cache;
};
ConverterFactory::ConverterFactory() {
+1 -1
View File
@@ -333,7 +333,7 @@ struct GPU::Impl {
std::unique_ptr<Core::Frontend::GraphicsContext> cpu_context;
Tegra::Control::Scheduler scheduler;
ankerl::unordered_dense::map<s32, std::shared_ptr<Tegra::Control::ChannelState>> channels;
::Common::unordered_map<s32, std::shared_ptr<Tegra::Control::ChannelState>> channels;
Tegra::Control::ChannelState* current_channel;
s32 bound_channel{-1};
+2 -2
View File
@@ -10,7 +10,7 @@
#include <set>
#include <span>
#include <string>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/common_types.h"
@@ -152,7 +152,7 @@ private:
mutable std::mutex ring_buffer_mutex;
// Memory tracking
ankerl::unordered_dense::map<uintptr_t, MemoryAllocationEntry> memory_allocations;
::Common::unordered_map<uintptr_t, MemoryAllocationEntry> memory_allocations;
mutable std::mutex memory_mutex;
// Statistics
+1 -1
View File
@@ -11,7 +11,7 @@
#include <optional>
#include <string_view>
#include <tuple>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <queue>
#include "common/common_types.h"
+2 -2
View File
@@ -6,7 +6,7 @@
#pragma once
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <unordered_map>
#include <variant>
@@ -118,7 +118,7 @@ private:
}
std::mutex m_mutex{};
ankerl::unordered_dense::map<s32, FrameDevice> m_frame_devices;
::Common::unordered_map<s32, FrameDevice> m_frame_devices;
static constexpr size_t MAX_PRESENT_QUEUE = 100;
static constexpr size_t MAX_DECODE_MAP = 200;
+3 -3
View File
@@ -10,7 +10,7 @@
#include <span>
#include <variant>
#include <vector>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/bit_field.h"
#include "common/common_types.h"
@@ -237,8 +237,8 @@ struct MacroEngine {
AnyCachedMacro program;
u64 hash{};
};
ankerl::unordered_dense::map<u32, CacheInfo> macro_cache;
ankerl::unordered_dense::map<u32, std::vector<u32>> uploaded_macro_code;
::Common::unordered_map<u32, CacheInfo> macro_cache;
::Common::unordered_map<u32, std::vector<u32>> uploaded_macro_code;
bool is_interpreted;
};
+2 -2
View File
@@ -15,7 +15,7 @@
#include <memory>
#include <mutex>
#include <optional>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/assert.h"
@@ -350,7 +350,7 @@ private:
mutable std::recursive_mutex mutex;
ankerl::unordered_dense::map<u64, std::vector<CachedQuery>> cached_queries;
::Common::unordered_map<u64, std::vector<CachedQuery>> cached_queries;
std::array<CounterStream, VideoCore::NumQueryTypes> streams;
+1 -1
View File
@@ -10,7 +10,7 @@
#include <deque>
#include <memory>
#include <mutex>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <utility>
#include "common/assert.h"
@@ -10,7 +10,7 @@
#include <mutex>
#include <optional>
#include <span>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <utility>
#include "common/assert.h"
@@ -155,12 +155,12 @@ protected:
const auto in_range2 = [&](const std::pair<u32, QueryLocation>& pair) {
return in_range(pair.first);
};
std::erase_if(contents, in_range2);
erase_if(contents, in_range2);
}
}
}
using ContentCache = ankerl::unordered_dense::map<u64, ankerl::unordered_dense::map<u32, QueryLocation>>;
using ContentCache = ::Common::unordered_map<u64, ::Common::unordered_map<u32, QueryLocation>>;
void InvalidateQuery(QueryLocation location);
bool IsQueryDirty(QueryLocation location);
@@ -168,7 +168,7 @@ protected:
void RequestGuestHostSync();
void UnregisterPending();
ankerl::unordered_dense::map<u64, ankerl::unordered_dense::map<u32, QueryLocation>> cached_queries;
::Common::unordered_map<u64, ::Common::unordered_map<u32, QueryLocation>> cached_queries;
std::mutex cache_mutex;
struct QueryCacheBaseImpl;
@@ -8,7 +8,7 @@
#include <array>
#include <span>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "video_core/buffer_cache/buffer_cache_base.h"
@@ -242,7 +242,7 @@ private:
u32 index_buffer_offset = 0;
u64 device_access_memory;
ankerl::unordered_dense::map<GPUVAddr, OGLTransformFeedback> tfb_objects;
::Common::unordered_map<GPUVAddr, OGLTransformFeedback> tfb_objects;
};
struct BufferCacheParams {
@@ -7,7 +7,7 @@
#pragma once
#include <filesystem>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include "common/common_types.h"
#include "common/thread_worker.h"
@@ -81,8 +81,8 @@ private:
GraphicsPipeline* current_pipeline{};
ShaderContext::ShaderPools main_pools;
ankerl::unordered_dense::map<GraphicsPipelineKey, std::unique_ptr<GraphicsPipeline>> graphics_cache;
ankerl::unordered_dense::map<ComputePipelineKey, std::unique_ptr<ComputePipeline>> compute_cache;
::Common::unordered_map<GraphicsPipelineKey, std::unique_ptr<GraphicsPipeline>> graphics_cache;
::Common::unordered_map<ComputePipelineKey, std::unique_ptr<ComputePipeline>> compute_cache;
Shader::Profile profile;
Shader::HostTranslateInfo host_info;
@@ -159,7 +159,7 @@ private:
UtilShaders util_shaders;
FormatConversionPass format_conversion_pass;
std::array<ankerl::unordered_dense::map<GLenum, FormatProperties>, 3> format_properties;
std::array<::Common::unordered_map<GLenum, FormatProperties>, 3> format_properties;
bool has_broken_texture_view_formats = false;
OGLTexture null_image_1d_array;
@@ -13,7 +13,7 @@
#include <filesystem>
#include <memory>
#include <type_traits>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <vector>
#include "common/common_types.h"
@@ -163,8 +163,8 @@ private:
GraphicsPipelineCacheKey graphics_key{};
GraphicsPipeline* current_pipeline{};
ankerl::unordered_dense::map<ComputePipelineCacheKey, std::unique_ptr<ComputePipeline>> compute_cache;
ankerl::unordered_dense::map<GraphicsPipelineCacheKey, std::unique_ptr<GraphicsPipeline>> graphics_cache;
::Common::unordered_map<ComputePipelineCacheKey, std::unique_ptr<ComputePipeline>> compute_cache;
::Common::unordered_map<GraphicsPipelineCacheKey, std::unique_ptr<GraphicsPipeline>> graphics_cache;
ShaderPools main_pools;
@@ -10,7 +10,7 @@
#include <memory>
#include <span>
#include <type_traits>
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <utility>
#include <vector>
#include "video_core/renderer_vulkan/vk_texture_cache.h"
@@ -246,7 +246,7 @@ public:
sync_values_stash.emplace_back();
std::vector<HostSyncValues>* sync_values = &sync_values_stash.back();
sync_values->reserve(num_slots_used);
ankerl::unordered_dense::map<size_t, std::pair<size_t, size_t>> offsets;
::Common::unordered_map<size_t, std::pair<size_t, size_t>> offsets;
resolve_buffers.clear();
size_t resolve_buffer_index = ObtainBuffer<true>(num_slots_used);
resolve_buffers.push_back(resolve_buffer_index);
@@ -428,7 +428,7 @@ private:
template <bool is_ordered, typename Func>
void ApplyBanksWideOp(std::vector<size_t>& queries, Func&& func) {
std::conditional_t<is_ordered, std::map<size_t, std::pair<size_t, size_t>>,
ankerl::unordered_dense::map<size_t, std::pair<size_t, size_t>>>
::Common::unordered_map<size_t, std::pair<size_t, size_t>>>
indexer;
for (auto q : queries) {
auto* query = GetQuery(q);
@@ -757,7 +757,7 @@ public:
void SyncWrites() override {
CloseCounter();
ankerl::unordered_dense::map<size_t, std::vector<HostSyncValues>> sync_values_stash;
::Common::unordered_map<size_t, std::vector<HostSyncValues>> sync_values_stash;
for (auto q : pending_sync) {
auto* query = GetQuery(q);
if (True(query->flags & VideoCommon::QueryFlagBits::IsRewritten)) {
@@ -4,7 +4,7 @@
// SPDX-FileCopyrightText: Copyright 2021 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#include <ankerl/unordered_dense.h>
#include "common/container/unordered_map.h"
#include <boost/container/static_vector.hpp>

Some files were not shown because too many files have changed in this diff Show More