diff --git a/renderdoc/api/replay/rdcstr.h b/renderdoc/api/replay/rdcstr.h index 0df2474b5..05fef986d 100644 --- a/renderdoc/api/replay/rdcstr.h +++ b/renderdoc/api/replay/rdcstr.h @@ -1134,3 +1134,19 @@ public: operator QVariant() const { return QVariant(QString::fromUtf8(c_str(), (int32_t)size())); } #endif }; + +// add a std::hash overload so rdcstr can be used in hashmaps +#ifdef RENDERDOC_EXPORTS + +// from string_utils.h +uint32_t strhash(const char *str); + +namespace std +{ +template <> +struct hash +{ + std::size_t operator()(const rdcstr &s) const { return strhash(s.c_str()); } +}; +} +#endif diff --git a/renderdoc/strings/string_utils.cpp b/renderdoc/strings/string_utils.cpp index c01354813..419360a23 100644 --- a/renderdoc/strings/string_utils.cpp +++ b/renderdoc/strings/string_utils.cpp @@ -48,6 +48,11 @@ uint32_t strhash(const char *str, uint32_t seed) return hash; } +uint32_t strhash(const char *str) +{ + return strhash(str, 5381); +} + rdcstr strlower(const rdcstr &str) { rdcstr newstr(str); diff --git a/renderdoc/strings/string_utils.h b/renderdoc/strings/string_utils.h index cb1c29419..fd79292cf 100644 --- a/renderdoc/strings/string_utils.h +++ b/renderdoc/strings/string_utils.h @@ -31,7 +31,8 @@ rdcstr strlower(const rdcstr &str); rdcstr strupper(const rdcstr &str); -uint32_t strhash(const char *str, uint32_t existingHash = 5381); +uint32_t strhash(const char *str, uint32_t existingHash); +uint32_t strhash(const char *str); rdcstr get_basename(const rdcstr &path); rdcstr get_dirname(const rdcstr &path);