#nullable enable using System.Collections; using T3.Core.Animation; namespace T3.Editor.Gui.Interaction.WithCurves; /// /// A set of selected keyframe s that bumps /// on every mutation. Downstream UI caches can compare the counter instead of rehashing the set. /// Mirrors the HashSet-style API used across the codebase so call sites stay unchanged. /// internal sealed class VersionedKeyframeSet : IEnumerable { public int ChangeCounter { get; private set; } public int Count => _set.Count; public bool Contains(VDefinition v) => _set.Contains(v); public bool Add(VDefinition v) { if (!_set.Add(v)) return false; ChangeCounter++; return true; } public bool Remove(VDefinition v) { if (!_set.Remove(v)) return false; ChangeCounter++; return true; } public void Clear() { if (_set.Count == 0) return; _set.Clear(); ChangeCounter++; } public void UnionWith(IEnumerable other) { var before = _set.Count; _set.UnionWith(other); if (_set.Count != before) ChangeCounter++; } public void ExceptWith(IEnumerable other) { var before = _set.Count; _set.ExceptWith(other); if (_set.Count != before) ChangeCounter++; } public HashSet.Enumerator GetEnumerator() => _set.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _set.GetEnumerator(); IEnumerator IEnumerable.GetEnumerator() => _set.GetEnumerator(); private readonly HashSet _set = []; }