Skip to content

Commit 9da4c9b

Browse files
authored
Make Identifier usable from associative containers (#27)
1 parent fba9f76 commit 9da4c9b

File tree

2 files changed

+28
-0
lines changed

2 files changed

+28
-0
lines changed

modules/juce_core/text/juce_Identifier.h

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,3 +147,19 @@ class JUCE_API Identifier final
147147
};
148148

149149
} // namespace juce
150+
151+
#ifndef DOXYGEN
152+
namespace std
153+
{
154+
155+
template <>
156+
struct hash<juce::Identifier>
157+
{
158+
size_t operator() (const juce::Identifier& identifier) const noexcept
159+
{
160+
return static_cast<size_t> (*reinterpret_cast<uintptr_t*> (identifier.getCharPointer().getAddress()));
161+
}
162+
};
163+
164+
} // namespace std
165+
#endif

tests/juce_core/juce_Identifier.cpp

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323

2424
#include <juce_core/juce_core.h>
2525

26+
#include <unordered_map>
27+
2628
using namespace juce;
2729

2830
TEST (Identifier, DefaultConstructorCreatesNullIdentifier)
@@ -110,3 +112,13 @@ TEST (Identifier, ConversionToCharPointer)
110112
auto ptr = id.getCharPointer();
111113
EXPECT_STREQ (ptr.getAddress(), "pointer");
112114
}
115+
116+
TEST (Identifier, UseInAssociativeContainers)
117+
{
118+
std::unordered_map<Identifier, Identifier> ids;
119+
ids[Identifier("test1")] = Identifier("test2");
120+
121+
ASSERT_TRUE(ids.find(Identifier("test1")) != ids.end());
122+
EXPECT_EQ(ids.find(Identifier("test1"))->first, Identifier("test1"));
123+
EXPECT_EQ(ids.find(Identifier("test1"))->second, Identifier("test2"));
124+
}

0 commit comments

Comments
 (0)