AK: Add ptr_hash to use int_hash or u64_hash depending on pointer size

This commit is contained in:
joshua stein 2020-02-17 13:19:28 -06:00 committed by Andreas Kling
parent 32e6453b0b
commit 7e6ac544f7
3 changed files with 10 additions and 2 deletions

View file

@ -50,3 +50,11 @@ inline unsigned u64_hash(u64 key)
u32 last = key >> 32;
return pair_int_hash(first, last);
}
inline unsigned ptr_hash(uintptr_t ptr)
{
if constexpr(sizeof(ptr) == 8)
return u64_hash((u64)ptr);
else
return int_hash((u32)ptr);
}

View file

@ -204,7 +204,7 @@ inline void swap(OwnPtr<T>& a, OwnPtr<U>& b)
template<typename T>
struct Traits<OwnPtr<T>> : public GenericTraits<OwnPtr<T>> {
using PeekType = const T*;
static unsigned hash(const OwnPtr<T>& p) { return int_hash((u32)p.ptr()); }
static unsigned hash(const OwnPtr<T>& p) { return ptr_hash(p.ptr()); }
static bool equals(const OwnPtr<T>& a, const OwnPtr<T>& b) { return a.ptr() == b.ptr(); }
};

View file

@ -278,7 +278,7 @@ inline const LogStream& operator<<(const LogStream& stream, const RefPtr<T>& val
template<typename T>
struct Traits<RefPtr<T>> : public GenericTraits<RefPtr<T>> {
using PeekType = const T*;
static unsigned hash(const RefPtr<T>& p) { return int_hash((u32)p.ptr()); }
static unsigned hash(const RefPtr<T>& p) { return ptr_hash(p.ptr()); }
static bool equals(const RefPtr<T>& a, const RefPtr<T>& b) { return a.ptr() == b.ptr(); }
};