// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Diagnostics; using EpicGames.Core; namespace EpicGames.Perforce.Managed { /// /// Unique identifier for the content of a file /// [DebuggerDisplay("{Digest} ({Type})")] public class FileContentId { /// /// MD5 digest of the file /// public Md5Hash Digest { get; } /// /// Type of the file /// public Utf8String Type { get; } /// /// Constructor /// public FileContentId(Md5Hash digest, Utf8String type) { Digest = digest; Type = type; } /// public override bool Equals(object? other) { return (other is FileContentId otherFile) && Digest == otherFile.Digest && Type == otherFile.Type; } /// public override int GetHashCode() { return HashCode.Combine(Digest.GetHashCode(), Type.GetHashCode()); } } static class FileContentIdExtensions { public static FileContentId ReadFileContentId(this MemoryReader reader) { Md5Hash digest = reader.ReadMd5Hash(); Utf8String type = reader.ReadNullTerminatedUtf8String(); return new FileContentId(digest, type); } public static void WriteFileContentId(this MemoryWriter writer, FileContentId fileContentId) { writer.WriteMd5Hash(fileContentId.Digest); writer.WriteNullTerminatedUtf8String(fileContentId.Type); } public static int GetSerializedSize(this FileContentId fileContentId) { return Digest.Length + fileContentId.Type.GetNullTerminatedSize(); } } }