#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 = [];
}