فهرست منبع

Work around libstdc++'s lack of support for std::hash on enums

Yuri Kunde Schlesner 11 سال پیش
والد
کامیت
666f6deb47
1فایلهای تغییر یافته به همراه15 افزوده شده و 0 حذف شده
  1. 15 0
      src/core/hle/service/fs/archive.cpp

+ 15 - 0
src/core/hle/service/fs/archive.cpp

@@ -16,6 +16,21 @@
 #include "core/hle/kernel/session.h"
 #include "core/hle/result.h"
 
+// Specializes std::hash for ArchiveIdCode, so that we can use it in std::unordered_map.
+// Workaroung for libstdc++ bug: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60970
+namespace std {
+    template <>
+    struct hash<Service::FS::ArchiveIdCode> {
+        typedef Service::FS::ArchiveIdCode argument_type;
+        typedef std::size_t result_type;
+
+        result_type operator()(const argument_type& id_code) const {
+            typedef std::underlying_type<argument_type>::type Type;
+            return std::hash<Type>()(static_cast<Type>(id_code));
+        }
+    };
+}
+
 namespace Service {
 namespace FS {