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.

EntityCollectionExtension.cs 11KB

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