using System.Collections.Generic; namespace Encompass { internal abstract class Replayer { public abstract void Replay(ComponentStore store); public abstract void MarkRemoval(int entityID); public abstract void UnMarkRemoval(int entityID); public abstract void Clear(); } internal class Replayer : Replayer where TComponent : unmanaged { private readonly ComponentDeltaStore _deltaStore; private readonly HashSet _removals = new HashSet(); public Replayer(ComponentDeltaStore componentStore) { _deltaStore = componentStore; } public override void Replay(ComponentStore store) { foreach (var (component, entityID) in _deltaStore.All()) { store.Set(entityID, component); } foreach (var entityID in _removals) { store.ForceRemove(entityID); } } public override void Clear() { _removals.Clear(); } public override void MarkRemoval(int entityID) { _removals.Add(entityID); } public override void UnMarkRemoval(int entityID) { _removals.Remove(entityID); } } }