using System.Runtime.CompilerServices; using Svelto.DataStructures; namespace Svelto.ECS { class GenericEntityStreamConsumerFactory : IEntityStreamConsumerFactory { public GenericEntityStreamConsumerFactory(EnginesRoot weakReference) { _enginesRoot = new WeakReference(weakReference); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public Consumer GenerateConsumer(string name, uint capacity) where T : unmanaged, IEntityComponent { return _enginesRoot.Target.GenerateConsumer(name, capacity); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public Consumer GenerateConsumer(ExclusiveGroupStruct @group, string name, uint capacity) where T : unmanaged, IEntityComponent { return _enginesRoot.Target.GenerateConsumer(group, name, capacity); } //enginesRoot is a weakreference because GenericEntityStreamConsumerFactory can be injected inside //engines of other enginesRoot readonly WeakReference _enginesRoot; } public interface IEntityStreamConsumerFactory { Consumer GenerateConsumer(string name, uint capacity) where T : unmanaged, IEntityComponent; Consumer GenerateConsumer(ExclusiveGroupStruct @group, string name, uint capacity) where T : unmanaged, IEntityComponent; } }