mirror of
https://github.com/llvm/llvm-project.git
synced 2025-04-26 07:16:07 +00:00
[ORC] Enable DenseMap<SymbolStringPtr, T>::find_as(NonOwningSymbolStringPtr).
For maps of SymbolStringPtrs to values, enables lookup using NonOwningSymbolStringPtr keys.
This commit is contained in:
parent
25ecfbf892
commit
6df32b8db1
@ -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;
|
||||
}
|
||||
};
|
||||
|
@ -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) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user