return !(*this == Other);
}
+ bool operator<(const SymbolStringPtr &Other) const {
+ return S->getValue() < Other.S->getValue();
+ }
+
private:
SymbolStringPtr(SymbolStringPool::PoolMapEntry *S)
SymbolStringPool::PoolMapEntry *S = nullptr;
};
-SymbolStringPtr SymbolStringPool::intern(StringRef S) {
+inline SymbolStringPtr SymbolStringPool::intern(StringRef S) {
std::lock_guard<std::mutex> Lock(PoolMutex);
auto I = Pool.find(S);
if (I != Pool.end())
return SymbolStringPtr(&*I);
}
-void SymbolStringPool::clearDeadEntries() {
+inline void SymbolStringPool::clearDeadEntries() {
std::lock_guard<std::mutex> Lock(PoolMutex);
for (auto I = Pool.begin(), E = Pool.end(); I != E;) {
auto Tmp = std::next(I);
}
}
-bool SymbolStringPool::empty() const {
+inline bool SymbolStringPool::empty() const {
std::lock_guard<std::mutex> Lock(PoolMutex);
return Pool.empty();
}
} // end namespace orc
-
} // end namespace llvm
#endif // LLVM_EXECUTIONENGINE_ORC_SYMBOLSTRINGPOOL_H
namespace {
-TEST(SymbolStringPool, UniquingAndEquality) {
+TEST(SymbolStringPool, UniquingAndComparisons) {
SymbolStringPool SP;
auto P1 = SP.intern("hello");
EXPECT_EQ(P1, P2) << "Failed to unique entries";
EXPECT_NE(P1, P3) << "Inequal pooled symbol strings comparing equal";
+
+ // We want to test that less-than comparison of SymbolStringPtrs compiles,
+ // however we can't test the actual result as this is a pointer comparison and
+ // SymbolStringPtr doesn't expose the underlying address of the string.
+ (void)(P1 < P3);
}
TEST(SymbolStringPool, ClearDeadEntries) {