StructArrayHelpers.cs 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654
  1. using System;
  2. using System.Runtime.InteropServices;
  3. namespace Ryujinx.Common.Memory
  4. {
  5. public struct Array1<T> : IArray<T> where T : unmanaged
  6. {
  7. T _e0;
  8. public int Length => 1;
  9. public ref T this[int index] => ref AsSpan()[index];
  10. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 1);
  11. }
  12. public struct Array2<T> : IArray<T> where T : unmanaged
  13. {
  14. #pragma warning disable CS0169
  15. T _e0;
  16. Array1<T> _other;
  17. #pragma warning restore CS0169
  18. public int Length => 2;
  19. public ref T this[int index] => ref AsSpan()[index];
  20. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 2);
  21. }
  22. public struct Array3<T> : IArray<T> where T : unmanaged
  23. {
  24. #pragma warning disable CS0169
  25. T _e0;
  26. Array2<T> _other;
  27. #pragma warning restore CS0169
  28. public int Length => 3;
  29. public ref T this[int index] => ref AsSpan()[index];
  30. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 3);
  31. }
  32. public struct Array4<T> : IArray<T> where T : unmanaged
  33. {
  34. #pragma warning disable CS0169
  35. T _e0;
  36. Array3<T> _other;
  37. #pragma warning restore CS0169
  38. public int Length => 4;
  39. public ref T this[int index] => ref AsSpan()[index];
  40. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 4);
  41. }
  42. public struct Array5<T> : IArray<T> where T : unmanaged
  43. {
  44. #pragma warning disable CS0169
  45. T _e0;
  46. Array4<T> _other;
  47. #pragma warning restore CS0169
  48. public int Length => 5;
  49. public ref T this[int index] => ref AsSpan()[index];
  50. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 5);
  51. }
  52. public struct Array6<T> : IArray<T> where T : unmanaged
  53. {
  54. #pragma warning disable CS0169
  55. T _e0;
  56. Array5<T> _other;
  57. #pragma warning restore CS0169
  58. public int Length => 6;
  59. public ref T this[int index] => ref AsSpan()[index];
  60. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 6);
  61. }
  62. public struct Array7<T> : IArray<T> where T : unmanaged
  63. {
  64. #pragma warning disable CS0169
  65. T _e0;
  66. Array6<T> _other;
  67. #pragma warning restore CS0169
  68. public int Length => 7;
  69. public ref T this[int index] => ref AsSpan()[index];
  70. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 7);
  71. }
  72. public struct Array8<T> : IArray<T> where T : unmanaged
  73. {
  74. #pragma warning disable CS0169
  75. T _e0;
  76. Array7<T> _other;
  77. #pragma warning restore CS0169
  78. public int Length => 8;
  79. public ref T this[int index] => ref AsSpan()[index];
  80. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 8);
  81. }
  82. public struct Array9<T> : IArray<T> where T : unmanaged
  83. {
  84. #pragma warning disable CS0169
  85. T _e0;
  86. Array8<T> _other;
  87. #pragma warning restore CS0169
  88. public int Length => 9;
  89. public ref T this[int index] => ref AsSpan()[index];
  90. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 9);
  91. }
  92. public struct Array10<T> : IArray<T> where T : unmanaged
  93. {
  94. #pragma warning disable CS0169
  95. T _e0;
  96. Array9<T> _other;
  97. #pragma warning restore CS0169
  98. public int Length => 10;
  99. public ref T this[int index] => ref AsSpan()[index];
  100. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 10);
  101. }
  102. public struct Array11<T> : IArray<T> where T : unmanaged
  103. {
  104. #pragma warning disable CS0169
  105. T _e0;
  106. Array10<T> _other;
  107. #pragma warning restore CS0169
  108. public int Length => 11;
  109. public ref T this[int index] => ref AsSpan()[index];
  110. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 11);
  111. }
  112. public struct Array12<T> : IArray<T> where T : unmanaged
  113. {
  114. #pragma warning disable CS0169
  115. T _e0;
  116. Array11<T> _other;
  117. #pragma warning restore CS0169
  118. public int Length => 12;
  119. public ref T this[int index] => ref AsSpan()[index];
  120. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 12);
  121. }
  122. public struct Array13<T> : IArray<T> where T : unmanaged
  123. {
  124. #pragma warning disable CS0169
  125. T _e0;
  126. Array12<T> _other;
  127. #pragma warning restore CS0169
  128. public int Length => 13;
  129. public ref T this[int index] => ref AsSpan()[index];
  130. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 13);
  131. }
  132. public struct Array14<T> : IArray<T> where T : unmanaged
  133. {
  134. #pragma warning disable CS0169
  135. T _e0;
  136. Array13<T> _other;
  137. #pragma warning restore CS0169
  138. public int Length => 14;
  139. public ref T this[int index] => ref AsSpan()[index];
  140. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 14);
  141. }
  142. public struct Array15<T> : IArray<T> where T : unmanaged
  143. {
  144. #pragma warning disable CS0169
  145. T _e0;
  146. Array14<T> _other;
  147. #pragma warning restore CS0169
  148. public int Length => 15;
  149. public ref T this[int index] => ref AsSpan()[index];
  150. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 15);
  151. }
  152. public struct Array16<T> : IArray<T> where T : unmanaged
  153. {
  154. #pragma warning disable CS0169
  155. T _e0;
  156. Array15<T> _other;
  157. #pragma warning restore CS0169
  158. public int Length => 16;
  159. public ref T this[int index] => ref AsSpan()[index];
  160. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 16);
  161. }
  162. public struct Array17<T> : IArray<T> where T : unmanaged
  163. {
  164. #pragma warning disable CS0169
  165. T _e0;
  166. Array16<T> _other;
  167. #pragma warning restore CS0169
  168. public int Length => 17;
  169. public ref T this[int index] => ref AsSpan()[index];
  170. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 17);
  171. }
  172. public struct Array18<T> : IArray<T> where T : unmanaged
  173. {
  174. #pragma warning disable CS0169
  175. T _e0;
  176. Array17<T> _other;
  177. #pragma warning restore CS0169
  178. public int Length => 18;
  179. public ref T this[int index] => ref AsSpan()[index];
  180. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 18);
  181. }
  182. public struct Array19<T> : IArray<T> where T : unmanaged
  183. {
  184. #pragma warning disable CS0169
  185. T _e0;
  186. Array18<T> _other;
  187. #pragma warning restore CS0169
  188. public int Length => 19;
  189. public ref T this[int index] => ref AsSpan()[index];
  190. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 19);
  191. }
  192. public struct Array20<T> : IArray<T> where T : unmanaged
  193. {
  194. #pragma warning disable CS0169
  195. T _e0;
  196. Array19<T> _other;
  197. #pragma warning restore CS0169
  198. public int Length => 20;
  199. public ref T this[int index] => ref AsSpan()[index];
  200. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 20);
  201. }
  202. public struct Array21<T> : IArray<T> where T : unmanaged
  203. {
  204. #pragma warning disable CS0169
  205. T _e0;
  206. Array20<T> _other;
  207. #pragma warning restore CS0169
  208. public int Length => 21;
  209. public ref T this[int index] => ref AsSpan()[index];
  210. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 21);
  211. }
  212. public struct Array22<T> : IArray<T> where T : unmanaged
  213. {
  214. #pragma warning disable CS0169
  215. T _e0;
  216. Array21<T> _other;
  217. #pragma warning restore CS0169
  218. public int Length => 22;
  219. public ref T this[int index] => ref AsSpan()[index];
  220. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 22);
  221. }
  222. public struct Array23<T> : IArray<T> where T : unmanaged
  223. {
  224. #pragma warning disable CS0169
  225. T _e0;
  226. Array22<T> _other;
  227. #pragma warning restore CS0169
  228. public int Length => 23;
  229. public ref T this[int index] => ref AsSpan()[index];
  230. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 23);
  231. }
  232. public struct Array24<T> : IArray<T> where T : unmanaged
  233. {
  234. #pragma warning disable CS0169
  235. T _e0;
  236. Array23<T> _other;
  237. #pragma warning restore CS0169
  238. public int Length => 24;
  239. public ref T this[int index] => ref AsSpan()[index];
  240. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 24);
  241. }
  242. public struct Array25<T> : IArray<T> where T : unmanaged
  243. {
  244. #pragma warning disable CS0169
  245. T _e0;
  246. Array24<T> _other;
  247. #pragma warning restore CS0169
  248. public int Length => 25;
  249. public ref T this[int index] => ref AsSpan()[index];
  250. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 25);
  251. }
  252. public struct Array26<T> : IArray<T> where T : unmanaged
  253. {
  254. #pragma warning disable CS0169
  255. T _e0;
  256. Array25<T> _other;
  257. #pragma warning restore CS0169
  258. public int Length => 26;
  259. public ref T this[int index] => ref AsSpan()[index];
  260. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 26);
  261. }
  262. public struct Array27<T> : IArray<T> where T : unmanaged
  263. {
  264. #pragma warning disable CS0169
  265. T _e0;
  266. Array26<T> _other;
  267. #pragma warning restore CS0169
  268. public int Length => 27;
  269. public ref T this[int index] => ref AsSpan()[index];
  270. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 27);
  271. }
  272. public struct Array28<T> : IArray<T> where T : unmanaged
  273. {
  274. #pragma warning disable CS0169
  275. T _e0;
  276. Array27<T> _other;
  277. #pragma warning restore CS0169
  278. public int Length => 28;
  279. public ref T this[int index] => ref AsSpan()[index];
  280. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 28);
  281. }
  282. public struct Array29<T> : IArray<T> where T : unmanaged
  283. {
  284. #pragma warning disable CS0169
  285. T _e0;
  286. Array28<T> _other;
  287. #pragma warning restore CS0169
  288. public int Length => 29;
  289. public ref T this[int index] => ref AsSpan()[index];
  290. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 29);
  291. }
  292. public struct Array30<T> : IArray<T> where T : unmanaged
  293. {
  294. #pragma warning disable CS0169
  295. T _e0;
  296. Array29<T> _other;
  297. #pragma warning restore CS0169
  298. public int Length => 30;
  299. public ref T this[int index] => ref AsSpan()[index];
  300. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 30);
  301. }
  302. public struct Array31<T> : IArray<T> where T : unmanaged
  303. {
  304. #pragma warning disable CS0169
  305. T _e0;
  306. Array30<T> _other;
  307. #pragma warning restore CS0169
  308. public int Length => 31;
  309. public ref T this[int index] => ref AsSpan()[index];
  310. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 31);
  311. }
  312. public struct Array32<T> : IArray<T> where T : unmanaged
  313. {
  314. #pragma warning disable CS0169
  315. T _e0;
  316. Array31<T> _other;
  317. #pragma warning restore CS0169
  318. public int Length => 32;
  319. public ref T this[int index] => ref AsSpan()[index];
  320. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 32);
  321. }
  322. public struct Array33<T> : IArray<T> where T : unmanaged
  323. {
  324. #pragma warning disable CS0169
  325. T _e0;
  326. Array32<T> _other;
  327. #pragma warning restore CS0169
  328. public int Length => 33;
  329. public ref T this[int index] => ref AsSpan()[index];
  330. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 33);
  331. }
  332. public struct Array34<T> : IArray<T> where T : unmanaged
  333. {
  334. #pragma warning disable CS0169
  335. T _e0;
  336. Array33<T> _other;
  337. #pragma warning restore CS0169
  338. public int Length => 34;
  339. public ref T this[int index] => ref AsSpan()[index];
  340. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 34);
  341. }
  342. public struct Array35<T> : IArray<T> where T : unmanaged
  343. {
  344. #pragma warning disable CS0169
  345. T _e0;
  346. Array34<T> _other;
  347. #pragma warning restore CS0169
  348. public int Length => 35;
  349. public ref T this[int index] => ref AsSpan()[index];
  350. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 35);
  351. }
  352. public struct Array36<T> : IArray<T> where T : unmanaged
  353. {
  354. #pragma warning disable CS0169
  355. T _e0;
  356. Array35<T> _other;
  357. #pragma warning restore CS0169
  358. public int Length => 36;
  359. public ref T this[int index] => ref AsSpan()[index];
  360. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 36);
  361. }
  362. public struct Array37<T> : IArray<T> where T : unmanaged
  363. {
  364. #pragma warning disable CS0169
  365. T _e0;
  366. Array36<T> _other;
  367. #pragma warning restore CS0169
  368. public int Length => 37;
  369. public ref T this[int index] => ref AsSpan()[index];
  370. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 37);
  371. }
  372. public struct Array38<T> : IArray<T> where T : unmanaged
  373. {
  374. #pragma warning disable CS0169
  375. T _e0;
  376. Array37<T> _other;
  377. #pragma warning restore CS0169
  378. public int Length => 38;
  379. public ref T this[int index] => ref AsSpan()[index];
  380. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 38);
  381. }
  382. public struct Array39<T> : IArray<T> where T : unmanaged
  383. {
  384. #pragma warning disable CS0169
  385. T _e0;
  386. Array38<T> _other;
  387. #pragma warning restore CS0169
  388. public int Length => 39;
  389. public ref T this[int index] => ref AsSpan()[index];
  390. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 39);
  391. }
  392. public struct Array40<T> : IArray<T> where T : unmanaged
  393. {
  394. #pragma warning disable CS0169
  395. T _e0;
  396. Array39<T> _other;
  397. #pragma warning restore CS0169
  398. public int Length => 40;
  399. public ref T this[int index] => ref AsSpan()[index];
  400. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 40);
  401. }
  402. public struct Array41<T> : IArray<T> where T : unmanaged
  403. {
  404. #pragma warning disable CS0169
  405. T _e0;
  406. Array40<T> _other;
  407. #pragma warning restore CS0169
  408. public int Length => 41;
  409. public ref T this[int index] => ref AsSpan()[index];
  410. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 41);
  411. }
  412. public struct Array42<T> : IArray<T> where T : unmanaged
  413. {
  414. #pragma warning disable CS0169
  415. T _e0;
  416. Array41<T> _other;
  417. #pragma warning restore CS0169
  418. public int Length => 42;
  419. public ref T this[int index] => ref AsSpan()[index];
  420. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 42);
  421. }
  422. public struct Array43<T> : IArray<T> where T : unmanaged
  423. {
  424. #pragma warning disable CS0169
  425. T _e0;
  426. Array42<T> _other;
  427. #pragma warning restore CS0169
  428. public int Length => 43;
  429. public ref T this[int index] => ref AsSpan()[index];
  430. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 43);
  431. }
  432. public struct Array44<T> : IArray<T> where T : unmanaged
  433. {
  434. #pragma warning disable CS0169
  435. T _e0;
  436. Array43<T> _other;
  437. #pragma warning restore CS0169
  438. public int Length => 44;
  439. public ref T this[int index] => ref AsSpan()[index];
  440. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 44);
  441. }
  442. public struct Array45<T> : IArray<T> where T : unmanaged
  443. {
  444. #pragma warning disable CS0169
  445. T _e0;
  446. Array44<T> _other;
  447. #pragma warning restore CS0169
  448. public int Length => 45;
  449. public ref T this[int index] => ref AsSpan()[index];
  450. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 45);
  451. }
  452. public struct Array46<T> : IArray<T> where T : unmanaged
  453. {
  454. #pragma warning disable CS0169
  455. T _e0;
  456. Array45<T> _other;
  457. #pragma warning restore CS0169
  458. public int Length => 46;
  459. public ref T this[int index] => ref AsSpan()[index];
  460. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 46);
  461. }
  462. public struct Array47<T> : IArray<T> where T : unmanaged
  463. {
  464. #pragma warning disable CS0169
  465. T _e0;
  466. Array46<T> _other;
  467. #pragma warning restore CS0169
  468. public int Length => 47;
  469. public ref T this[int index] => ref AsSpan()[index];
  470. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 47);
  471. }
  472. public struct Array48<T> : IArray<T> where T : unmanaged
  473. {
  474. #pragma warning disable CS0169
  475. T _e0;
  476. Array47<T> _other;
  477. #pragma warning restore CS0169
  478. public int Length => 48;
  479. public ref T this[int index] => ref AsSpan()[index];
  480. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 48);
  481. }
  482. public struct Array49<T> : IArray<T> where T : unmanaged
  483. {
  484. #pragma warning disable CS0169
  485. T _e0;
  486. Array48<T> _other;
  487. #pragma warning restore CS0169
  488. public int Length => 49;
  489. public ref T this[int index] => ref AsSpan()[index];
  490. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 49);
  491. }
  492. public struct Array50<T> : IArray<T> where T : unmanaged
  493. {
  494. #pragma warning disable CS0169
  495. T _e0;
  496. Array49<T> _other;
  497. #pragma warning restore CS0169
  498. public int Length => 50;
  499. public ref T this[int index] => ref AsSpan()[index];
  500. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 50);
  501. }
  502. public struct Array51<T> : IArray<T> where T : unmanaged
  503. {
  504. #pragma warning disable CS0169
  505. T _e0;
  506. Array50<T> _other;
  507. #pragma warning restore CS0169
  508. public int Length => 51;
  509. public ref T this[int index] => ref AsSpan()[index];
  510. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 51);
  511. }
  512. public struct Array52<T> : IArray<T> where T : unmanaged
  513. {
  514. #pragma warning disable CS0169
  515. T _e0;
  516. Array51<T> _other;
  517. #pragma warning restore CS0169
  518. public int Length => 52;
  519. public ref T this[int index] => ref AsSpan()[index];
  520. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 52);
  521. }
  522. public struct Array53<T> : IArray<T> where T : unmanaged
  523. {
  524. #pragma warning disable CS0169
  525. T _e0;
  526. Array52<T> _other;
  527. #pragma warning restore CS0169
  528. public int Length => 53;
  529. public ref T this[int index] => ref AsSpan()[index];
  530. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 53);
  531. }
  532. public struct Array54<T> : IArray<T> where T : unmanaged
  533. {
  534. #pragma warning disable CS0169
  535. T _e0;
  536. Array53<T> _other;
  537. #pragma warning restore CS0169
  538. public int Length => 54;
  539. public ref T this[int index] => ref AsSpan()[index];
  540. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 54);
  541. }
  542. public struct Array55<T> : IArray<T> where T : unmanaged
  543. {
  544. #pragma warning disable CS0169
  545. T _e0;
  546. Array54<T> _other;
  547. #pragma warning restore CS0169
  548. public int Length => 55;
  549. public ref T this[int index] => ref AsSpan()[index];
  550. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 55);
  551. }
  552. public struct Array56<T> : IArray<T> where T : unmanaged
  553. {
  554. #pragma warning disable CS0169
  555. T _e0;
  556. Array55<T> _other;
  557. #pragma warning restore CS0169
  558. public int Length => 56;
  559. public ref T this[int index] => ref AsSpan()[index];
  560. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 56);
  561. }
  562. public struct Array57<T> : IArray<T> where T : unmanaged
  563. {
  564. #pragma warning disable CS0169
  565. T _e0;
  566. Array56<T> _other;
  567. #pragma warning restore CS0169
  568. public int Length => 57;
  569. public ref T this[int index] => ref AsSpan()[index];
  570. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 57);
  571. }
  572. public struct Array58<T> : IArray<T> where T : unmanaged
  573. {
  574. #pragma warning disable CS0169
  575. T _e0;
  576. Array57<T> _other;
  577. #pragma warning restore CS0169
  578. public int Length => 58;
  579. public ref T this[int index] => ref AsSpan()[index];
  580. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 58);
  581. }
  582. public struct Array59<T> : IArray<T> where T : unmanaged
  583. {
  584. #pragma warning disable CS0169
  585. T _e0;
  586. Array58<T> _other;
  587. #pragma warning restore CS0169
  588. public int Length => 59;
  589. public ref T this[int index] => ref AsSpan()[index];
  590. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 59);
  591. }
  592. public struct Array60<T> : IArray<T> where T : unmanaged
  593. {
  594. #pragma warning disable CS0169
  595. T _e0;
  596. Array59<T> _other;
  597. #pragma warning restore CS0169
  598. public int Length => 60;
  599. public ref T this[int index] => ref AsSpan()[index];
  600. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 60);
  601. }
  602. public struct Array61<T> : IArray<T> where T : unmanaged
  603. {
  604. #pragma warning disable CS0169
  605. T _e0;
  606. Array60<T> _other;
  607. #pragma warning restore CS0169
  608. public int Length => 61;
  609. public ref T this[int index] => ref AsSpan()[index];
  610. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 61);
  611. }
  612. public struct Array62<T> : IArray<T> where T : unmanaged
  613. {
  614. #pragma warning disable CS0169
  615. T _e0;
  616. Array61<T> _other;
  617. #pragma warning restore CS0169
  618. public int Length => 62;
  619. public ref T this[int index] => ref AsSpan()[index];
  620. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 62);
  621. }
  622. public struct Array63<T> : IArray<T> where T : unmanaged
  623. {
  624. #pragma warning disable CS0169
  625. T _e0;
  626. Array62<T> _other;
  627. #pragma warning restore CS0169
  628. public int Length => 63;
  629. public ref T this[int index] => ref AsSpan()[index];
  630. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 63);
  631. }
  632. public struct Array64<T> : IArray<T> where T : unmanaged
  633. {
  634. #pragma warning disable CS0169
  635. T _e0;
  636. Array63<T> _other;
  637. #pragma warning restore CS0169
  638. public int Length => 64;
  639. public ref T this[int index] => ref AsSpan()[index];
  640. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 64);
  641. }
  642. public struct Array73<T> : IArray<T> where T : unmanaged
  643. {
  644. #pragma warning disable CS0169
  645. T _e0;
  646. Array64<T> _other;
  647. Array8<T> _other2;
  648. #pragma warning restore CS0169
  649. public int Length => 73;
  650. public ref T this[int index] => ref AsSpan()[index];
  651. public Span<T> AsSpan() => MemoryMarshal.CreateSpan(ref _e0, 73);
  652. }
  653. }