using Vanguard.Rules.Engine;
namespace Vanguard.Rules.Replay;
/// FNV-1a по тексту событий. Не криптография, а быстрая проверка расхождений.
public static class EventHasher
{
private const ulong Offset = 14695981039346656037UL;
private const ulong Prime = 1099511628211UL;
public static string Hash(IEnumerable events)
{
unchecked
{
var hash = Offset;
foreach (var gameEvent in events)
{
foreach (var ch in gameEvent.ToString() ?? string.Empty)
{
hash ^= ch;
hash *= Prime;
}
hash ^= '\n';
hash *= Prime;
}
return hash.ToString("x16");
}
}
}