Mirror of Svelto.ECS because we're a fan of it
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

242 lines
11KB

  1. using System.Runtime.CompilerServices;
  2. using Svelto.DataStructures;
  3. using Svelto.ECS.Hybrid;
  4. using Svelto.ECS.Internal;
  5. namespace Svelto.ECS
  6. {
  7. public static class EntityCollectionExtension
  8. {
  9. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  10. public static void Deconstruct<T1>(in this EntityCollection<T1> ec, out NB<T1> buffer, out int count)
  11. where T1 : unmanaged, IEntityComponent
  12. {
  13. buffer = ec._nativedBuffer;
  14. count = (int)ec.count;
  15. }
  16. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  17. public static void Deconstruct<T1>(in this EntityCollection<T1> ec, out NB<T1> buffer,
  18. out NativeEntityIDs entityIDs, out int count) where T1 : unmanaged, IEntityComponent
  19. {
  20. buffer = ec._nativedBuffer;
  21. count = (int)ec.count;
  22. entityIDs = ec._nativedIndices;
  23. }
  24. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  25. public static void Deconstruct<T1, T2>(in this EntityCollection<T1, T2> ec, out NB<T1> buffer1,
  26. out NB<T2> buffer2, out NativeEntityIDs entityIDs, out int count) where T1 : unmanaged, IEntityComponent
  27. where T2 : unmanaged, IEntityComponent
  28. {
  29. buffer1 = ec.buffer1._nativedBuffer;
  30. buffer2 = ec.buffer2._nativedBuffer;
  31. count = ec.count;
  32. entityIDs = ec.buffer1._nativedIndices;
  33. }
  34. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  35. public static void Deconstruct<T1, T2>(in this EntityCollection<T1, T2> ec, out NB<T1> buffer1,
  36. out NB<T2> buffer2, out int count) where T1 : unmanaged, IEntityComponent
  37. where T2 : unmanaged, IEntityComponent
  38. {
  39. buffer1 = ec.buffer1._nativedBuffer;
  40. buffer2 = ec.buffer2._nativedBuffer;
  41. count = (int)ec.count;
  42. }
  43. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  44. public static void Deconstruct<T1, T2, T3>(in this EntityCollection<T1, T2, T3> ec, out NB<T1> buffer1,
  45. out NB<T2> buffer2, out NB<T3> buffer3, out int count) where T1 : unmanaged, IEntityComponent
  46. where T2 : unmanaged, IEntityComponent
  47. where T3 : unmanaged, IEntityComponent
  48. {
  49. buffer1 = ec.buffer1._nativedBuffer;
  50. buffer2 = ec.buffer2._nativedBuffer;
  51. buffer3 = ec.buffer3._nativedBuffer;
  52. count = (int)ec.count;
  53. }
  54. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  55. public static void Deconstruct<T1, T2, T3>(in this EntityCollection<T1, T2, T3> ec, out NB<T1> buffer1,
  56. out NB<T2> buffer2, out NB<T3> buffer3, out NativeEntityIDs entityIDs, out int count)
  57. where T1 : unmanaged, IEntityComponent
  58. where T2 : unmanaged, IEntityComponent
  59. where T3 : unmanaged, IEntityComponent
  60. {
  61. buffer1 = ec.buffer1._nativedBuffer;
  62. buffer2 = ec.buffer2._nativedBuffer;
  63. buffer3 = ec.buffer3._nativedBuffer;
  64. count = (int)ec.count;
  65. entityIDs = ec.buffer1._nativedIndices;
  66. }
  67. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  68. public static void Deconstruct<T1, T2, T3, T4>(in this EntityCollection<T1, T2, T3, T4> ec, out NB<T1> buffer1,
  69. out NB<T2> buffer2, out NB<T3> buffer3, out NB<T4> buffer4, out int count)
  70. where T1 : unmanaged, IEntityComponent
  71. where T2 : unmanaged, IEntityComponent
  72. where T3 : unmanaged, IEntityComponent
  73. where T4 : unmanaged, IEntityComponent
  74. {
  75. buffer1 = ec.buffer1._nativedBuffer;
  76. buffer2 = ec.buffer2._nativedBuffer;
  77. buffer3 = ec.buffer3._nativedBuffer;
  78. buffer4 = ec.buffer4._nativedBuffer;
  79. count = (int)ec.count;
  80. }
  81. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  82. public static void Deconstruct<T1, T2, T3, T4>(in this EntityCollection<T1, T2, T3, T4> ec, out NB<T1> buffer1,
  83. out NB<T2> buffer2, out NB<T3> buffer3, out NB<T4> buffer4, out NativeEntityIDs entityIDs, out int count)
  84. where T1 : unmanaged, IEntityComponent
  85. where T2 : unmanaged, IEntityComponent
  86. where T3 : unmanaged, IEntityComponent
  87. where T4 : unmanaged, IEntityComponent
  88. {
  89. buffer1 = ec.buffer1._nativedBuffer;
  90. buffer2 = ec.buffer2._nativedBuffer;
  91. buffer3 = ec.buffer3._nativedBuffer;
  92. buffer4 = ec.buffer4._nativedBuffer;
  93. entityIDs = ec.buffer1._nativedIndices;
  94. count = (int)ec.count;
  95. }
  96. }
  97. public static class EntityCollectionExtensionB
  98. {
  99. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  100. public static void Deconstruct<T1>(in this EntityCollection<T1> ec, out MB<T1> buffer, out int count)
  101. where T1 : struct, IEntityViewComponent
  102. {
  103. buffer = ec._managedBuffer;
  104. count = (int)ec.count;
  105. }
  106. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  107. public static void Deconstruct<T1>(in this EntityCollection<T1> ec, out MB<T1> buffer,
  108. out ManagedEntityIDs entityIDs, out int count) where T1 : struct, IEntityViewComponent
  109. {
  110. buffer = ec._managedBuffer;
  111. count = (int)ec.count;
  112. entityIDs = ec._managedIndices;
  113. }
  114. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  115. public static void Deconstruct<T1, T2>(in this EntityCollection<T1, T2> ec, out MB<T1> buffer1,
  116. out MB<T2> buffer2, out int count) where T1 : struct, IEntityViewComponent
  117. where T2 : struct, IEntityViewComponent
  118. {
  119. buffer1 = ec.buffer1._managedBuffer;
  120. buffer2 = ec.buffer2._managedBuffer;
  121. count = (int)ec.count;
  122. }
  123. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  124. public static void Deconstruct<T1, T2>(in this EntityCollection<T1, T2> ec, out MB<T1> buffer1,
  125. out MB<T2> buffer2, out ManagedEntityIDs entityIDs, out int count) where T1 : struct, IEntityViewComponent
  126. where T2 : struct, IEntityViewComponent
  127. {
  128. buffer1 = ec.buffer1._managedBuffer;
  129. buffer2 = ec.buffer2._managedBuffer;
  130. count = (int)ec.count;
  131. entityIDs = ec.buffer1._managedIndices;
  132. }
  133. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  134. public static void Deconstruct<T1, T2, T3>(in this EntityCollection<T1, T2, T3> ec, out MB<T1> buffer1,
  135. out MB<T2> buffer2, out MB<T3> buffer3, out int count) where T1 : struct, IEntityViewComponent
  136. where T2 : struct, IEntityViewComponent
  137. where T3 : struct, IEntityViewComponent
  138. {
  139. buffer1 = ec.buffer1._managedBuffer;
  140. buffer2 = ec.buffer2._managedBuffer;
  141. buffer3 = ec.buffer3._managedBuffer;
  142. count = (int)ec.count;
  143. }
  144. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  145. public static void Deconstruct<T1, T2, T3>(in this EntityCollection<T1, T2, T3> ec, out MB<T1> buffer1,
  146. out MB<T2> buffer2, out MB<T3> buffer3, out ManagedEntityIDs entityIDs, out int count)
  147. where T1 : struct, IEntityViewComponent
  148. where T2 : struct, IEntityViewComponent
  149. where T3 : struct, IEntityViewComponent
  150. {
  151. buffer1 = ec.buffer1._managedBuffer;
  152. buffer2 = ec.buffer2._managedBuffer;
  153. buffer3 = ec.buffer3._managedBuffer;
  154. count = (int)ec.count;
  155. entityIDs = ec.buffer1._managedIndices;
  156. }
  157. }
  158. public static class EntityCollectionExtensionC
  159. {
  160. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  161. public static void Deconstruct<T1, T2>(in this EntityCollection<T1, T2> ec, out NB<T1> buffer1,
  162. out MB<T2> buffer2, out int count) where T1 : unmanaged, IEntityComponent
  163. where T2 : struct, IEntityViewComponent
  164. {
  165. buffer1 = ec.buffer1._nativedBuffer;
  166. buffer2 = ec.buffer2._managedBuffer;
  167. count = (int)ec.count;
  168. }
  169. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  170. public static void Deconstruct<T1, T2, T3>(in this EntityCollection<T1, T2, T3> ec, out NB<T1> buffer1,
  171. out MB<T2> buffer2, out MB<T3> buffer3, out int count) where T1 : unmanaged, IEntityComponent
  172. where T2 : struct, IEntityViewComponent
  173. where T3 : struct, IEntityViewComponent
  174. {
  175. buffer1 = ec.buffer1._nativedBuffer;
  176. buffer2 = ec.buffer2._managedBuffer;
  177. buffer3 = ec.buffer3._managedBuffer;
  178. count = (int)ec.count;
  179. }
  180. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  181. public static void Deconstruct<T1, T2, T3, T4>(in this EntityCollection<T1, T2, T3, T4> ec, out NB<T1> buffer1,
  182. out NB<T2> buffer2, out NB<T3> buffer3, out MB<T4> buffer4, out int count)
  183. where T1 : unmanaged, IEntityComponent
  184. where T2 : unmanaged, IEntityComponent
  185. where T3 : unmanaged, IEntityComponent
  186. where T4 : struct, IEntityViewComponent
  187. {
  188. buffer1 = ec.buffer1._nativedBuffer;
  189. buffer2 = ec.buffer2._nativedBuffer;
  190. buffer3 = ec.buffer3._nativedBuffer;
  191. buffer4 = ec.buffer4._managedBuffer;
  192. count = (int)ec.count;
  193. }
  194. }
  195. public static class EntityCollectionExtensionD
  196. {
  197. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  198. public static void Deconstruct<T1, T2, T3>(in this EntityCollection<T1, T2, T3> ec, out NB<T1> buffer1,
  199. out NB<T2> buffer2, out MB<T3> buffer3, out int count) where T1 : unmanaged, IEntityComponent
  200. where T2 : unmanaged, IEntityComponent
  201. where T3 : struct, IEntityViewComponent
  202. {
  203. buffer1 = ec.buffer1._nativedBuffer;
  204. buffer2 = ec.buffer2._nativedBuffer;
  205. buffer3 = ec.buffer3._managedBuffer;
  206. count = (int)ec.count;
  207. }
  208. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  209. public static void Deconstruct<T1, T2, T3, T4>(in this EntityCollection<T1, T2, T3, T4> ec, out NB<T1> buffer1,
  210. out NB<T2> buffer2, out MB<T3> buffer3, out MB<T4> buffer4, out int count)
  211. where T1 : unmanaged, IEntityComponent
  212. where T2 : unmanaged, IEntityComponent
  213. where T3 : struct, IEntityViewComponent
  214. where T4 : struct, IEntityViewComponent
  215. {
  216. buffer1 = ec.buffer1._nativedBuffer;
  217. buffer2 = ec.buffer2._nativedBuffer;
  218. buffer3 = ec.buffer3._managedBuffer;
  219. buffer4 = ec.buffer4._managedBuffer;
  220. count = (int)ec.count;
  221. }
  222. }
  223. }