| File: System\Reflection\Internal\Utilities\Hash.cs | Web Access |
| Project: src\runtime\src\libraries\System.Reflection.Metadata\src\System.Reflection.Metadata.csproj (System.Reflection.Metadata) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections.Immutable; namespace System.Reflection.Internal { internal static class Hash { internal static int Combine(int newKey, int currentKey) { return unchecked((currentKey * (int)0xA5555529) + newKey); } internal static int Combine(uint newKey, int currentKey) { return unchecked((currentKey * (int)0xA5555529) + (int)newKey); } /// <summary> /// The offset bias value used in the FNV-1a algorithm /// See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function /// </summary> internal const int FnvOffsetBias = unchecked((int)2166136261); /// <summary> /// The generative factor used in the FNV-1a algorithm /// See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function /// </summary> internal const int FnvPrime = 16777619; /// <summary> /// Compute the FNV-1a hash of a sequence of bytes /// See http://en.wikipedia.org/wiki/Fowler%E2%80%93Noll%E2%80%93Vo_hash_function /// </summary> /// <param name="data">The sequence of bytes</param> /// <returns>The FNV-1a hash of <paramref name="data"/></returns> internal static int GetFNVHashCode(ReadOnlySpan<byte> data) { int hashCode = Hash.FnvOffsetBias; for (int i = 0; i < data.Length; i++) { hashCode = unchecked((hashCode ^ data[i]) * Hash.FnvPrime); } return hashCode; } } }