3 using System.Collections.Generic;
6 namespace SiliconStudio.Assets.Analysis
11 internal class AssetFileChangedEventSquasher
13 private static readonly ComparerPackageAndLocation ComparerPackageAndLocationInstance =
new ComparerPackageAndLocation();
14 private readonly Dictionary<AssetFileChangedEvent, AssetFileChangedEvent> filteredAssetFileChangedEvents =
new Dictionary<AssetFileChangedEvent, AssetFileChangedEvent>(ComparerPackageAndLocationInstance);
24 if (currentAssetFileChangedEvents.Count == 0)
25 return Enumerable.Empty<AssetFileChangedEvent>();
35 filteredAssetFileChangedEvents.Clear();
36 var eventsCopy =
new List<AssetFileChangedEvent>();
37 foreach (var currentAssetEvent
in currentAssetFileChangedEvents)
39 AssetFileChangedEvent previousEvent;
40 if (filteredAssetFileChangedEvents.TryGetValue(currentAssetEvent, out previousEvent))
42 var sourceEventTypes = (previousEvent.ChangeType & AssetFileChangedType.SourceEventMask);
48 previousEvent.ChangeType = currentAssetEvent.ChangeType;
53 previousEvent.ChangeType |= sourceEventTypes;
65 previousEvent.ChangeType |= currentAssetEvent.ChangeType;
70 eventsCopy.Add(currentAssetEvent);
71 filteredAssetFileChangedEvents.Add(currentAssetEvent, currentAssetEvent);
75 filteredAssetFileChangedEvents.Clear();
80 private class ComparerPackageAndLocation : IEqualityComparer<AssetFileChangedEvent>
82 public bool Equals(AssetFileChangedEvent x, AssetFileChangedEvent
y)
84 if (ReferenceEquals(x, y))
86 if (ReferenceEquals(x, null))
89 return x.Package == y.Package && x.AssetLocation == y.AssetLocation;
92 public int GetHashCode(AssetFileChangedEvent obj)
94 var hashCode = (obj.Package != null ? obj.Package.GetHashCode() : 0);
95 hashCode = (hashCode * 397) ^ (obj.AssetLocation != null ? obj.AssetLocation.GetHashCode() : 0);
_In_ size_t _In_ DXGI_FORMAT _In_ size_t _In_ float size_t y
AssetFileChangedType
Type of a change event for an asset.