using System; using System.Collections.Generic; namespace MoonTools.ECS { internal class MessageDepot { private Dictionary storages = new Dictionary(); private MessageStorage Lookup() where TMessage : struct { if (!storages.ContainsKey(typeof(TMessage))) { storages.Add(typeof(TMessage), new MessageStorage()); } return storages[typeof(TMessage)] as MessageStorage; } public void Add(in TMessage message) where TMessage : struct { Lookup().Add(message); } public bool Some() where TMessage : struct { return Lookup().Some(); } public ReadOnlySpan All() where TMessage : struct { return Lookup().All(); } public TMessage First() where TMessage : struct { return Lookup().First(); } public IEnumerable WithEntity(int entityID) where TMessage : struct, IHasEntity { return Lookup().WithEntity(entityID); } public ref readonly TMessage FirstWithEntity(int entityID) where TMessage : struct, IHasEntity { return ref Lookup().FirstWithEntity(entityID); } public bool SomeWithEntity(int entityID) where TMessage : struct, IHasEntity { return Lookup().SomeWithEntity(entityID); } public void Clear() { foreach (var storage in storages.Values) { storage.Clear(); } } } }