using System; using System.Runtime.CompilerServices; using Svelto.DataStructures; using Svelto.ECS.Hybrid; namespace Svelto.ECS { public static class EntityCollectionExtension { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer, out int count) where T1 : unmanaged, IEntityComponent { buffer = ec._nativedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer1, out NB buffer2, out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent { buffer1 = ec.buffer1._nativedBuffer; buffer2 = ec.buffer2._nativedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer1, out NB buffer2, out NB buffer3 , out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent where T3 : unmanaged, IEntityComponent { buffer1 = ec.buffer1._nativedBuffer; buffer2 = ec.buffer2._nativedBuffer; buffer3 = ec.buffer3._nativedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer1, out NB buffer2, out NB buffer3 , out NB buffer4, out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent where T3 : unmanaged, IEntityComponent where T4 : unmanaged, IEntityComponent { buffer1 = ec.Item1._nativedBuffer; buffer2 = ec.Item2._nativedBuffer; buffer3 = ec.Item3._nativedBuffer; buffer4 = ec.Item4._nativedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static BT> ToBuffer(in this EntityCollection ec) where T1 : unmanaged, IEntityComponent { return new BT>(ec._nativedBuffer, ec.count); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static BT, NB> ToBuffers (in this EntityCollection ec) where T2 : unmanaged, IEntityComponent where T1 : unmanaged, IEntityComponent { return new BT, NB>(ec.buffer1._nativedBuffer, ec.buffer2._nativedBuffer, ec.count); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static BT, NB, NB> ToBuffers (in this EntityCollection ec) where T2 : unmanaged, IEntityComponent where T1 : unmanaged, IEntityComponent where T3 : unmanaged, IEntityComponent { return new BT, NB, NB>(ec.buffer1._nativedBuffer, ec.buffer2._nativedBuffer , ec.buffer3._nativedBuffer, ec.count); } } public static class EntityCollectionExtensionB { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out MB buffer, out int count) where T1 : struct, IEntityViewComponent { buffer = ec._managedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static BT> ToBuffer(in this EntityCollection ec) where T1 : struct, IEntityViewComponent { return new BT>(ec._managedBuffer, ec.count); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out MB buffer1, out MB buffer2, out int count) where T1 : struct, IEntityViewComponent where T2 : struct, IEntityViewComponent { buffer1 = ec.buffer1._managedBuffer; buffer2 = ec.buffer2._managedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (MB buffer1, MB buffer2, uint count) ToBuffers (in this EntityCollection ec) where T2 : struct, IEntityViewComponent where T1 : struct, IEntityViewComponent { return (ec.buffer1._managedBuffer, ec.buffer2._managedBuffer, ec.count); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out MB buffer1, out MB buffer2, out MB buffer3 , out int count) where T1 : struct, IEntityViewComponent where T2 : struct, IEntityViewComponent where T3 : struct, IEntityViewComponent { buffer1 = ec.buffer1._managedBuffer; buffer2 = ec.buffer2._managedBuffer; buffer3 = ec.buffer3._managedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (MB buffer1, MB buffer2, MB buffer3, uint count) ToBuffers (in this EntityCollection ec) where T2 : struct, IEntityViewComponent where T1 : struct, IEntityViewComponent where T3 : struct, IEntityViewComponent { return (ec.buffer1._managedBuffer, ec.buffer2._managedBuffer, ec.buffer3._managedBuffer, ec.count); } } public static class EntityCollectionExtensionC { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (NB buffer1, MB buffer2, uint count) ToBuffers (in this EntityCollection ec) where T1 : unmanaged, IEntityComponent where T2 : struct, IEntityViewComponent { return (ec.buffer1._nativedBuffer, ec.buffer2._managedBuffer, ec.count); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (NB buffer1, MB buffer2, MB buffer3, uint count) ToBuffers (in this EntityCollection ec) where T1 : unmanaged, IEntityComponent where T2 : struct, IEntityViewComponent where T3 : struct, IEntityViewComponent { return (ec.buffer1._nativedBuffer, ec.buffer2._managedBuffer, ec.buffer3._managedBuffer, ec.count); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer1, out MB buffer2, out int count) where T1 : unmanaged, IEntityComponent where T2 : struct, IEntityViewComponent { buffer1 = ec.buffer1._nativedBuffer; buffer2 = ec.buffer2._managedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer1, out MB buffer2, out MB buffer3, out int count) where T1 : unmanaged, IEntityComponent where T2 : struct, IEntityViewComponent where T3 : struct, IEntityViewComponent { buffer1 = ec.buffer1._nativedBuffer; buffer2 = ec.buffer2._managedBuffer; buffer3 = ec.buffer3._managedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer1, out NB buffer2, out NB buffer3 , out MB buffer4, out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent where T3 : unmanaged, IEntityComponent where T4 : struct, IEntityViewComponent { buffer1 = ec.Item1._nativedBuffer; buffer2 = ec.Item2._nativedBuffer; buffer3 = ec.Item3._nativedBuffer; buffer4 = ec.Item4._managedBuffer; count = (int) ec.count; } } public static class EntityCollectionExtensionD { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer1, out NB buffer2, out MB buffer3 , out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent where T3 : struct, IEntityViewComponent { buffer1 = ec.buffer1._nativedBuffer; buffer2 = ec.buffer2._nativedBuffer; buffer3 = ec.buffer3._managedBuffer; count = (int) ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static (NB buffer1, NB buffer2, MB buffer3, uint count) ToBuffers (in this EntityCollection ec) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent where T3 : struct, IEntityViewComponent { return (ec.buffer1._nativedBuffer, ec.buffer2._nativedBuffer, ec.buffer3._managedBuffer, ec.count); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static BT, NB, NB, NB> ToBuffers (in this EntityCollection ec) where T2 : unmanaged, IEntityComponent where T1 : unmanaged, IEntityComponent where T3 : unmanaged, IEntityComponent where T4 : unmanaged, IEntityComponent { return new BT, NB, NB, NB>(ec.Item1._nativedBuffer, ec.Item2._nativedBuffer , ec.Item3._nativedBuffer, ec.Item4._nativedBuffer, ec.count); } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct (in this EntityCollection ec, out NB buffer1, out NB buffer2, out MB buffer3 , out MB buffer4, out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent where T3 : struct, IEntityViewComponent where T4 : struct, IEntityViewComponent { buffer1 = ec.Item1._nativedBuffer; buffer2 = ec.Item2._nativedBuffer; buffer3 = ec.Item3._managedBuffer; buffer4 = ec.Item4._managedBuffer; count = (int) ec.count; } } }