using System.Collections.Generic; using Rokojori.Extensions; namespace Rokojori { public class QueueList { List _data = new List(); List _queuedInsertions = new List(); List _queuedRemovals = new List(); public void QueueInsert( T t ) { _queuedInsertions.Add( t ); } public void QueueRemoval( T t ) { _queuedRemovals.Add( t ); } public void IterateAndResolve( System.Action callback ) { ResolveRemovalsQueue(); ResolveInsertionQueue(); _data.ForEach( t => callback( t ) ); ResolveRemovalsQueue(); } protected void ResolveInsertionQueue() { if ( _queuedInsertions.Count == 0 ) { return; } _data.AddRange( _queuedInsertions ); _queuedInsertions.Clear(); } protected void ResolveRemovalsQueue() { if ( _queuedRemovals.Count == 0 ) { return; } ListExtensions.RemoveList( _data, _queuedRemovals ); _queuedRemovals.Clear(); } } }