using System; using System.Collections.Generic; namespace MoonTools.ECS { internal class MessageDepot { private Dictionary storages = new Dictionary(); private MessageStorage Lookup() where TMessage : unmanaged { 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 : unmanaged { Lookup().Add(message); } public void Add(int entityID, in TMessage message) where TMessage : unmanaged { Lookup().Add(entityID, message); } public bool Some() where TMessage : unmanaged { return Lookup().Some(); } public ReadOnlySpan All() where TMessage : unmanaged { return Lookup().All(); } public TMessage First() where TMessage : unmanaged { return Lookup().First(); } public ReverseSpanEnumerator WithEntity(int entityID) where TMessage : unmanaged { return Lookup().WithEntity(entityID); } public ref readonly TMessage FirstWithEntity(int entityID) where TMessage : unmanaged { return ref Lookup().FirstWithEntity(entityID); } public bool SomeWithEntity(int entityID) where TMessage : unmanaged { return Lookup().SomeWithEntity(entityID); } public void Clear() { foreach (var storage in storages.Values) { storage.Clear(); } } } }