[ORC] Enable DenseMap<SymbolStringPtr, T>::find_as(NonOwningSymbolStringPtr).

For maps of SymbolStringPtrs to values, enables lookup using
NonOwningSymbolStringPtr keys.
This commit is contained in:
Lang Hames 2023-01-31 17:46:27 -08:00
parent 25ecfbf892
commit 6df32b8db1
2 changed files with 13 additions and 6 deletions

View File

@ -68,6 +68,8 @@ private:
/// from nullptr to enable comparison with these values.
class SymbolStringPtrBase {
friend class SymbolStringPool;
friend struct DenseMapInfo<SymbolStringPtr>;
friend struct DenseMapInfo<NonOwningSymbolStringPtr>;
public:
SymbolStringPtrBase() = default;
@ -279,12 +281,12 @@ struct DenseMapInfo<orc::SymbolStringPtr> {
return orc::SymbolStringPtr::getTombstoneVal();
}
static unsigned getHashValue(const orc::SymbolStringPtr &V) {
static unsigned getHashValue(const orc::SymbolStringPtrBase &V) {
return DenseMapInfo<orc::SymbolStringPtr::PoolEntryPtr>::getHashValue(V.S);
}
static bool isEqual(const orc::SymbolStringPtr &LHS,
const orc::SymbolStringPtr &RHS) {
static bool isEqual(const orc::SymbolStringPtrBase &LHS,
const orc::SymbolStringPtrBase &RHS) {
return LHS.S == RHS.S;
}
};
@ -299,13 +301,13 @@ template <> struct DenseMapInfo<orc::NonOwningSymbolStringPtr> {
return orc::NonOwningSymbolStringPtr::getTombstoneVal();
}
static unsigned getHashValue(const orc::NonOwningSymbolStringPtr &V) {
static unsigned getHashValue(const orc::SymbolStringPtrBase &V) {
return DenseMapInfo<
orc::NonOwningSymbolStringPtr::PoolEntryPtr>::getHashValue(V.S);
}
static bool isEqual(const orc::NonOwningSymbolStringPtr &LHS,
const orc::NonOwningSymbolStringPtr &RHS) {
static bool isEqual(const orc::SymbolStringPtrBase &LHS,
const orc::SymbolStringPtrBase &RHS) {
return LHS.S == RHS.S;
}
};

View File

@ -93,6 +93,11 @@ TEST_F(SymbolStringPoolTest, NonOwningPointerBasics) {
SymbolStringPtr S(ANP1); // Construct SymbolStringPtr from non-owning.
EXPECT_EQ(S, A);
DenseMap<SymbolStringPtr, int> M;
M[A] = 42;
EXPECT_EQ(M.find_as(ANP1)->second, 42);
EXPECT_EQ(M.find_as(BNP), M.end());
}
TEST_F(SymbolStringPoolTest, NonOwningPointerRefCounts) {