// Copyright Epic Games, Inc. All Rights Reserved. using System; using System.Collections.Generic; using System.Linq; namespace Gauntlet { /// /// The class defines custom equality comparison logic for objects. /// Equality refers to the occurrence of a set of expected files/folders in a set of actual files/folders. /// public sealed class ContentFolderEqualityComparer : IEqualityComparer { public bool Equals(ContentFolder x, ContentFolder y) { if (ReferenceEquals(x, y)) { return true; } if (ReferenceEquals(x, null) || ReferenceEquals(y, null)) { return false; } if (x.GetType() != y.GetType()) { return false; } return x.Name.Equals(y.Name, StringComparison.InvariantCultureIgnoreCase) && !x.Files.Except(y.Files, StringComparer.InvariantCultureIgnoreCase).Any() && x.SubFolders.All(s => y.SubFolders.Any(subY => Equals(s, subY))); } public int GetHashCode(ContentFolder obj) { return 0; // The same hash for two objects indicates a hash collision, the Equals will be called } } }