using System.Runtime.CompilerServices; using Svelto.DataStructures; using Svelto.ECS.Hybrid; using Svelto.ECS.Internal; 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 { if (ec.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer = default; count = 0; return; } buffer = (NBInternal)ec.buffer; count = (int)ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct(in this EntityCollection ec, out NB buffer, out NativeEntityIDs entityIDs, out int count) where T1 : unmanaged, IEntityComponent { if (ec.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer = default; count = 0; entityIDs = default; return; } buffer = (NBInternal)ec.buffer; count = (int)ec.count; entityIDs = (NativeEntityIDs)ec.entityIDs; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct(in this EntityCollection ec, out NB buffer1, out NB buffer2, out NativeEntityIDs entityIDs, out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; count = 0; entityIDs = default; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; count = ec.count; entityIDs = (NativeEntityIDs)ec.buffer1.entityIDs; } [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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; 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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; buffer3 = (NBInternal)ec.buffer3.buffer; 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 NativeEntityIDs entityIDs, out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent where T3 : unmanaged, IEntityComponent { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; count = 0; entityIDs = default; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; buffer3 = (NBInternal)ec.buffer3.buffer; count = (int)ec.count; entityIDs = (NativeEntityIDs)ec.buffer1.entityIDs; } [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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; buffer4 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; buffer3 = (NBInternal)ec.buffer3.buffer; buffer4 = (NBInternal)ec.buffer4.buffer; 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 NativeEntityIDs entityIDs, out int count) where T1 : unmanaged, IEntityComponent where T2 : unmanaged, IEntityComponent where T3 : unmanaged, IEntityComponent where T4 : unmanaged, IEntityComponent { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; buffer4 = default; count = 0; entityIDs = default; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; buffer3 = (NBInternal)ec.buffer3.buffer; buffer4 = (NBInternal)ec.buffer4.buffer; entityIDs = (NativeEntityIDs)ec.buffer1.entityIDs; count = (int)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 { if (ec.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer = default; count = 0; return; } buffer = (MBInternal)ec.buffer; count = (int)ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct(in this EntityCollection ec, out MB buffer, out ManagedEntityIDs entityIDs, out int count) where T1 : struct, IEntityViewComponent { if (ec.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer = default; count = 0; entityIDs = default; return; } buffer = (MBInternal)ec.buffer; count = (int)ec.count; entityIDs = (ManagedEntityIDs)ec.entityIDs; } [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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; count = 0; return; } buffer1 = (MBInternal)ec.buffer1.buffer; buffer2 = (MBInternal)ec.buffer2.buffer; count = (int)ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct(in this EntityCollection ec, out MB buffer1, out MB buffer2, out ManagedEntityIDs entityIDs, out int count) where T1 : struct, IEntityViewComponent where T2 : struct, IEntityViewComponent { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; count = 0; entityIDs = default; return; } buffer1 = (MBInternal)ec.buffer1.buffer; buffer2 = (MBInternal)ec.buffer2.buffer; count = (int)ec.count; entityIDs = (ManagedEntityIDs)ec.buffer1.entityIDs; } [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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; count = 0; return; } buffer1 = (MBInternal)ec.buffer1.buffer; buffer2 = (MBInternal)ec.buffer2.buffer; buffer3 = (MBInternal)ec.buffer3.buffer; count = (int)ec.count; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct(in this EntityCollection ec, out MB buffer1, out MB buffer2, out MB buffer3, out ManagedEntityIDs entityIDs, out int count) where T1 : struct, IEntityViewComponent where T2 : struct, IEntityViewComponent where T3 : struct, IEntityViewComponent { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; entityIDs = default; count = 0; return; } buffer1 = (MBInternal)ec.buffer1.buffer; buffer2 = (MBInternal)ec.buffer2.buffer; buffer3 = (MBInternal)ec.buffer3.buffer; count = (int)ec.count; entityIDs = (ManagedEntityIDs)ec.buffer1.entityIDs; } } public static class EntityCollectionExtensionC { [MethodImpl(MethodImplOptions.AggressiveInlining)] public static void Deconstruct(in this EntityCollection ec, out NB buffer1, out MB buffer2, out ManagedEntityIDs entityIDs, out int count) where T1 : unmanaged, IEntityComponent where T2 : struct, IEntityViewComponent { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (MBInternal)ec.buffer2.buffer; count = (int)ec.count; entityIDs = (ManagedEntityIDs)ec.buffer2.entityIDs; } [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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (MBInternal)ec.buffer2.buffer; 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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (MBInternal)ec.buffer2.buffer; buffer3 = (MBInternal)ec.buffer3.buffer; 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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; buffer4 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; buffer3 = (NBInternal)ec.buffer3.buffer; buffer4 = (MBInternal)ec.buffer4.buffer; 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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; buffer3 = (MBInternal)ec.buffer3.buffer; count = (int)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 { if (ec.buffer1.buffer == null) //I cannot test 0, as buffer can be valid and processed by removeEx with count 0 { buffer1 = default; buffer2 = default; buffer3 = default; buffer4 = default; count = 0; return; } buffer1 = (NBInternal)ec.buffer1.buffer; buffer2 = (NBInternal)ec.buffer2.buffer; buffer3 = (MBInternal)ec.buffer3.buffer; buffer4 = (MBInternal)ec.buffer4.buffer; count = (int)ec.count; } } }