diff options
-rw-r--r-- | source/blender/blenlib/BLI_hash.hh | 10 | ||||
-rw-r--r-- | tests/gtests/blenlib/BLI_map_test.cc | 9 |
2 files changed, 19 insertions, 0 deletions
diff --git a/source/blender/blenlib/BLI_hash.hh b/source/blender/blenlib/BLI_hash.hh index 57d5f7f9d8a..de81abd5d7a 100644 --- a/source/blender/blenlib/BLI_hash.hh +++ b/source/blender/blenlib/BLI_hash.hh @@ -97,6 +97,16 @@ template<typename T> struct DefaultHash { } }; +/** + * Use the same hash function for const and non const variants of a type. + */ +template<typename T> struct DefaultHash<const T> { + uint32_t operator()(const T &value) const + { + return DefaultHash<T>{}(value); + } +}; + #define TRIVIAL_DEFAULT_INT_HASH(TYPE) \ template<> struct DefaultHash<TYPE> { \ uint32_t operator()(TYPE value) const \ diff --git a/tests/gtests/blenlib/BLI_map_test.cc b/tests/gtests/blenlib/BLI_map_test.cc index 623055d5032..96e9879abe7 100644 --- a/tests/gtests/blenlib/BLI_map_test.cc +++ b/tests/gtests/blenlib/BLI_map_test.cc @@ -449,6 +449,15 @@ TEST(map, PointerKeys) EXPECT_TRUE(map.is_empty()); } +TEST(map, ConstKeysAndValues) +{ + Map<const std::string, const std::string> map; + map.reserve(10); + map.add("45", "643"); + EXPECT_TRUE(map.contains("45")); + EXPECT_FALSE(map.contains("54")); +} + /** * Set this to 1 to activate the benchmark. It is disabled by default, because it prints a lot. */ |