diff --git a/AK/CircularBuffer.h b/AK/CircularBuffer.h index 68e0161ae0..cf10e5a78c 100644 --- a/AK/CircularBuffer.h +++ b/AK/CircularBuffer.h @@ -95,7 +95,7 @@ private: SearchableCircularBuffer(ByteBuffer); - HashMap m_hash_location_map; + HashMap> m_hash_location_map; HashMap m_location_chain_map; ErrorOr insert_location_hash(ReadonlyBytes value, size_t raw_offset); diff --git a/AK/Traits.h b/AK/Traits.h index da8fa83437..dc60b21e7a 100644 --- a/AK/Traits.h +++ b/AK/Traits.h @@ -83,9 +83,21 @@ struct Traits : public DefaultTraits { static constexpr bool is_trivially_serializable() { return Traits>::is_trivially_serializable(); } }; +template +struct IdentityHashTraits : public Traits { + static constexpr unsigned hash(T value) + { + if constexpr (sizeof(T) <= 4) + return static_cast(value); + else + return static_cast(value ^ (value >> 32)); + } +}; + } #if USING_AK_GLOBALLY using AK::DefaultTraits; +using AK::IdentityHashTraits; using AK::Traits; #endif diff --git a/Libraries/LibRegex/RegexMatcher.cpp b/Libraries/LibRegex/RegexMatcher.cpp index e08578a049..f49c892eff 100644 --- a/Libraries/LibRegex/RegexMatcher.cpp +++ b/Libraries/LibRegex/RegexMatcher.cpp @@ -514,13 +514,6 @@ private: Node* m_last { nullptr }; }; -struct SufficientlyUniformValueTraits : DefaultTraits { - static constexpr unsigned hash(u64 value) - { - return (value >> 32) ^ value; - } -}; - template Matcher::ExecuteResult Matcher::execute(MatchInput const& input, MatchState& state, size_t& operations) const { @@ -566,7 +559,7 @@ Matcher::ExecuteResult Matcher::execute(MatchInput const& input, } BumpAllocatedLinkedList states_to_try_next; - HashTable seen_state_hashes; + HashTable> seen_state_hashes; #if REGEX_DEBUG size_t recursion_level = 0; #endif diff --git a/Meta/Lagom/Tools/IPCMagicLinter/main.cpp b/Meta/Lagom/Tools/IPCMagicLinter/main.cpp index 94f1051f55..233f3b7b76 100644 --- a/Meta/Lagom/Tools/IPCMagicLinter/main.cpp +++ b/Meta/Lagom/Tools/IPCMagicLinter/main.cpp @@ -23,7 +23,7 @@ ErrorOr ladybird_main(Main::Arguments arguments) } // Read files, compute their hashes, ignore collisions for now. - HashMap> inverse_hashes; + HashMap, IdentityHashTraits> inverse_hashes; bool had_errors = false; for (auto filename : arguments.strings.slice(1)) {