AK: Add a u64 Trait type

This allows u64s to be used in HashMaps.
This commit is contained in:
Shannon Booth 2020-01-03 19:56:33 +13:00 committed by Andreas Kling
parent 9e22b83343
commit d5fea1b235
Notes: sideshowbarker 2024-07-19 10:21:27 +09:00
2 changed files with 14 additions and 0 deletions

View file

@ -17,3 +17,10 @@ inline unsigned pair_int_hash(u32 key1, u32 key2)
{
return int_hash((int_hash(key1) * 209) ^ (int_hash(key2 * 413)));
}
inline unsigned u64_hash(u64 key)
{
u32 first = key & 0xFFFFFFFF;
u32 last = key >> 32;
return pair_int_hash(first, last);
}

View file

@ -37,6 +37,13 @@ struct Traits<u16> : public GenericTraits<u16> {
static void dump(u16 u) { kprintf("%u", u); }
};
template<>
struct Traits<u64> : public GenericTraits<u64> {
static constexpr bool is_trivial() { return true; }
static unsigned hash(u64 u) { return u64_hash(u); }
static void dump(u64 u) { kprintf("%u", (unsigned)u); } // FIXME: Implement unsigned long long printf specifier, instead of this sadness :(
};
template<>
struct Traits<char> : public GenericTraits<char> {
static constexpr bool is_trivial() { return true; }