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.

251 lines
11KB

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