using System; using System.Collections; using System.Collections.Generic; #nullable enable namespace Content.Shared.Utility { // It's a Remie Queue now. /// /// Simple helper struct for "iterate collection and have a queue of things to remove when you're done", /// to avoid concurrent iteration/modification. /// public struct RemQueue { public List? List; public void Add(T t) { List ??= new(); List.Add(t); } public Enumerator GetEnumerator() { return new(List); } public struct Enumerator : IEnumerator { private readonly bool _filled; private List.Enumerator _enumerator; public Enumerator(List? list) { if (list == null) { _filled = false; _enumerator = default; } else { _filled = true; _enumerator = list.GetEnumerator(); } } public bool MoveNext() { if (!_filled) { return false; } return _enumerator.MoveNext(); } void IEnumerator.Reset() { if (_filled) { ((IEnumerator) _enumerator).Reset(); } } public T Current => _enumerator.Current; object? IEnumerator.Current => Current; void IDisposable.Dispose() { } } } }