jecs/coverage/jecs.luau.html
2025-03-30 22:29:43 +02:00

2798 lines
No EOL
262 KiB
HTML
Vendored

<html><head>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/css/bootstrap.min.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap/5.3.0/js/bootstrap.bundle.min.js"></script>
<style>
body { font-family: monospace; text-align: center; }
#funcTable table { margin: 0 auto; width: auto; max-width: 300px; font-size: 14px; border-collapse: collapse; }
#funcTable th, #funcTable td { padding: 2px 6px; text-align: left; white-space: nowrap; }
#funcTable th { background-color: #ddd; }
#funcTable td:nth-child(2) { text-align: right; min-width: 50px; }
.zero-hits { background-color: #fcc; font-weight: bold; color: red; }
.nonzero-hits { color: green; font-weight: bold; }
.low-hits { background-color: #ffe6b3; }
.high-hits { background-color: #cfc; }
.source-code-table { margin-left: 10px; }th, td { padding: 0px; font-size: 12px; }
table.table { font-size: 14px; border-collapse: collapse; }
table.table th, table.table td { padding: 1px; font-size: 12px; line-height: 1.2; }
table.table tr { height: auto; }
</style></head><body>
<h1 class="text-center">jecs.luau Coverage</h1>
<h2>Total Execution Hits: 1006447</h2>
<h2>Function Coverage Overview: 84.54%</h2>
<button class="btn btn-primary mb-2" type="button" data-bs-toggle="collapse" data-bs-target="#funcTable">Toggle Function Coverage</button>
<div class="collapse show" id="funcTable">
<h2>Function Coverage:</h2><table class="table table-bordered"><thead><tr><th>Function</th><th>Hits</th></tr></thead><tbody>
<tr><td style="padding: 1px; min-width: 31ch;"><main></td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_COMBINE:142</td><td style="padding: 1px; color: green; font-weight: bold;">65683</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_IS_PAIR:147</td><td style="padding: 1px; color: green; font-weight: bold;">1729</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_GENERATION_INC:151</td><td style="padding: 1px; color: green; font-weight: bold;">65684</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_ENTITY_T_LO:166</td><td style="padding: 1px; color: green; font-weight: bold;">162390</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_GENERATION:170</td><td style="padding: 1px; color: green; font-weight: bold;">5</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_ENTITY_T_HI:174</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_PAIR:178</td><td style="padding: 1px; color: green; font-weight: bold;">133381</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_PAIR_FIRST:185</td><td style="padding: 1px; color: green; font-weight: bold;">648</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_PAIR_SECOND:189</td><td style="padding: 1px; color: green; font-weight: bold;">722</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">entity_index_try_get_any:193</td><td style="padding: 1px; color: green; font-weight: bold;">133207</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">entity_index_try_get:206</td><td style="padding: 1px; color: green; font-weight: bold;">66607</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">entity_index_try_get_fast:220</td><td style="padding: 1px; color: green; font-weight: bold;">25535</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">entity_index_is_alive:230</td><td style="padding: 1px; color: green; font-weight: bold;">922</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">entity_index_get_alive:234</td><td style="padding: 1px; color: green; font-weight: bold;">842</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ecs_get_alive:242</td><td style="padding: 1px; color: green; font-weight: bold;">9</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">entity_index_new_id:265</td><td style="padding: 1px; color: green; font-weight: bold;">86562</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ecs_pair_first:286</td><td style="padding: 1px; color: green; font-weight: bold;">4</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ecs_pair_second:291</td><td style="padding: 1px; color: green; font-weight: bold;">5</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">query_match:296</td><td style="padding: 1px; color: green; font-weight: bold;">10</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">find_observers:319</td><td style="padding: 1px; color: green; font-weight: bold;">1518</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_move:328</td><td style="padding: 1px; color: green; font-weight: bold;">1822</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_append:388</td><td style="padding: 1px; color: green; font-weight: bold;">22380</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">new_entity:398</td><td style="padding: 1px; color: green; font-weight: bold;">20558</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">entity_move:409</td><td style="padding: 1px; color: green; font-weight: bold;">1822</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">hash:423</td><td style="padding: 1px; color: green; font-weight: bold;">569</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">fetch:427</td><td style="padding: 1px; color: green; font-weight: bold;">1809</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_get:438</td><td style="padding: 1px; color: green; font-weight: bold;">734</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_has_one_inline:469</td><td style="padding: 1px; color: green; font-weight: bold;">892</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_has:485</td><td style="padding: 1px; color: green; font-weight: bold;">80</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_target:507</td><td style="padding: 1px; color: green; font-weight: bold;">1440</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">ECS_ID_IS_WILDCARD:539</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">id_record_ensure:545</td><td style="padding: 1px; color: green; font-weight: bold;">1509</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_append_to_records:608</td><td style="padding: 1px; color: green; font-weight: bold;">1507</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_create:633</td><td style="padding: 1px; color: green; font-weight: bold;">635</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_entity:698</td><td style="padding: 1px; color: green; font-weight: bold;">66852</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_parent:702</td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_ensure:706</td><td style="padding: 1px; color: green; font-weight: bold;">580</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">find_insert:720</td><td style="padding: 1px; color: green; font-weight: bold;">551</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">find_archetype_with:732</td><td style="padding: 1px; color: green; font-weight: bold;">551</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">find_archetype_without:750</td><td style="padding: 1px; color: green; font-weight: bold;">33</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_init_edge:767</td><td style="padding: 1px; color: green; font-weight: bold;">582</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_ensure_edge:778</td><td style="padding: 1px; color: green; font-weight: bold;">22971</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">init_edge_for_add:792</td><td style="padding: 1px; color: green; font-weight: bold;">549</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">init_edge_for_remove:809</td><td style="padding: 1px; color: green; font-weight: bold;">33</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">create_edge_for_add:832</td><td style="padding: 1px; color: green; font-weight: bold;">551</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">create_edge_for_remove:843</td><td style="padding: 1px; color: green; font-weight: bold;">33</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_traverse_add:854</td><td style="padding: 1px; color: green; font-weight: bold;">22092</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_traverse_remove:870</td><td style="padding: 1px; color: green; font-weight: bold;">297</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_add:887</td><td style="padding: 1px; color: green; font-weight: bold;">19316</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_set:919</td><td style="padding: 1px; color: green; font-weight: bold;">2775</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_component:971</td><td style="padding: 1px; color: green; font-weight: bold;">121</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_remove:983</td><td style="padding: 1px; color: green; font-weight: bold;">298</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_fast_delete_last:1008</td><td style="padding: 1px; color: green; font-weight: bold;">76</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_fast_delete:1016</td><td style="padding: 1px; color: green; font-weight: bold;">58</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_delete:1025</td><td style="padding: 1px; color: green; font-weight: bold;">134</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_clear:1064</td><td style="padding: 1px; color: green; font-weight: bold;">6</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_disconnect_edge:1164</td><td style="padding: 1px; color: green; font-weight: bold;">50</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_remove_edge:1175</td><td style="padding: 1px; color: green; font-weight: bold;">23</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_clear_edges:1180</td><td style="padding: 1px; color: green; font-weight: bold;">36</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">archetype_destroy:1213</td><td style="padding: 1px; color: green; font-weight: bold;">37</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_cleanup:1249</td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_delete:1270</td><td style="padding: 1px; color: green; font-weight: bold;">65684</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_contains:1446</td><td style="padding: 1px; color: green; font-weight: bold;">145</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">NOOP:1450</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">query_iter_init:1461</td><td style="padding: 1px; color: green; font-weight: bold;">26</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1527</td><td style="padding: 1px; color: green; font-weight: bold;">556</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1553</td><td style="padding: 1px; color: green; font-weight: bold;">7</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1580</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1608</td><td style="padding: 1px; color: green; font-weight: bold;">2</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1637</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1667</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1698</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1730</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:1764</td><td style="padding: 1px; color: green; font-weight: bold;">2</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">query_iter:1798</td><td style="padding: 1px; color: green; font-weight: bold;">20</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">query_without:1806</td><td style="padding: 1px; color: green; font-weight: bold;">6</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">query_with:1836</td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">query_archetypes:1870</td><td style="padding: 1px; color: green; font-weight: bold;">5</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">query_cached:1874</td><td style="padding: 1px; color: green; font-weight: bold;">6</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">on_create_callback:1924</td><td style="padding: 1px; color: green; font-weight: bold;">4</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">on_delete_callback:1928</td><td style="padding: 1px; color: green; font-weight: bold;">1</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">cached_query_iter:1941</td><td style="padding: 1px; color: green; font-weight: bold;">11</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2001</td><td style="padding: 1px; color: green; font-weight: bold;">11</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2027</td><td style="padding: 1px; color: green; font-weight: bold;">8</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2054</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2082</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2111</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2141</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2172</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2204</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query_iter_next:2238</td><td style="padding: 1px; color: red; font-weight: bold;">0</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_query:2295</td><td style="padding: 1px; color: green; font-weight: bold;">33</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_each:2355</td><td style="padding: 1px; color: green; font-weight: bold;">4</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;"><anonymous>:2372</td><td style="padding: 1px; color: green; font-weight: bold;">12</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_children:2389</td><td style="padding: 1px; color: green; font-weight: bold;">2</td></tr>
<tr><td style="padding: 1px; min-width: 31ch;">world_new:2439</td><td style="padding: 1px; color: green; font-weight: bold;">73</td></tr>
</tbody></table></div>
<h2>Source Code:</h2><table class="table table-bordered source-code-table "><thead><tr><th>Line</th><th>Hits</th><th>Code</th></tr></thead><tbody>
<tr><td>1</td><td><span class='text-muted'>N/A</span></td><td>--!optimize 2</td>></tr>
<tr><td>2</td><td><span class='text-muted'>N/A</span></td><td>--!native</td>></tr>
<tr><td>3</td><td><span class='text-muted'>N/A</span></td><td>--!strict</td>></tr>
<tr><td>4</td><td><span class='text-muted'>N/A</span></td><td>--draft 4</td>></tr>
<tr><td>5</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>6</td><td>0</td><td><span class=zero-hits>type i53 = number</span></td></tr>
<tr><td>7</td><td>0</td><td><span class=zero-hits>type i24 = number</span></td></tr>
<tr><td>8</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>9</td><td>0</td><td><span class=zero-hits>type Ty = { i53 }</span></td></tr>
<tr><td>10</td><td>0</td><td><span class=zero-hits>type ArchetypeId = number</span></td></tr>
<tr><td>11</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>12</td><td>0</td><td><span class=zero-hits>type Column = { any }</span></td></tr>
<tr><td>13</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>14</td><td>0</td><td><span class=zero-hits>type Map<K, V> = { [K]: V }</span></td></tr>
<tr><td>15</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>16</td><td>0</td><td><span class=zero-hits>type ecs_graph_edge_t = {</span></td></tr>
<tr><td>17</td><td>0</td><td><span class=zero-hits>from: ecs_archetype_t,</span></td></tr>
<tr><td>18</td><td>0</td><td><span class=zero-hits>to: ecs_archetype_t?,</span></td></tr>
<tr><td>19</td><td>0</td><td><span class=zero-hits>id: number,</span></td></tr>
<tr><td>20</td><td>0</td><td><span class=zero-hits>prev: ecs_graph_edge_t?,</span></td></tr>
<tr><td>21</td><td>0</td><td><span class=zero-hits>next: ecs_graph_edge_t?,</span></td></tr>
<tr><td>22</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>23</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>24</td><td>0</td><td><span class=zero-hits>type ecs_graph_edges_t = Map<i53, ecs_graph_edge_t></span></td></tr>
<tr><td>25</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>26</td><td>0</td><td><span class=zero-hits>type ecs_graph_node_t = {</span></td></tr>
<tr><td>27</td><td>0</td><td><span class=zero-hits>add: ecs_graph_edges_t,</span></td></tr>
<tr><td>28</td><td>0</td><td><span class=zero-hits>remove: ecs_graph_edges_t,</span></td></tr>
<tr><td>29</td><td>0</td><td><span class=zero-hits>refs: ecs_graph_edge_t,</span></td></tr>
<tr><td>30</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>31</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>32</td><td>0</td><td><span class=zero-hits>type ecs_archetype_t = {</span></td></tr>
<tr><td>33</td><td>0</td><td><span class=zero-hits>id: number,</span></td></tr>
<tr><td>34</td><td>0</td><td><span class=zero-hits>types: Ty,</span></td></tr>
<tr><td>35</td><td>0</td><td><span class=zero-hits>type: string,</span></td></tr>
<tr><td>36</td><td>0</td><td><span class=zero-hits>entities: { number },</span></td></tr>
<tr><td>37</td><td>0</td><td><span class=zero-hits>columns: { Column },</span></td></tr>
<tr><td>38</td><td>0</td><td><span class=zero-hits>records: { [i53]: number },</span></td></tr>
<tr><td>39</td><td>0</td><td><span class=zero-hits>counts: { [i53]: number },</span></td></tr>
<tr><td>40</td><td>0</td><td><span class=zero-hits>} & ecs_graph_node_t</span></td></tr>
<tr><td>41</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>42</td><td>0</td><td><span class=zero-hits>export type Archetype = {</span></td></tr>
<tr><td>43</td><td>0</td><td><span class=zero-hits>id: number,</span></td></tr>
<tr><td>44</td><td>0</td><td><span class=zero-hits>types: Ty,</span></td></tr>
<tr><td>45</td><td>0</td><td><span class=zero-hits>type: string,</span></td></tr>
<tr><td>46</td><td>0</td><td><span class=zero-hits>entities: { number },</span></td></tr>
<tr><td>47</td><td>0</td><td><span class=zero-hits>columns: { Column },</span></td></tr>
<tr><td>48</td><td>0</td><td><span class=zero-hits>records: { [Id]: number },</span></td></tr>
<tr><td>49</td><td>0</td><td><span class=zero-hits>counts: { [Id]: number },</span></td></tr>
<tr><td>50</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>51</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>52</td><td>0</td><td><span class=zero-hits>type ecs_record_t = {</span></td></tr>
<tr><td>53</td><td>0</td><td><span class=zero-hits>archetype: ecs_archetype_t,</span></td></tr>
<tr><td>54</td><td>0</td><td><span class=zero-hits>row: number,</span></td></tr>
<tr><td>55</td><td>0</td><td><span class=zero-hits>dense: i24,</span></td></tr>
<tr><td>56</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>57</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>58</td><td>0</td><td><span class=zero-hits>type ecs_id_record_t = {</span></td></tr>
<tr><td>59</td><td>0</td><td><span class=zero-hits>cache: { number },</span></td></tr>
<tr><td>60</td><td>0</td><td><span class=zero-hits>counts: { number },</span></td></tr>
<tr><td>61</td><td>0</td><td><span class=zero-hits>flags: number,</span></td></tr>
<tr><td>62</td><td>0</td><td><span class=zero-hits>size: number,</span></td></tr>
<tr><td>63</td><td>0</td><td><span class=zero-hits>hooks: {</span></td></tr>
<tr><td>64</td><td>0</td><td><span class=zero-hits>on_add: ((entity: i53) -> ())?,</span></td></tr>
<tr><td>65</td><td>0</td><td><span class=zero-hits>on_set: ((entity: i53, data: any) -> ())?,</span></td></tr>
<tr><td>66</td><td>0</td><td><span class=zero-hits>on_remove: ((entity: i53) -> ())?,</span></td></tr>
<tr><td>67</td><td>0</td><td><span class=zero-hits>},</span></td></tr>
<tr><td>68</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>69</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>70</td><td>0</td><td><span class=zero-hits>type ecs_id_index_t = Map<i53, ecs_id_record_t></span></td></tr>
<tr><td>71</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>72</td><td>0</td><td><span class=zero-hits>type ecs_archetypes_map_t = { [string]: ecs_archetype_t }</span></td></tr>
<tr><td>73</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>74</td><td>0</td><td><span class=zero-hits>type ecs_archetypes_t = { ecs_archetype_t }</span></td></tr>
<tr><td>75</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>76</td><td>0</td><td><span class=zero-hits>type ecs_entity_index_t = {</span></td></tr>
<tr><td>77</td><td>0</td><td><span class=zero-hits>dense_array: Map<number, i53>,</span></td></tr>
<tr><td>78</td><td>0</td><td><span class=zero-hits>sparse_array: Map<i24, ecs_record_t>,</span></td></tr>
<tr><td>79</td><td>0</td><td><span class=zero-hits>alive_count: number,</span></td></tr>
<tr><td>80</td><td>0</td><td><span class=zero-hits>max_id: number,</span></td></tr>
<tr><td>81</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>82</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>83</td><td>0</td><td><span class=zero-hits>type ecs_query_data_t = {</span></td></tr>
<tr><td>84</td><td>0</td><td><span class=zero-hits>compatible_archetypes: { ecs_archetype_t },</span></td></tr>
<tr><td>85</td><td>0</td><td><span class=zero-hits>ids: { i53 },</span></td></tr>
<tr><td>86</td><td>0</td><td><span class=zero-hits>filter_with: { i53 },</span></td></tr>
<tr><td>87</td><td>0</td><td><span class=zero-hits>filter_without: { i53 },</span></td></tr>
<tr><td>88</td><td>0</td><td><span class=zero-hits>next: () -> (number, ...any),</span></td></tr>
<tr><td>89</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>90</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>91</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>92</td><td>0</td><td><span class=zero-hits>type ecs_observer_t = {</span></td></tr>
<tr><td>93</td><td>0</td><td><span class=zero-hits>callback: (archetype: ecs_archetype_t) -> (),</span></td></tr>
<tr><td>94</td><td>0</td><td><span class=zero-hits>query: ecs_query_data_t,</span></td></tr>
<tr><td>95</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>96</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>97</td><td>0</td><td><span class=zero-hits>type ecs_observable_t = Map<i53, Map<i53, { ecs_observer_t }>></span></td></tr>
<tr><td>98</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>99</td><td>0</td><td><span class=zero-hits>type ecs_world_t = {</span></td></tr>
<tr><td>100</td><td>0</td><td><span class=zero-hits>entity_index: ecs_entity_index_t,</span></td></tr>
<tr><td>101</td><td>0</td><td><span class=zero-hits>component_index: ecs_id_index_t,</span></td></tr>
<tr><td>102</td><td>0</td><td><span class=zero-hits>archetypes: ecs_archetypes_t,</span></td></tr>
<tr><td>103</td><td>0</td><td><span class=zero-hits>archetype_index: ecs_archetypes_map_t,</span></td></tr>
<tr><td>104</td><td>0</td><td><span class=zero-hits>max_archetype_id: number,</span></td></tr>
<tr><td>105</td><td>0</td><td><span class=zero-hits>max_component_id: number,</span></td></tr>
<tr><td>106</td><td>0</td><td><span class=zero-hits>ROOT_ARCHETYPE: ecs_archetype_t,</span></td></tr>
<tr><td>107</td><td>0</td><td><span class=zero-hits>observable: Map<i53, Map<i53, { ecs_observer_t }>>,</span></td></tr>
<tr><td>108</td><td>1</td><td><span class=low-hits>}</span></td></tr>
<tr><td>109</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>110</td><td>1</td><td><span class=low-hits>local HI_COMPONENT_ID = _G.__JECS_HI_COMPONENT_ID or 256</span></td></tr>
<tr><td>111</td><td><span class='text-muted'>N/A</span></td><td>-- stylua: ignore start</td>></tr>
<tr><td>112</td><td>1</td><td><span class=low-hits>local EcsOnAdd = HI_COMPONENT_ID + 1</span></td></tr>
<tr><td>113</td><td>1</td><td><span class=low-hits>local EcsOnRemove = HI_COMPONENT_ID + 2</span></td></tr>
<tr><td>114</td><td>1</td><td><span class=low-hits>local EcsOnSet = HI_COMPONENT_ID + 3</span></td></tr>
<tr><td>115</td><td>1</td><td><span class=low-hits>local EcsWildcard = HI_COMPONENT_ID + 4</span></td></tr>
<tr><td>116</td><td>1</td><td><span class=low-hits>local EcsChildOf = HI_COMPONENT_ID + 5</span></td></tr>
<tr><td>117</td><td>1</td><td><span class=low-hits>local EcsComponent = HI_COMPONENT_ID + 6</span></td></tr>
<tr><td>118</td><td>1</td><td><span class=low-hits>local EcsOnDelete = HI_COMPONENT_ID + 7</span></td></tr>
<tr><td>119</td><td>1</td><td><span class=low-hits>local EcsOnDeleteTarget = HI_COMPONENT_ID + 8</span></td></tr>
<tr><td>120</td><td>1</td><td><span class=low-hits>local EcsDelete = HI_COMPONENT_ID + 9</span></td></tr>
<tr><td>121</td><td>1</td><td><span class=low-hits>local EcsRemove = HI_COMPONENT_ID + 10</span></td></tr>
<tr><td>122</td><td>1</td><td><span class=low-hits>local EcsName = HI_COMPONENT_ID + 11</span></td></tr>
<tr><td>123</td><td>1</td><td><span class=low-hits>local EcsOnArchetypeCreate = HI_COMPONENT_ID + 12</span></td></tr>
<tr><td>124</td><td>0</td><td><span class=zero-hits>local EcsOnArchetypeDelete = HI_COMPONENT_ID + 13</span></td></tr>
<tr><td>125</td><td>1</td><td><span class=low-hits>local EcsRest = HI_COMPONENT_ID + 14</span></td></tr>
<tr><td>126</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>127</td><td>1</td><td><span class=low-hits>local ECS_ID_DELETE = 0b0000_0001</span></td></tr>
<tr><td>128</td><td>1</td><td><span class=low-hits>local ECS_ID_IS_TAG = 0b0000_0010</span></td></tr>
<tr><td>129</td><td>1</td><td><span class=low-hits>local ECS_ID_HAS_ON_ADD = 0b0000_0100</span></td></tr>
<tr><td>130</td><td>1</td><td><span class=low-hits>local ECS_ID_HAS_ON_SET = 0b0000_1000</span></td></tr>
<tr><td>131</td><td>0</td><td><span class=zero-hits>local ECS_ID_HAS_ON_REMOVE = 0b0001_0000</span></td></tr>
<tr><td>132</td><td>1</td><td><span class=low-hits>local ECS_ID_MASK = 0b0000_0000</span></td></tr>
<tr><td>133</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>134</td><td>0</td><td><span class=zero-hits>local ECS_ENTITY_MASK = bit32.lshift(1, 24)</span></td></tr>
<tr><td>135</td><td>1</td><td><span class=low-hits>local ECS_GENERATION_MASK = bit32.lshift(1, 16)</span></td></tr>
<tr><td>136</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>137</td><td>0</td><td><span class=zero-hits>local NULL_ARRAY = table.freeze({})</span></td></tr>
<tr><td>138</td><td>0</td><td><span class=zero-hits>local ECS_INTERNAL_ERROR = [[</span></td></tr>
<tr><td>139</td><td>0</td><td><span class=zero-hits>This is an internal error, please file a bug report via the following link:</span></td></tr>
<tr><td>140</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>141</td><td>0</td><td><span class=zero-hits>https://github.com/Ukendio/jecs/issues/new?template=BUG-REPORT.md</span></td></tr>
<tr><td>142</td><td>1</td><td><span class=low-hits>]]</span></td></tr>
<tr><td>143</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>144</td><td>0</td><td><span class=zero-hits>local function ECS_COMBINE(id: number, generation: number): i53</span></td></tr>
<tr><td>145</td><td>1</td><td><span class=low-hits>return id + (generation * ECS_ENTITY_MASK)</span></td></tr>
<tr><td>146</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>147</td><td>1</td><td><span class=low-hits>local ECS_PAIR_OFFSET = 2^48</span></td></tr>
<tr><td>148</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>149</td><td>0</td><td><span class=zero-hits>local function ECS_IS_PAIR(e: number): boolean</span></td></tr>
<tr><td>150</td><td>0</td><td><span class=zero-hits>return e > ECS_PAIR_OFFSET</span></td></tr>
<tr><td>151</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>152</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>153</td><td>65540</td><td><span class=high-hits>local function ECS_GENERATION_INC(e: i53): i53</span></td></tr>
<tr><td>154</td><td>65540</td><td><span class=high-hits>if e > ECS_ENTITY_MASK then</span></td></tr>
<tr><td>155</td><td>0</td><td><span class=zero-hits>local id = e % ECS_ENTITY_MASK</span></td></tr>
<tr><td>156</td><td>65540</td><td><span class=high-hits>local generation = e // ECS_ENTITY_MASK</span></td></tr>
<tr><td>157</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>158</td><td>1</td><td><span class=low-hits>local next_gen = generation + 1</span></td></tr>
<tr><td>159</td><td>0</td><td><span class=zero-hits>if next_gen >= ECS_GENERATION_MASK then</span></td></tr>
<tr><td>160</td><td>0</td><td><span class=zero-hits>return id</span></td></tr>
<tr><td>161</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>162</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>163</td><td>144</td><td><span class=low-hits>return ECS_COMBINE(id, next_gen)</span></td></tr>
<tr><td>164</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>165</td><td>0</td><td><span class=zero-hits>return ECS_COMBINE(e, 1)</span></td></tr>
<tr><td>166</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>167</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>168</td><td>0</td><td><span class=zero-hits>local function ECS_ENTITY_T_LO(e: i53): i24</span></td></tr>
<tr><td>169</td><td>0</td><td><span class=zero-hits>return e % ECS_ENTITY_MASK</span></td></tr>
<tr><td>170</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>171</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>172</td><td>0</td><td><span class=zero-hits>local function ECS_GENERATION(e: i53)</span></td></tr>
<tr><td>173</td><td>0</td><td><span class=zero-hits>return e // ECS_ENTITY_MASK</span></td></tr>
<tr><td>174</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>175</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>176</td><td>0</td><td><span class=zero-hits>local function ECS_ENTITY_T_HI(e: i53): i24</span></td></tr>
<tr><td>177</td><td>0</td><td><span class=zero-hits>return e // ECS_ENTITY_MASK</span></td></tr>
<tr><td>178</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>179</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>180</td><td>133381</td><td><span class=high-hits>local function ECS_PAIR(pred: i53, obj: i53): i53</span></td></tr>
<tr><td>181</td><td>0</td><td><span class=zero-hits>pred %= ECS_ENTITY_MASK</span></td></tr>
<tr><td>182</td><td>133381</td><td><span class=high-hits>obj %= ECS_ENTITY_MASK</span></td></tr>
<tr><td>183</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>184</td><td>0</td><td><span class=zero-hits>return obj + (pred * ECS_ENTITY_MASK) + ECS_PAIR_OFFSET</span></td></tr>
<tr><td>185</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>186</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>187</td><td>0</td><td><span class=zero-hits>local function ECS_PAIR_FIRST(e: i53): i24</span></td></tr>
<tr><td>188</td><td>0</td><td><span class=zero-hits>return (e - ECS_PAIR_OFFSET) // ECS_ENTITY_MASK</span></td></tr>
<tr><td>189</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>190</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>191</td><td>0</td><td><span class=zero-hits>local function ECS_PAIR_SECOND(e: i53): i24</span></td></tr>
<tr><td>192</td><td>0</td><td><span class=zero-hits>return (e - ECS_PAIR_OFFSET) % ECS_ENTITY_MASK</span></td></tr>
<tr><td>193</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>194</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>195</td><td>0</td><td><span class=zero-hits>local function entity_index_try_get_any(</span></td></tr>
<tr><td>196</td><td>0</td><td><span class=zero-hits>entity_index: ecs_entity_index_t,</span></td></tr>
<tr><td>197</td><td>133207</td><td><span class=high-hits>entity: number</span></td></tr>
<tr><td>198</td><td>0</td><td><span class=zero-hits>): ecs_record_t?</span></td></tr>
<tr><td>199</td><td>133207</td><td><span class=high-hits>local r = entity_index.sparse_array[ECS_ENTITY_T_LO(entity)]</span></td></tr>
<tr><td>200</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>201</td><td>0</td><td><span class=zero-hits>if not r or r.dense == 0 then</span></td></tr>
<tr><td>202</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>203</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>204</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>205</td><td>0</td><td><span class=zero-hits>return r</span></td></tr>
<tr><td>206</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>207</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>208</td><td>66607</td><td><span class=high-hits>local function entity_index_try_get(entity_index: ecs_entity_index_t, entity: number): ecs_record_t?</span></td></tr>
<tr><td>209</td><td>66607</td><td><span class=high-hits>local r = entity_index_try_get_any(entity_index, entity)</span></td></tr>
<tr><td>210</td><td>66607</td><td><span class=high-hits>if r then</span></td></tr>
<tr><td>211</td><td>130</td><td><span class=low-hits>local r_dense = r.dense</span></td></tr>
<tr><td>212</td><td>0</td><td><span class=zero-hits>if r_dense > entity_index.alive_count then</span></td></tr>
<tr><td>213</td><td>66477</td><td><span class=high-hits>return nil</span></td></tr>
<tr><td>214</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>215</td><td>0</td><td><span class=zero-hits>if entity_index.dense_array[r_dense] ~= entity then</span></td></tr>
<tr><td>216</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>217</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>218</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>219</td><td>0</td><td><span class=zero-hits>return r</span></td></tr>
<tr><td>220</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>221</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>222</td><td>25535</td><td><span class=low-hits>local function entity_index_try_get_fast(entity_index: ecs_entity_index_t, entity: number): ecs_record_t?</span></td></tr>
<tr><td>223</td><td>25243</td><td><span class=low-hits>local r = entity_index.sparse_array[ECS_ENTITY_T_LO(entity)]</span></td></tr>
<tr><td>224</td><td>24</td><td><span class=low-hits>if r then</span></td></tr>
<tr><td>225</td><td>0</td><td><span class=zero-hits>if entity_index.dense_array[r.dense] ~= entity then</span></td></tr>
<tr><td>226</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>227</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>228</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>229</td><td>0</td><td><span class=zero-hits>return r</span></td></tr>
<tr><td>230</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>231</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>232</td><td>0</td><td><span class=zero-hits>local function entity_index_is_alive(entity_index: ecs_entity_index_t, entity: i53)</span></td></tr>
<tr><td>233</td><td>0</td><td><span class=zero-hits>return entity_index_try_get(entity_index, entity) ~= nil</span></td></tr>
<tr><td>234</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>235</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>236</td><td>842</td><td><span class=low-hits>local function entity_index_get_alive(index: ecs_entity_index_t, entity: i53): i53?</span></td></tr>
<tr><td>237</td><td>842</td><td><span class=low-hits>local r = entity_index_try_get_any(index, entity)</span></td></tr>
<tr><td>238</td><td>0</td><td><span class=zero-hits>if r then</span></td></tr>
<tr><td>239</td><td>0</td><td><span class=zero-hits>return index.dense_array[r.dense]</span></td></tr>
<tr><td>240</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>241</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>242</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>243</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>244</td><td>0</td><td><span class=zero-hits>local function ecs_get_alive(world, entity)</span></td></tr>
<tr><td>245</td><td>0</td><td><span class=zero-hits>if entity == 0 then</span></td></tr>
<tr><td>246</td><td>0</td><td><span class=zero-hits>return 0</span></td></tr>
<tr><td>247</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>248</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>249</td><td>9</td><td><span class=low-hits>local eindex = world.entity_index</span></td></tr>
<tr><td>250</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>251</td><td>0</td><td><span class=zero-hits>if entity_index_is_alive(eindex, entity) then</span></td></tr>
<tr><td>252</td><td>0</td><td><span class=zero-hits>return entity</span></td></tr>
<tr><td>253</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>254</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>255</td><td>0</td><td><span class=zero-hits>if entity > ECS_ENTITY_MASK then</span></td></tr>
<tr><td>256</td><td>0</td><td><span class=zero-hits>return 0</span></td></tr>
<tr><td>257</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>258</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>259</td><td>1</td><td><span class=low-hits>local current = entity_index_get_alive(eindex, entity)</span></td></tr>
<tr><td>260</td><td>0</td><td><span class=zero-hits>if not current or not entity_index_is_alive(eindex, current) then</span></td></tr>
<tr><td>261</td><td>0</td><td><span class=zero-hits>return 0</span></td></tr>
<tr><td>262</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>263</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>264</td><td>0</td><td><span class=zero-hits>return current</span></td></tr>
<tr><td>265</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>266</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>267</td><td>86562</td><td><span class=high-hits>local function entity_index_new_id(entity_index: ecs_entity_index_t): i53</span></td></tr>
<tr><td>268</td><td>86562</td><td><span class=high-hits>local dense_array = entity_index.dense_array</span></td></tr>
<tr><td>269</td><td>86562</td><td><span class=high-hits>local alive_count = entity_index.alive_count</span></td></tr>
<tr><td>270</td><td>65559</td><td><span class=high-hits>local max_id = entity_index.max_id</span></td></tr>
<tr><td>271</td><td>65559</td><td><span class=high-hits>if alive_count ~= max_id then</span></td></tr>
<tr><td>272</td><td>65559</td><td><span class=high-hits>alive_count += 1</span></td></tr>
<tr><td>273</td><td>65559</td><td><span class=high-hits>entity_index.alive_count = alive_count</span></td></tr>
<tr><td>274</td><td>0</td><td><span class=zero-hits>local id = dense_array[alive_count]</span></td></tr>
<tr><td>275</td><td>0</td><td><span class=zero-hits>return id</span></td></tr>
<tr><td>276</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>277</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>278</td><td>21003</td><td><span class=low-hits>local id = max_id + 1</span></td></tr>
<tr><td>279</td><td>21003</td><td><span class=low-hits>entity_index.max_id = id</span></td></tr>
<tr><td>280</td><td>21003</td><td><span class=low-hits>alive_count += 1</span></td></tr>
<tr><td>281</td><td>21003</td><td><span class=low-hits>entity_index.alive_count = alive_count</span></td></tr>
<tr><td>282</td><td>0</td><td><span class=zero-hits>dense_array[alive_count] = id</span></td></tr>
<tr><td>283</td><td>21003</td><td><span class=low-hits>entity_index.sparse_array[id] = { dense = alive_count } :: ecs_record_t</span></td></tr>
<tr><td>284</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>285</td><td>0</td><td><span class=zero-hits>return id</span></td></tr>
<tr><td>286</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>287</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>288</td><td>4</td><td><span class=low-hits>local function ecs_pair_first(world: ecs_world_t, e: i53)</span></td></tr>
<tr><td>289</td><td>0</td><td><span class=zero-hits>local pred = ECS_PAIR_FIRST(e)</span></td></tr>
<tr><td>290</td><td>0</td><td><span class=zero-hits>return ecs_get_alive(world, pred)</span></td></tr>
<tr><td>291</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>292</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>293</td><td>5</td><td><span class=low-hits>local function ecs_pair_second(world: ecs_world_t, e: i53)</span></td></tr>
<tr><td>294</td><td>0</td><td><span class=zero-hits>local obj = ECS_PAIR_SECOND(e)</span></td></tr>
<tr><td>295</td><td>0</td><td><span class=zero-hits>return ecs_get_alive(world, obj)</span></td></tr>
<tr><td>296</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>297</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>298</td><td>10</td><td><span class=low-hits>local function query_match(query: ecs_query_data_t,</span></td></tr>
<tr><td>299</td><td>10</td><td><span class=low-hits>archetype: ecs_archetype_t)</span></td></tr>
<tr><td>300</td><td>0</td><td><span class=zero-hits>local records = archetype.records</span></td></tr>
<tr><td>301</td><td>10</td><td><span class=low-hits>local with = query.filter_with</span></td></tr>
<tr><td>302</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>303</td><td>3</td><td><span class=low-hits>for _, id in with do</span></td></tr>
<tr><td>304</td><td>0</td><td><span class=zero-hits>if not records[id] then</span></td></tr>
<tr><td>305</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
<tr><td>306</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>307</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>308</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>309</td><td>6</td><td><span class=low-hits>local without = query.filter_without</span></td></tr>
<tr><td>310</td><td>8</td><td><span class=low-hits>if without then</span></td></tr>
<tr><td>311</td><td>2</td><td><span class=low-hits>for _, id in without do</span></td></tr>
<tr><td>312</td><td>0</td><td><span class=zero-hits>if records[id] then</span></td></tr>
<tr><td>313</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
<tr><td>314</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>315</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>316</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>317</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>318</td><td>0</td><td><span class=zero-hits>return true</span></td></tr>
<tr><td>319</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>320</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>321</td><td>1518</td><td><span class=low-hits>local function find_observers(world: ecs_world_t, event: i53,</span></td></tr>
<tr><td>322</td><td>1518</td><td><span class=low-hits>component: i53): { ecs_observer_t }?</span></td></tr>
<tr><td>323</td><td>1499</td><td><span class=low-hits>local cache = world.observable[event]</span></td></tr>
<tr><td>324</td><td>0</td><td><span class=zero-hits>if not cache then</span></td></tr>
<tr><td>325</td><td>19</td><td><span class=low-hits>return nil</span></td></tr>
<tr><td>326</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>327</td><td>0</td><td><span class=zero-hits>return cache[component] :: any</span></td></tr>
<tr><td>328</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>329</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>330</td><td>0</td><td><span class=zero-hits>local function archetype_move(</span></td></tr>
<tr><td>331</td><td>0</td><td><span class=zero-hits>entity_index: ecs_entity_index_t,</span></td></tr>
<tr><td>332</td><td>0</td><td><span class=zero-hits>to: ecs_archetype_t,</span></td></tr>
<tr><td>333</td><td>0</td><td><span class=zero-hits>dst_row: i24,</span></td></tr>
<tr><td>334</td><td>0</td><td><span class=zero-hits>from: ecs_archetype_t,</span></td></tr>
<tr><td>335</td><td>1822</td><td><span class=low-hits>src_row: i24</span></td></tr>
<tr><td>336</td><td>1822</td><td><span class=low-hits>)</span></td></tr>
<tr><td>337</td><td>1822</td><td><span class=low-hits>local src_columns = from.columns</span></td></tr>
<tr><td>338</td><td>1822</td><td><span class=low-hits>local dst_columns = to.columns</span></td></tr>
<tr><td>339</td><td>0</td><td><span class=zero-hits>local dst_entities = to.entities</span></td></tr>
<tr><td>340</td><td>1822</td><td><span class=low-hits>local src_entities = from.entities</span></td></tr>
<tr><td>341</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>342</td><td>1822</td><td><span class=low-hits>local last = #src_entities</span></td></tr>
<tr><td>343</td><td>0</td><td><span class=zero-hits>local id_types = from.types</span></td></tr>
<tr><td>344</td><td>1822</td><td><span class=low-hits>local records = to.records</span></td></tr>
<tr><td>345</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>346</td><td>0</td><td><span class=zero-hits>for i, column in src_columns do</span></td></tr>
<tr><td>347</td><td>0</td><td><span class=zero-hits>if column == NULL_ARRAY then</span></td></tr>
<tr><td>348</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>349</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>350</td><td><span class='text-muted'>N/A</span></td><td>-- Retrieves the new column index from the source archetype's record from each component</td>></tr>
<tr><td>351</td><td><span class='text-muted'>N/A</span></td><td>-- We have to do this because the columns are tightly packed and indexes may not correspond to each other.</td>></tr>
<tr><td>352</td><td>0</td><td><span class=zero-hits>local tr = records[id_types[i]]</span></td></tr>
<tr><td>353</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>354</td><td><span class='text-muted'>N/A</span></td><td>-- Sometimes target column may not exist, e.g. when you remove a component.</td>></tr>
<tr><td>355</td><td>0</td><td><span class=zero-hits>if tr then</span></td></tr>
<tr><td>356</td><td>0</td><td><span class=zero-hits>dst_columns[tr][dst_row] = column[src_row]</span></td></tr>
<tr><td>357</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>358</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>359</td><td><span class='text-muted'>N/A</span></td><td>-- If the entity is the last row in the archetype then swapping it would be meaningless.</td>></tr>
<tr><td>360</td><td>95</td><td><span class=low-hits>if src_row ~= last then</span></td></tr>
<tr><td>361</td><td><span class='text-muted'>N/A</span></td><td>-- Swap rempves columns to ensure there are no holes in the archetype.</td>></tr>
<tr><td>362</td><td>1739</td><td><span class=low-hits>column[src_row] = column[last]</span></td></tr>
<tr><td>363</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>364</td><td>0</td><td><span class=zero-hits>column[last] = nil</span></td></tr>
<tr><td>365</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>366</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>367</td><td>0</td><td><span class=zero-hits>local moved = #src_entities</span></td></tr>
<tr><td>368</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>369</td><td><span class='text-muted'>N/A</span></td><td>-- Move the entity from the source to the destination archetype.</td>></tr>
<tr><td>370</td><td><span class='text-muted'>N/A</span></td><td>-- Because we have swapped columns we now have to update the records</td>></tr>
<tr><td>371</td><td><span class='text-muted'>N/A</span></td><td>-- corresponding to the entities' rows that were swapped.</td>></tr>
<tr><td>372</td><td>0</td><td><span class=zero-hits>local e1 = src_entities[src_row]</span></td></tr>
<tr><td>373</td><td>1822</td><td><span class=low-hits>local e2 = src_entities[moved]</span></td></tr>
<tr><td>374</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>375</td><td>0</td><td><span class=zero-hits>if src_row ~= moved then</span></td></tr>
<tr><td>376</td><td>0</td><td><span class=zero-hits>src_entities[src_row] = e2</span></td></tr>
<tr><td>377</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>378</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>379</td><td>0</td><td><span class=zero-hits>src_entities[moved] = nil :: any</span></td></tr>
<tr><td>380</td><td>1822</td><td><span class=low-hits>dst_entities[dst_row] = e1</span></td></tr>
<tr><td>381</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>382</td><td>1822</td><td><span class=low-hits>local sparse_array = entity_index.sparse_array</span></td></tr>
<tr><td>383</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>384</td><td>1822</td><td><span class=low-hits>local record1 = sparse_array[ECS_ENTITY_T_LO(e1)]</span></td></tr>
<tr><td>385</td><td>1822</td><td><span class=low-hits>local record2 = sparse_array[ECS_ENTITY_T_LO(e2)]</span></td></tr>
<tr><td>386</td><td>0</td><td><span class=zero-hits>record1.row = dst_row</span></td></tr>
<tr><td>387</td><td>0</td><td><span class=zero-hits>record2.row = src_row</span></td></tr>
<tr><td>388</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>389</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>390</td><td>0</td><td><span class=zero-hits>local function archetype_append(</span></td></tr>
<tr><td>391</td><td>0</td><td><span class=zero-hits>entity: i53,</span></td></tr>
<tr><td>392</td><td>22380</td><td><span class=low-hits>archetype: ecs_archetype_t</span></td></tr>
<tr><td>393</td><td>22380</td><td><span class=low-hits>): number</span></td></tr>
<tr><td>394</td><td>22380</td><td><span class=low-hits>local entities = archetype.entities</span></td></tr>
<tr><td>395</td><td>22380</td><td><span class=low-hits>local length = #entities + 1</span></td></tr>
<tr><td>396</td><td>0</td><td><span class=zero-hits>entities[length] = entity</span></td></tr>
<tr><td>397</td><td>0</td><td><span class=zero-hits>return length</span></td></tr>
<tr><td>398</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>399</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>400</td><td>0</td><td><span class=zero-hits>local function new_entity(</span></td></tr>
<tr><td>401</td><td>0</td><td><span class=zero-hits>entity: i53,</span></td></tr>
<tr><td>402</td><td>0</td><td><span class=zero-hits>record: ecs_record_t,</span></td></tr>
<tr><td>403</td><td>20558</td><td><span class=low-hits>archetype: ecs_archetype_t</span></td></tr>
<tr><td>404</td><td>20558</td><td><span class=low-hits>): ecs_record_t</span></td></tr>
<tr><td>405</td><td>20558</td><td><span class=low-hits>local row = archetype_append(entity, archetype)</span></td></tr>
<tr><td>406</td><td>20558</td><td><span class=low-hits>record.archetype = archetype</span></td></tr>
<tr><td>407</td><td>0</td><td><span class=zero-hits>record.row = row</span></td></tr>
<tr><td>408</td><td>0</td><td><span class=zero-hits>return record</span></td></tr>
<tr><td>409</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>410</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>411</td><td>0</td><td><span class=zero-hits>local function entity_move(</span></td></tr>
<tr><td>412</td><td>0</td><td><span class=zero-hits>entity_index: ecs_entity_index_t,</span></td></tr>
<tr><td>413</td><td>0</td><td><span class=zero-hits>entity: i53,</span></td></tr>
<tr><td>414</td><td>0</td><td><span class=zero-hits>record: ecs_record_t,</span></td></tr>
<tr><td>415</td><td>1822</td><td><span class=low-hits>to: ecs_archetype_t</span></td></tr>
<tr><td>416</td><td>1822</td><td><span class=low-hits>)</span></td></tr>
<tr><td>417</td><td>1822</td><td><span class=low-hits>local sourceRow = record.row</span></td></tr>
<tr><td>418</td><td>1822</td><td><span class=low-hits>local from = record.archetype</span></td></tr>
<tr><td>419</td><td>1822</td><td><span class=low-hits>local dst_row = archetype_append(entity, to)</span></td></tr>
<tr><td>420</td><td>1822</td><td><span class=low-hits>archetype_move(entity_index, to, dst_row, from, sourceRow)</span></td></tr>
<tr><td>421</td><td>0</td><td><span class=zero-hits>record.archetype = to</span></td></tr>
<tr><td>422</td><td>0</td><td><span class=zero-hits>record.row = dst_row</span></td></tr>
<tr><td>423</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>424</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>425</td><td>0</td><td><span class=zero-hits>local function hash(arr: { number }): string</span></td></tr>
<tr><td>426</td><td>0</td><td><span class=zero-hits>return table.concat(arr, "_")</span></td></tr>
<tr><td>427</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>428</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>429</td><td>1809</td><td><span class=low-hits>local function fetch(id: i53, records: { number },</span></td></tr>
<tr><td>430</td><td>0</td><td><span class=zero-hits>columns: { Column }, row: number): any</span></td></tr>
<tr><td>431</td><td>1809</td><td><span class=low-hits>local tr = records[id]</span></td></tr>
<tr><td>432</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>433</td><td>0</td><td><span class=zero-hits>if not tr then</span></td></tr>
<tr><td>434</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>435</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>436</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>437</td><td>0</td><td><span class=zero-hits>return columns[tr][row]</span></td></tr>
<tr><td>438</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>439</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>440</td><td>734</td><td><span class=low-hits>local function world_get(world: ecs_world_t, entity: i53,</span></td></tr>
<tr><td>441</td><td>734</td><td><span class=low-hits>a: i53, b: i53?, c: i53?, d: i53?, e: i53?): ...any</span></td></tr>
<tr><td>442</td><td>75</td><td><span class=low-hits>local record = entity_index_try_get_fast(world.entity_index, entity)</span></td></tr>
<tr><td>443</td><td>0</td><td><span class=zero-hits>if not record then</span></td></tr>
<tr><td>444</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>445</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>446</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>447</td><td>36</td><td><span class=low-hits>local archetype = record.archetype</span></td></tr>
<tr><td>448</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>449</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>450</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>451</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>452</td><td>623</td><td><span class=low-hits>local records = archetype.records</span></td></tr>
<tr><td>453</td><td>0</td><td><span class=zero-hits>local columns = archetype.columns</span></td></tr>
<tr><td>454</td><td>623</td><td><span class=low-hits>local row = record.row</span></td></tr>
<tr><td>455</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>456</td><td>623</td><td><span class=low-hits>local va = fetch(a, records, columns, row)</span></td></tr>
<tr><td>457</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>458</td><td>593</td><td><span class=low-hits>if not b then</span></td></tr>
<tr><td>459</td><td>0</td><td><span class=zero-hits>return va</span></td></tr>
<tr><td>460</td><td>593</td><td><span class=low-hits>elseif not c then</span></td></tr>
<tr><td>461</td><td>593</td><td><span class=low-hits>return va, fetch(b, records, columns, row)</span></td></tr>
<tr><td>462</td><td>0</td><td><span class=zero-hits>elseif not d then</span></td></tr>
<tr><td>463</td><td>0</td><td><span class=zero-hits>return va, fetch(b, records, columns, row), fetch(c, records, columns, row)</span></td></tr>
<tr><td>464</td><td>0</td><td><span class=zero-hits>elseif not e then</span></td></tr>
<tr><td>465</td><td>0</td><td><span class=zero-hits>return va, fetch(b, records, columns, row), fetch(c, records, columns, row), fetch(d, records, columns, row)</span></td></tr>
<tr><td>466</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
<tr><td>467</td><td>0</td><td><span class=zero-hits>error("args exceeded")</span></td></tr>
<tr><td>468</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>469</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>470</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>471</td><td>892</td><td><span class=low-hits>local function world_has_one_inline(world: ecs_world_t, entity: i53, id: i53): boolean</span></td></tr>
<tr><td>472</td><td>73</td><td><span class=low-hits>local record = entity_index_try_get_fast(world.entity_index, entity)</span></td></tr>
<tr><td>473</td><td>0</td><td><span class=zero-hits>if not record then</span></td></tr>
<tr><td>474</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
<tr><td>475</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>476</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>477</td><td>55</td><td><span class=low-hits>local archetype = record.archetype</span></td></tr>
<tr><td>478</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>479</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
<tr><td>480</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>481</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>482</td><td>764</td><td><span class=low-hits>local records = archetype.records</span></td></tr>
<tr><td>483</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>484</td><td>0</td><td><span class=zero-hits>return records[id] ~= nil</span></td></tr>
<tr><td>485</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>486</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>487</td><td>80</td><td><span class=low-hits>local function world_has(world: ecs_world_t, entity: i53, ...: i53): boolean</span></td></tr>
<tr><td>488</td><td>22</td><td><span class=low-hits>local record = entity_index_try_get_fast(world.entity_index, entity)</span></td></tr>
<tr><td>489</td><td>0</td><td><span class=zero-hits>if not record then</span></td></tr>
<tr><td>490</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
<tr><td>491</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>492</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>493</td><td>1</td><td><span class=low-hits>local archetype = record.archetype</span></td></tr>
<tr><td>494</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>495</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
<tr><td>496</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>497</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>498</td><td>57</td><td><span class=low-hits>local records = archetype.records</span></td></tr>
<tr><td>499</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>500</td><td>25</td><td><span class=low-hits>for i = 1, select("#", ...) do</span></td></tr>
<tr><td>501</td><td>0</td><td><span class=zero-hits>if not records[select(i, ...)] then</span></td></tr>
<tr><td>502</td><td>0</td><td><span class=zero-hits>return false</span></td></tr>
<tr><td>503</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>504</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>505</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>506</td><td>0</td><td><span class=zero-hits>return true</span></td></tr>
<tr><td>507</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>508</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>509</td><td>1440</td><td><span class=low-hits>local function world_target(world: ecs_world_t, entity: i53, relation: i24, index: number?): i24?</span></td></tr>
<tr><td>510</td><td>1440</td><td><span class=low-hits>local nth = index or 0</span></td></tr>
<tr><td>511</td><td>146</td><td><span class=low-hits>local record = entity_index_try_get_fast(world.entity_index, entity)</span></td></tr>
<tr><td>512</td><td>0</td><td><span class=zero-hits>if not record then</span></td></tr>
<tr><td>513</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>514</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>515</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>516</td><td>72</td><td><span class=low-hits>local archetype = record.archetype</span></td></tr>
<tr><td>517</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>518</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>519</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>520</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>521</td><td>1222</td><td><span class=low-hits>local r = ECS_PAIR(relation, EcsWildcard)</span></td></tr>
<tr><td>522</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>523</td><td>1167</td><td><span class=low-hits>local count = archetype.counts[r]</span></td></tr>
<tr><td>524</td><td>0</td><td><span class=zero-hits>if not count then</span></td></tr>
<tr><td>525</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>526</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>527</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>528</td><td>0</td><td><span class=zero-hits>if nth >= count then</span></td></tr>
<tr><td>529</td><td>0</td><td><span class=zero-hits>nth = nth + count + 1</span></td></tr>
<tr><td>530</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>531</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>532</td><td>5</td><td><span class=low-hits>nth = archetype.types[nth + archetype.records[r]]</span></td></tr>
<tr><td>533</td><td>0</td><td><span class=zero-hits>if not nth then</span></td></tr>
<tr><td>534</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>535</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>536</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>537</td><td>0</td><td><span class=zero-hits>return entity_index_get_alive(world.entity_index,</span></td></tr>
<tr><td>538</td><td>0</td><td><span class=zero-hits>ECS_PAIR_SECOND(nth))</span></td></tr>
<tr><td>539</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>540</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>541</td><td>0</td><td><span class=zero-hits>local function ECS_ID_IS_WILDCARD(e: i53): boolean</span></td></tr>
<tr><td>542</td><td>0</td><td><span class=zero-hits>local first = ECS_ENTITY_T_HI(e)</span></td></tr>
<tr><td>543</td><td>0</td><td><span class=zero-hits>local second = ECS_ENTITY_T_LO(e)</span></td></tr>
<tr><td>544</td><td>0</td><td><span class=zero-hits>return first == EcsWildcard or second == EcsWildcard</span></td></tr>
<tr><td>545</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>546</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>547</td><td>1509</td><td><span class=low-hits>local function id_record_ensure(world: ecs_world_t, id: number): ecs_id_record_t</span></td></tr>
<tr><td>548</td><td>1509</td><td><span class=low-hits>local component_index = world.component_index</span></td></tr>
<tr><td>549</td><td>0</td><td><span class=zero-hits>local entity_index = world.entity_index</span></td></tr>
<tr><td>550</td><td>1509</td><td><span class=low-hits>local idr: ecs_id_record_t = component_index[id]</span></td></tr>
<tr><td>551</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>552</td><td>704</td><td><span class=low-hits>if not idr then</span></td></tr>
<tr><td>553</td><td>704</td><td><span class=low-hits>local flags = ECS_ID_MASK</span></td></tr>
<tr><td>554</td><td>704</td><td><span class=low-hits>local relation = id</span></td></tr>
<tr><td>555</td><td>704</td><td><span class=low-hits>local target = 0</span></td></tr>
<tr><td>556</td><td>384</td><td><span class=low-hits>local is_pair = ECS_IS_PAIR(id)</span></td></tr>
<tr><td>557</td><td>384</td><td><span class=low-hits>if is_pair then</span></td></tr>
<tr><td>558</td><td>384</td><td><span class=low-hits>relation = entity_index_get_alive(entity_index, ECS_PAIR_FIRST(id)) :: i53</span></td></tr>
<tr><td>559</td><td>383</td><td><span class=low-hits>assert(relation and entity_index_is_alive(</span></td></tr>
<tr><td>560</td><td>383</td><td><span class=low-hits>entity_index, relation), ECS_INTERNAL_ERROR)</span></td></tr>
<tr><td>561</td><td>383</td><td><span class=low-hits>target = entity_index_get_alive(entity_index, ECS_PAIR_SECOND(id)) :: i53</span></td></tr>
<tr><td>562</td><td>0</td><td><span class=zero-hits>assert(target and entity_index_is_alive(</span></td></tr>
<tr><td>563</td><td>0</td><td><span class=zero-hits>entity_index, target), ECS_INTERNAL_ERROR)</span></td></tr>
<tr><td>564</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>565</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>566</td><td>0</td><td><span class=zero-hits>local cleanup_policy = world_target(world, relation, EcsOnDelete, 0)</span></td></tr>
<tr><td>567</td><td>702</td><td><span class=low-hits>local cleanup_policy_target = world_target(world, relation, EcsOnDeleteTarget, 0)</span></td></tr>
<tr><td>568</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>569</td><td>702</td><td><span class=low-hits>local has_delete = false</span></td></tr>
<tr><td>570</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>571</td><td>0</td><td><span class=zero-hits>if cleanup_policy == EcsDelete or cleanup_policy_target == EcsDelete then</span></td></tr>
<tr><td>572</td><td>0</td><td><span class=zero-hits>has_delete = true</span></td></tr>
<tr><td>573</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>574</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>575</td><td>702</td><td><span class=low-hits>local on_add, on_set, on_remove = world_get(world, relation, EcsOnAdd, EcsOnSet, EcsOnRemove)</span></td></tr>
<tr><td>576</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>577</td><td>702</td><td><span class=low-hits>local is_tag = not world_has_one_inline(world, relation, EcsComponent)</span></td></tr>
<tr><td>578</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>579</td><td>0</td><td><span class=zero-hits>if is_tag and is_pair then</span></td></tr>
<tr><td>580</td><td>0</td><td><span class=zero-hits>is_tag = not world_has_one_inline(world, target, EcsComponent)</span></td></tr>
<tr><td>581</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>582</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>583</td><td>702</td><td><span class=low-hits>flags = bit32.bor(</span></td></tr>
<tr><td>584</td><td>702</td><td><span class=low-hits>flags,</span></td></tr>
<tr><td>585</td><td>702</td><td><span class=low-hits>if on_add then ECS_ID_HAS_ON_ADD else 0,</span></td></tr>
<tr><td>586</td><td>702</td><td><span class=low-hits>if on_remove then ECS_ID_HAS_ON_REMOVE else 0,</span></td></tr>
<tr><td>587</td><td>702</td><td><span class=low-hits>if on_set then ECS_ID_HAS_ON_SET else 0,</span></td></tr>
<tr><td>588</td><td>0</td><td><span class=zero-hits>if has_delete then ECS_ID_DELETE else 0,</span></td></tr>
<tr><td>589</td><td>0</td><td><span class=zero-hits>if is_tag then ECS_ID_IS_TAG else 0</span></td></tr>
<tr><td>590</td><td>702</td><td><span class=low-hits>)</span></td></tr>
<tr><td>591</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>592</td><td>702</td><td><span class=low-hits>idr = {</span></td></tr>
<tr><td>593</td><td>702</td><td><span class=low-hits>size = 0,</span></td></tr>
<tr><td>594</td><td>702</td><td><span class=low-hits>cache = {},</span></td></tr>
<tr><td>595</td><td>702</td><td><span class=low-hits>counts = {},</span></td></tr>
<tr><td>596</td><td>702</td><td><span class=low-hits>flags = flags,</span></td></tr>
<tr><td>597</td><td>702</td><td><span class=low-hits>hooks = {</span></td></tr>
<tr><td>598</td><td>702</td><td><span class=low-hits>on_add = on_add,</span></td></tr>
<tr><td>599</td><td>0</td><td><span class=zero-hits>on_set = on_set,</span></td></tr>
<tr><td>600</td><td>0</td><td><span class=zero-hits>on_remove = on_remove,</span></td></tr>
<tr><td>601</td><td>0</td><td><span class=zero-hits>},</span></td></tr>
<tr><td>602</td><td>702</td><td><span class=low-hits>}</span></td></tr>
<tr><td>603</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>604</td><td>0</td><td><span class=zero-hits>component_index[id] = idr</span></td></tr>
<tr><td>605</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>606</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>607</td><td>0</td><td><span class=zero-hits>return idr</span></td></tr>
<tr><td>608</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>609</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>610</td><td>0</td><td><span class=zero-hits>local function archetype_append_to_records(</span></td></tr>
<tr><td>611</td><td>0</td><td><span class=zero-hits>idr: ecs_id_record_t,</span></td></tr>
<tr><td>612</td><td>0</td><td><span class=zero-hits>archetype: ecs_archetype_t,</span></td></tr>
<tr><td>613</td><td>0</td><td><span class=zero-hits>id: i53,</span></td></tr>
<tr><td>614</td><td>1507</td><td><span class=low-hits>index: number</span></td></tr>
<tr><td>615</td><td>1507</td><td><span class=low-hits>)</span></td></tr>
<tr><td>616</td><td>1507</td><td><span class=low-hits>local archetype_id = archetype.id</span></td></tr>
<tr><td>617</td><td>1507</td><td><span class=low-hits>local archetype_records = archetype.records</span></td></tr>
<tr><td>618</td><td>1507</td><td><span class=low-hits>local archetype_counts = archetype.counts</span></td></tr>
<tr><td>619</td><td>1507</td><td><span class=low-hits>local idr_columns = idr.cache</span></td></tr>
<tr><td>620</td><td>1507</td><td><span class=low-hits>local idr_counts = idr.counts</span></td></tr>
<tr><td>621</td><td>1405</td><td><span class=low-hits>local tr = idr_columns[archetype_id]</span></td></tr>
<tr><td>622</td><td>1405</td><td><span class=low-hits>if not tr then</span></td></tr>
<tr><td>623</td><td>0</td><td><span class=zero-hits>idr_columns[archetype_id] = index</span></td></tr>
<tr><td>624</td><td>1405</td><td><span class=low-hits>idr_counts[archetype_id] = 1</span></td></tr>
<tr><td>625</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>626</td><td>0</td><td><span class=zero-hits>archetype_records[id] = index</span></td></tr>
<tr><td>627</td><td>102</td><td><span class=low-hits>archetype_counts[id] = 1</span></td></tr>
<tr><td>628</td><td>102</td><td><span class=low-hits>else</span></td></tr>
<tr><td>629</td><td>102</td><td><span class=low-hits>local max_count = idr_counts[archetype_id] + 1</span></td></tr>
<tr><td>630</td><td>0</td><td><span class=zero-hits>idr_counts[archetype_id] = max_count</span></td></tr>
<tr><td>631</td><td>0</td><td><span class=zero-hits>archetype_counts[id] = max_count</span></td></tr>
<tr><td>632</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>633</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>634</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>635</td><td>635</td><td><span class=low-hits>local function archetype_create(world: ecs_world_t, id_types: { i24 }, ty, prev: i53?): ecs_archetype_t</span></td></tr>
<tr><td>636</td><td>0</td><td><span class=zero-hits>local archetype_id = (world.max_archetype_id :: number) + 1</span></td></tr>
<tr><td>637</td><td>635</td><td><span class=low-hits>world.max_archetype_id = archetype_id</span></td></tr>
<tr><td>638</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>639</td><td>0</td><td><span class=zero-hits>local length = #id_types</span></td></tr>
<tr><td>640</td><td>635</td><td><span class=low-hits>local columns = (table.create(length) :: any) :: { Column }</span></td></tr>
<tr><td>641</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>642</td><td>0</td><td><span class=zero-hits>local records: { number } = {}</span></td></tr>
<tr><td>643</td><td>635</td><td><span class=low-hits>local counts: {number} = {}</span></td></tr>
<tr><td>644</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>645</td><td>635</td><td><span class=low-hits>local archetype: ecs_archetype_t = {</span></td></tr>
<tr><td>646</td><td>635</td><td><span class=low-hits>columns = columns,</span></td></tr>
<tr><td>647</td><td>635</td><td><span class=low-hits>entities = {},</span></td></tr>
<tr><td>648</td><td>635</td><td><span class=low-hits>id = archetype_id,</span></td></tr>
<tr><td>649</td><td>635</td><td><span class=low-hits>records = records,</span></td></tr>
<tr><td>650</td><td>635</td><td><span class=low-hits>counts = counts,</span></td></tr>
<tr><td>651</td><td>0</td><td><span class=zero-hits>type = ty,</span></td></tr>
<tr><td>652</td><td>635</td><td><span class=low-hits>types = id_types,</span></td></tr>
<tr><td>653</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>654</td><td>635</td><td><span class=low-hits>add = {},</span></td></tr>
<tr><td>655</td><td>0</td><td><span class=zero-hits>remove = {},</span></td></tr>
<tr><td>656</td><td>0</td><td><span class=zero-hits>refs = {} :: ecs_graph_edge_t,</span></td></tr>
<tr><td>657</td><td>635</td><td><span class=low-hits>}</span></td></tr>
<tr><td>658</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>659</td><td>987</td><td><span class=low-hits>for i, component_id in id_types do</span></td></tr>
<tr><td>660</td><td>0</td><td><span class=zero-hits>local idr = id_record_ensure(world, component_id)</span></td></tr>
<tr><td>661</td><td>987</td><td><span class=low-hits>archetype_append_to_records(idr, archetype, component_id, i)</span></td></tr>
<tr><td>662</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>663</td><td>260</td><td><span class=low-hits>if ECS_IS_PAIR(component_id) then</span></td></tr>
<tr><td>664</td><td>260</td><td><span class=low-hits>local relation = ECS_PAIR_FIRST(component_id)</span></td></tr>
<tr><td>665</td><td>260</td><td><span class=low-hits>local object = ECS_PAIR_SECOND(component_id)</span></td></tr>
<tr><td>666</td><td>260</td><td><span class=low-hits>local r = ECS_PAIR(relation, EcsWildcard)</span></td></tr>
<tr><td>667</td><td>0</td><td><span class=zero-hits>local idr_r = id_record_ensure(world, r)</span></td></tr>
<tr><td>668</td><td>260</td><td><span class=low-hits>archetype_append_to_records(idr_r, archetype, r, i)</span></td></tr>
<tr><td>669</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>670</td><td>260</td><td><span class=low-hits>local t = ECS_PAIR(EcsWildcard, object)</span></td></tr>
<tr><td>671</td><td>0</td><td><span class=zero-hits>local idr_t = id_record_ensure(world, t)</span></td></tr>
<tr><td>672</td><td>0</td><td><span class=zero-hits>archetype_append_to_records(idr_t, archetype, t, i)</span></td></tr>
<tr><td>673</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>674</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>675</td><td>0</td><td><span class=zero-hits>if bit32.band(idr.flags, ECS_ID_IS_TAG) == 0 then</span></td></tr>
<tr><td>676</td><td>393</td><td><span class=low-hits>columns[i] = {}</span></td></tr>
<tr><td>677</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
<tr><td>678</td><td>0</td><td><span class=zero-hits>columns[i] = NULL_ARRAY</span></td></tr>
<tr><td>679</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>680</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>681</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>682</td><td>1405</td><td><span class=low-hits>for id in records do</span></td></tr>
<tr><td>683</td><td>0</td><td><span class=zero-hits>local observer_list = find_observers(world, EcsOnArchetypeCreate, id)</span></td></tr>
<tr><td>684</td><td>0</td><td><span class=zero-hits>if not observer_list then</span></td></tr>
<tr><td>685</td><td>8</td><td><span class=low-hits>continue</span></td></tr>
<tr><td>686</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>687</td><td>4</td><td><span class=low-hits>for _, observer in observer_list do</span></td></tr>
<tr><td>688</td><td>0</td><td><span class=zero-hits>if query_match(observer.query, archetype) then</span></td></tr>
<tr><td>689</td><td>0</td><td><span class=zero-hits>observer.callback(archetype)</span></td></tr>
<tr><td>690</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>691</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>692</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>693</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>694</td><td>0</td><td><span class=zero-hits>world.archetype_index[ty] = archetype</span></td></tr>
<tr><td>695</td><td>633</td><td><span class=low-hits>world.archetypes[archetype_id] = archetype</span></td></tr>
<tr><td>696</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>697</td><td>0</td><td><span class=zero-hits>return archetype</span></td></tr>
<tr><td>698</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>699</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>700</td><td>0</td><td><span class=zero-hits>local function world_entity(world: ecs_world_t): i53</span></td></tr>
<tr><td>701</td><td>0</td><td><span class=zero-hits>return entity_index_new_id(world.entity_index)</span></td></tr>
<tr><td>702</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>703</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>704</td><td>0</td><td><span class=zero-hits>local function world_parent(world: ecs_world_t, entity: i53)</span></td></tr>
<tr><td>705</td><td>0</td><td><span class=zero-hits>return world_target(world, entity, EcsChildOf, 0)</span></td></tr>
<tr><td>706</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>707</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>708</td><td>11</td><td><span class=low-hits>local function archetype_ensure(world: ecs_world_t, id_types): ecs_archetype_t</span></td></tr>
<tr><td>709</td><td>0</td><td><span class=zero-hits>if #id_types < 1 then</span></td></tr>
<tr><td>710</td><td>0</td><td><span class=zero-hits>return world.ROOT_ARCHETYPE</span></td></tr>
<tr><td>711</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>712</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>713</td><td>569</td><td><span class=low-hits>local ty = hash(id_types)</span></td></tr>
<tr><td>714</td><td>7</td><td><span class=low-hits>local archetype = world.archetype_index[ty]</span></td></tr>
<tr><td>715</td><td>0</td><td><span class=zero-hits>if archetype then</span></td></tr>
<tr><td>716</td><td>0</td><td><span class=zero-hits>return archetype</span></td></tr>
<tr><td>717</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>718</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>719</td><td>0</td><td><span class=zero-hits>return archetype_create(world, id_types, ty)</span></td></tr>
<tr><td>720</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>721</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>722</td><td>426</td><td><span class=low-hits>local function find_insert(id_types: { i53 }, toAdd: i53): number</span></td></tr>
<tr><td>723</td><td>4</td><td><span class=low-hits>for i, id in id_types do</span></td></tr>
<tr><td>724</td><td>0</td><td><span class=zero-hits>if id == toAdd then</span></td></tr>
<tr><td>725</td><td>422</td><td><span class=low-hits>return -1</span></td></tr>
<tr><td>726</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>727</td><td>0</td><td><span class=zero-hits>if id > toAdd then</span></td></tr>
<tr><td>728</td><td>0</td><td><span class=zero-hits>return i</span></td></tr>
<tr><td>729</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>730</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>731</td><td>0</td><td><span class=zero-hits>return #id_types + 1</span></td></tr>
<tr><td>732</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>733</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>734</td><td>0</td><td><span class=zero-hits>local function find_archetype_with(world: ecs_world_t, node: ecs_archetype_t, id: i53): ecs_archetype_t</span></td></tr>
<tr><td>735</td><td>0</td><td><span class=zero-hits>local id_types = node.types</span></td></tr>
<tr><td>736</td><td><span class='text-muted'>N/A</span></td><td>-- Component IDs are added incrementally, so inserting and sorting</td>></tr>
<tr><td>737</td><td><span class='text-muted'>N/A</span></td><td>-- them each time would be expensive. Instead this insertion sort can find the insertion</td>></tr>
<tr><td>738</td><td><span class='text-muted'>N/A</span></td><td>-- point in the types array.</td>></tr>
<tr><td>739</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>740</td><td>551</td><td><span class=low-hits>local dst = table.clone(node.types) :: { i53 }</span></td></tr>
<tr><td>741</td><td>0</td><td><span class=zero-hits>local at = find_insert(id_types, id)</span></td></tr>
<tr><td>742</td><td>0</td><td><span class=zero-hits>if at == -1 then</span></td></tr>
<tr><td>743</td><td><span class='text-muted'>N/A</span></td><td>-- If it finds a duplicate, it just means it is the same archetype so it can return it</td>></tr>
<tr><td>744</td><td><span class='text-muted'>N/A</span></td><td>-- directly instead of needing to hash types for a lookup to the archetype.</td>></tr>
<tr><td>745</td><td>547</td><td><span class=low-hits>return node</span></td></tr>
<tr><td>746</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>747</td><td>547</td><td><span class=low-hits>table.insert(dst, at, id)</span></td></tr>
<tr><td>748</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>749</td><td>0</td><td><span class=zero-hits>return archetype_ensure(world, dst)</span></td></tr>
<tr><td>750</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>751</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>752</td><td>0</td><td><span class=zero-hits>local function find_archetype_without(</span></td></tr>
<tr><td>753</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>754</td><td>0</td><td><span class=zero-hits>node: ecs_archetype_t,</span></td></tr>
<tr><td>755</td><td>33</td><td><span class=low-hits>id: i53</span></td></tr>
<tr><td>756</td><td>33</td><td><span class=low-hits>): ecs_archetype_t</span></td></tr>
<tr><td>757</td><td>33</td><td><span class=low-hits>local id_types = node.types</span></td></tr>
<tr><td>758</td><td>0</td><td><span class=zero-hits>local at = table.find(id_types, id)</span></td></tr>
<tr><td>759</td><td>0</td><td><span class=zero-hits>if at == nil then</span></td></tr>
<tr><td>760</td><td>0</td><td><span class=zero-hits>return node</span></td></tr>
<tr><td>761</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>762</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>763</td><td>0</td><td><span class=zero-hits>local dst = table.clone(id_types)</span></td></tr>
<tr><td>764</td><td>33</td><td><span class=low-hits>table.remove(dst, at)</span></td></tr>
<tr><td>765</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>766</td><td>0</td><td><span class=zero-hits>return archetype_ensure(world, dst)</span></td></tr>
<tr><td>767</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>768</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>769</td><td>0</td><td><span class=zero-hits>local function archetype_init_edge(</span></td></tr>
<tr><td>770</td><td>0</td><td><span class=zero-hits>archetype: ecs_archetype_t,</span></td></tr>
<tr><td>771</td><td>0</td><td><span class=zero-hits>edge: ecs_graph_edge_t,</span></td></tr>
<tr><td>772</td><td>0</td><td><span class=zero-hits>id: i53,</span></td></tr>
<tr><td>773</td><td>582</td><td><span class=low-hits>to: ecs_archetype_t</span></td></tr>
<tr><td>774</td><td>582</td><td><span class=low-hits>)</span></td></tr>
<tr><td>775</td><td>582</td><td><span class=low-hits>edge.from = archetype</span></td></tr>
<tr><td>776</td><td>0</td><td><span class=zero-hits>edge.to = to</span></td></tr>
<tr><td>777</td><td>0</td><td><span class=zero-hits>edge.id = id</span></td></tr>
<tr><td>778</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>779</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>780</td><td>0</td><td><span class=zero-hits>local function archetype_ensure_edge(</span></td></tr>
<tr><td>781</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>782</td><td>0</td><td><span class=zero-hits>edges: ecs_graph_edges_t,</span></td></tr>
<tr><td>783</td><td>22971</td><td><span class=low-hits>id: i53</span></td></tr>
<tr><td>784</td><td>22971</td><td><span class=low-hits>): ecs_graph_edge_t</span></td></tr>
<tr><td>785</td><td>584</td><td><span class=low-hits>local edge = edges[id]</span></td></tr>
<tr><td>786</td><td>584</td><td><span class=low-hits>if not edge then</span></td></tr>
<tr><td>787</td><td>0</td><td><span class=zero-hits>edge = {} :: ecs_graph_edge_t</span></td></tr>
<tr><td>788</td><td>0</td><td><span class=zero-hits>edges[id] = edge</span></td></tr>
<tr><td>789</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>790</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>791</td><td>0</td><td><span class=zero-hits>return edge</span></td></tr>
<tr><td>792</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>793</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>794</td><td>549</td><td><span class=low-hits>local function init_edge_for_add(world, archetype: ecs_archetype_t, edge: ecs_graph_edge_t, id, to: ecs_archetype_t)</span></td></tr>
<tr><td>795</td><td>549</td><td><span class=low-hits>archetype_init_edge(archetype, edge, id, to)</span></td></tr>
<tr><td>796</td><td>545</td><td><span class=low-hits>archetype_ensure_edge(world, archetype.add, id)</span></td></tr>
<tr><td>797</td><td>545</td><td><span class=low-hits>if archetype ~= to then</span></td></tr>
<tr><td>798</td><td>0</td><td><span class=zero-hits>local to_refs = to.refs</span></td></tr>
<tr><td>799</td><td>545</td><td><span class=low-hits>local next_edge = to_refs.next</span></td></tr>
<tr><td>800</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>801</td><td>545</td><td><span class=low-hits>to_refs.next = edge</span></td></tr>
<tr><td>802</td><td>0</td><td><span class=zero-hits>edge.prev = to_refs</span></td></tr>
<tr><td>803</td><td>545</td><td><span class=low-hits>edge.next = next_edge</span></td></tr>
<tr><td>804</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>805</td><td>0</td><td><span class=zero-hits>if next_edge then</span></td></tr>
<tr><td>806</td><td>0</td><td><span class=zero-hits>next_edge.prev = edge</span></td></tr>
<tr><td>807</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>808</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>809</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>810</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>811</td><td>0</td><td><span class=zero-hits>local function init_edge_for_remove(</span></td></tr>
<tr><td>812</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>813</td><td>0</td><td><span class=zero-hits>archetype: ecs_archetype_t,</span></td></tr>
<tr><td>814</td><td>0</td><td><span class=zero-hits>edge: ecs_graph_edge_t,</span></td></tr>
<tr><td>815</td><td>0</td><td><span class=zero-hits>id: number,</span></td></tr>
<tr><td>816</td><td>33</td><td><span class=low-hits>to: ecs_archetype_t</span></td></tr>
<tr><td>817</td><td>33</td><td><span class=low-hits>)</span></td></tr>
<tr><td>818</td><td>33</td><td><span class=low-hits>archetype_init_edge(archetype, edge, id, to)</span></td></tr>
<tr><td>819</td><td>33</td><td><span class=low-hits>archetype_ensure_edge(world, archetype.remove, id)</span></td></tr>
<tr><td>820</td><td>33</td><td><span class=low-hits>if archetype ~= to then</span></td></tr>
<tr><td>821</td><td>0</td><td><span class=zero-hits>local to_refs = to.refs</span></td></tr>
<tr><td>822</td><td>33</td><td><span class=low-hits>local prev_edge = to_refs.prev</span></td></tr>
<tr><td>823</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>824</td><td>33</td><td><span class=low-hits>to_refs.prev = edge</span></td></tr>
<tr><td>825</td><td>0</td><td><span class=zero-hits>edge.next = to_refs</span></td></tr>
<tr><td>826</td><td>33</td><td><span class=low-hits>edge.prev = prev_edge</span></td></tr>
<tr><td>827</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>828</td><td>0</td><td><span class=zero-hits>if prev_edge then</span></td></tr>
<tr><td>829</td><td>0</td><td><span class=zero-hits>prev_edge.next = edge</span></td></tr>
<tr><td>830</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>831</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>832</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>833</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>834</td><td>0</td><td><span class=zero-hits>local function create_edge_for_add(</span></td></tr>
<tr><td>835</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>836</td><td>0</td><td><span class=zero-hits>node: ecs_archetype_t,</span></td></tr>
<tr><td>837</td><td>0</td><td><span class=zero-hits>edge: ecs_graph_edge_t,</span></td></tr>
<tr><td>838</td><td>551</td><td><span class=low-hits>id: i53</span></td></tr>
<tr><td>839</td><td>549</td><td><span class=low-hits>): ecs_archetype_t</span></td></tr>
<tr><td>840</td><td>549</td><td><span class=low-hits>local to = find_archetype_with(world, node, id)</span></td></tr>
<tr><td>841</td><td>0</td><td><span class=zero-hits>init_edge_for_add(world, node, edge, id, to)</span></td></tr>
<tr><td>842</td><td>0</td><td><span class=zero-hits>return to</span></td></tr>
<tr><td>843</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>844</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>845</td><td>0</td><td><span class=zero-hits>local function create_edge_for_remove(</span></td></tr>
<tr><td>846</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>847</td><td>0</td><td><span class=zero-hits>node: ecs_archetype_t,</span></td></tr>
<tr><td>848</td><td>0</td><td><span class=zero-hits>edge: ecs_graph_edge_t,</span></td></tr>
<tr><td>849</td><td>33</td><td><span class=low-hits>id: i53</span></td></tr>
<tr><td>850</td><td>33</td><td><span class=low-hits>): ecs_archetype_t</span></td></tr>
<tr><td>851</td><td>33</td><td><span class=low-hits>local to = find_archetype_without(world, node, id)</span></td></tr>
<tr><td>852</td><td>0</td><td><span class=zero-hits>init_edge_for_remove(world, node, edge, id, to)</span></td></tr>
<tr><td>853</td><td>0</td><td><span class=zero-hits>return to</span></td></tr>
<tr><td>854</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>855</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>856</td><td>0</td><td><span class=zero-hits>local function archetype_traverse_add(</span></td></tr>
<tr><td>857</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>858</td><td>0</td><td><span class=zero-hits>id: i53,</span></td></tr>
<tr><td>859</td><td>22092</td><td><span class=low-hits>from: ecs_archetype_t</span></td></tr>
<tr><td>860</td><td>22092</td><td><span class=low-hits>): ecs_archetype_t</span></td></tr>
<tr><td>861</td><td>0</td><td><span class=zero-hits>from = from or world.ROOT_ARCHETYPE</span></td></tr>
<tr><td>862</td><td>22092</td><td><span class=low-hits>local edge = archetype_ensure_edge(world, from.add, id)</span></td></tr>
<tr><td>863</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>864</td><td>551</td><td><span class=low-hits>local to = edge.to</span></td></tr>
<tr><td>865</td><td>0</td><td><span class=zero-hits>if not to then</span></td></tr>
<tr><td>866</td><td>0</td><td><span class=zero-hits>to = create_edge_for_add(world, from, edge, id)</span></td></tr>
<tr><td>867</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>868</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>869</td><td>0</td><td><span class=zero-hits>return to :: ecs_archetype_t</span></td></tr>
<tr><td>870</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>871</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>872</td><td>0</td><td><span class=zero-hits>local function archetype_traverse_remove(</span></td></tr>
<tr><td>873</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>874</td><td>0</td><td><span class=zero-hits>id: i53,</span></td></tr>
<tr><td>875</td><td>297</td><td><span class=low-hits>from: ecs_archetype_t</span></td></tr>
<tr><td>876</td><td>0</td><td><span class=zero-hits>): ecs_archetype_t</span></td></tr>
<tr><td>877</td><td>297</td><td><span class=low-hits>from = from or world.ROOT_ARCHETYPE</span></td></tr>
<tr><td>878</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>879</td><td>297</td><td><span class=low-hits>local edge = archetype_ensure_edge(world, from.remove, id)</span></td></tr>
<tr><td>880</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>881</td><td>33</td><td><span class=low-hits>local to = edge.to</span></td></tr>
<tr><td>882</td><td>0</td><td><span class=zero-hits>if not to then</span></td></tr>
<tr><td>883</td><td>0</td><td><span class=zero-hits>to = create_edge_for_remove(world, from, edge, id)</span></td></tr>
<tr><td>884</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>885</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>886</td><td>0</td><td><span class=zero-hits>return to :: ecs_archetype_t</span></td></tr>
<tr><td>887</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>888</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>889</td><td>0</td><td><span class=zero-hits>local function world_add(</span></td></tr>
<tr><td>890</td><td>0</td><td><span class=zero-hits>world: ecs_world_t,</span></td></tr>
<tr><td>891</td><td>0</td><td><span class=zero-hits>entity: i53,</span></td></tr>
<tr><td>892</td><td>19316</td><td><span class=low-hits>id: i53</span></td></tr>
<tr><td>893</td><td>19316</td><td><span class=low-hits>): ()</span></td></tr>
<tr><td>894</td><td>19316</td><td><span class=low-hits>local entity_index = world.entity_index</span></td></tr>
<tr><td>895</td><td>0</td><td><span class=zero-hits>local record = entity_index_try_get_fast(entity_index, entity)</span></td></tr>
<tr><td>896</td><td>0</td><td><span class=zero-hits>if not record then</span></td></tr>
<tr><td>897</td><td>0</td><td><span class=zero-hits>return</span></td></tr>
<tr><td>898</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>899</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>900</td><td>19315</td><td><span class=low-hits>local from = record.archetype</span></td></tr>
<tr><td>901</td><td>3</td><td><span class=low-hits>local to = archetype_traverse_add(world, id, from)</span></td></tr>
<tr><td>902</td><td>0</td><td><span class=zero-hits>if from == to then</span></td></tr>
<tr><td>903</td><td>19312</td><td><span class=low-hits>return</span></td></tr>
<tr><td>904</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>905</td><td>0</td><td><span class=zero-hits>if from then</span></td></tr>
<tr><td>906</td><td>19170</td><td><span class=low-hits>entity_move(entity_index, entity, record, to)</span></td></tr>
<tr><td>907</td><td>19170</td><td><span class=low-hits>else</span></td></tr>
<tr><td>908</td><td>0</td><td><span class=zero-hits>if #to.types > 0 then</span></td></tr>
<tr><td>909</td><td>0</td><td><span class=zero-hits>new_entity(entity, record, to)</span></td></tr>
<tr><td>910</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>911</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>912</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>913</td><td>0</td><td><span class=zero-hits>local idr = world.component_index[id]</span></td></tr>
<tr><td>914</td><td>19312</td><td><span class=low-hits>local on_add = idr.hooks.on_add</span></td></tr>
<tr><td>915</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>916</td><td>0</td><td><span class=zero-hits>if on_add then</span></td></tr>
<tr><td>917</td><td>0</td><td><span class=zero-hits>on_add(entity)</span></td></tr>
<tr><td>918</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>919</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>920</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>921</td><td>2775</td><td><span class=low-hits>local function world_set(world: ecs_world_t, entity: i53, id: i53, data: unknown): ()</span></td></tr>
<tr><td>922</td><td>2775</td><td><span class=low-hits>local entity_index = world.entity_index</span></td></tr>
<tr><td>923</td><td>0</td><td><span class=zero-hits>local record = entity_index_try_get_fast(entity_index, entity)</span></td></tr>
<tr><td>924</td><td>0</td><td><span class=zero-hits>if not record then</span></td></tr>
<tr><td>925</td><td>0</td><td><span class=zero-hits>return</span></td></tr>
<tr><td>926</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>927</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>928</td><td>2774</td><td><span class=low-hits>local from: ecs_archetype_t = record.archetype</span></td></tr>
<tr><td>929</td><td>2774</td><td><span class=low-hits>local to: ecs_archetype_t = archetype_traverse_add(world, id, from)</span></td></tr>
<tr><td>930</td><td>0</td><td><span class=zero-hits>local idr = world.component_index[id]</span></td></tr>
<tr><td>931</td><td>2774</td><td><span class=low-hits>local idr_hooks = idr.hooks</span></td></tr>
<tr><td>932</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>933</td><td>0</td><td><span class=zero-hits>if from == to then</span></td></tr>
<tr><td>934</td><td><span class='text-muted'>N/A</span></td><td>-- If the archetypes are the same it can avoid moving the entity</td>></tr>
<tr><td>935</td><td><span class='text-muted'>N/A</span></td><td>-- and just set the data directly.</td>></tr>
<tr><td>936</td><td>2</td><td><span class=low-hits>local tr = to.records[id]</span></td></tr>
<tr><td>937</td><td>2</td><td><span class=low-hits>local column = from.columns[tr]</span></td></tr>
<tr><td>938</td><td>2</td><td><span class=low-hits>column[record.row] = data</span></td></tr>
<tr><td>939</td><td>0</td><td><span class=zero-hits>local on_set = idr_hooks.on_set</span></td></tr>
<tr><td>940</td><td>0</td><td><span class=zero-hits>if on_set then</span></td></tr>
<tr><td>941</td><td>0</td><td><span class=zero-hits>on_set(entity, data)</span></td></tr>
<tr><td>942</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>943</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>944</td><td>0</td><td><span class=zero-hits>return</span></td></tr>
<tr><td>945</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>946</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>947</td><td>1384</td><td><span class=low-hits>if from then</span></td></tr>
<tr><td>948</td><td><span class='text-muted'>N/A</span></td><td>-- If there was a previous archetype, then the entity needs to move the archetype</td>></tr>
<tr><td>949</td><td>1388</td><td><span class=low-hits>entity_move(entity_index, entity, record, to)</span></td></tr>
<tr><td>950</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
<tr><td>951</td><td>1388</td><td><span class=low-hits>if #to.types > 0 then</span></td></tr>
<tr><td>952</td><td><span class='text-muted'>N/A</span></td><td>-- When there is no previous archetype it should create the archetype</td>></tr>
<tr><td>953</td><td>0</td><td><span class=zero-hits>new_entity(entity, record, to)</span></td></tr>
<tr><td>954</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>955</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>956</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>957</td><td>0</td><td><span class=zero-hits>local tr = to.records[id]</span></td></tr>
<tr><td>958</td><td>2772</td><td><span class=low-hits>local column = to.columns[tr]</span></td></tr>
<tr><td>959</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>960</td><td>2765</td><td><span class=low-hits>column[record.row] = data</span></td></tr>
<tr><td>961</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>962</td><td>0</td><td><span class=zero-hits>local on_add = idr_hooks.on_add</span></td></tr>
<tr><td>963</td><td>0</td><td><span class=zero-hits>if on_add then</span></td></tr>
<tr><td>964</td><td>0</td><td><span class=zero-hits>on_add(entity)</span></td></tr>
<tr><td>965</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>966</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>967</td><td>1</td><td><span class=low-hits>local on_set = idr_hooks.on_set</span></td></tr>
<tr><td>968</td><td>0</td><td><span class=zero-hits>if on_set then</span></td></tr>
<tr><td>969</td><td>0</td><td><span class=zero-hits>on_set(entity, data)</span></td></tr>
<tr><td>970</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>971</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>972</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>973</td><td>121</td><td><span class=low-hits>local function world_component(world: World): i53</span></td></tr>
<tr><td>974</td><td>0</td><td><span class=zero-hits>local id = (world.max_component_id :: number) + 1</span></td></tr>
<tr><td>975</td><td>0</td><td><span class=zero-hits>if id > HI_COMPONENT_ID then</span></td></tr>
<tr><td>976</td><td><span class='text-muted'>N/A</span></td><td>-- IDs are partitioned into ranges because component IDs are not nominal,</td>></tr>
<tr><td>977</td><td><span class='text-muted'>N/A</span></td><td>-- so it needs to error when IDs intersect into the entity range.</td>></tr>
<tr><td>978</td><td>121</td><td><span class=low-hits>error("Too many components, consider using world:entity() instead to create components.")</span></td></tr>
<tr><td>979</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>980</td><td>121</td><td><span class=low-hits>world.max_component_id = id</span></td></tr>
<tr><td>981</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>982</td><td>0</td><td><span class=zero-hits>return id</span></td></tr>
<tr><td>983</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>984</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>985</td><td>298</td><td><span class=low-hits>local function world_remove(world: ecs_world_t, entity: i53, id: i53)</span></td></tr>
<tr><td>986</td><td>298</td><td><span class=low-hits>local entity_index = world.entity_index</span></td></tr>
<tr><td>987</td><td>0</td><td><span class=zero-hits>local record = entity_index_try_get_fast(entity_index, entity)</span></td></tr>
<tr><td>988</td><td>0</td><td><span class=zero-hits>if not record then</span></td></tr>
<tr><td>989</td><td>298</td><td><span class=low-hits>return</span></td></tr>
<tr><td>990</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>991</td><td>298</td><td><span class=low-hits>local from = record.archetype</span></td></tr>
<tr><td>992</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>993</td><td>0</td><td><span class=zero-hits>if not from then</span></td></tr>
<tr><td>994</td><td>0</td><td><span class=zero-hits>return</span></td></tr>
<tr><td>995</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>996</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>997</td><td>296</td><td><span class=low-hits>if from.records[id] then</span></td></tr>
<tr><td>998</td><td>296</td><td><span class=low-hits>local idr = world.component_index[id]</span></td></tr>
<tr><td>999</td><td>3</td><td><span class=low-hits>local on_remove = idr.hooks.on_remove</span></td></tr>
<tr><td>1000</td><td>0</td><td><span class=zero-hits>if on_remove then</span></td></tr>
<tr><td>1001</td><td>0</td><td><span class=zero-hits>on_remove(entity)</span></td></tr>
<tr><td>1002</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1003</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1004</td><td>296</td><td><span class=low-hits>local to = archetype_traverse_remove(world, id, record.archetype)</span></td></tr>
<tr><td>1005</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1006</td><td>0</td><td><span class=zero-hits>entity_move(entity_index, entity, record, to)</span></td></tr>
<tr><td>1007</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1008</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1009</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1010</td><td>153</td><td><span class=low-hits>local function archetype_fast_delete_last(columns: { Column }, column_count: number, types: { i53 }, entity: i53)</span></td></tr>
<tr><td>1011</td><td>135</td><td><span class=low-hits>for i, column in columns do</span></td></tr>
<tr><td>1012</td><td>0</td><td><span class=zero-hits>if column ~= NULL_ARRAY then</span></td></tr>
<tr><td>1013</td><td>0</td><td><span class=zero-hits>column[column_count] = nil</span></td></tr>
<tr><td>1014</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1015</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1016</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1017</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1018</td><td>109</td><td><span class=low-hits>local function archetype_fast_delete(columns: { Column }, column_count: number, row, types, entity)</span></td></tr>
<tr><td>1019</td><td>103</td><td><span class=low-hits>for i, column in columns do</span></td></tr>
<tr><td>1020</td><td>103</td><td><span class=low-hits>if column ~= NULL_ARRAY then</span></td></tr>
<tr><td>1021</td><td>0</td><td><span class=zero-hits>column[row] = column[column_count]</span></td></tr>
<tr><td>1022</td><td>0</td><td><span class=zero-hits>column[column_count] = nil</span></td></tr>
<tr><td>1023</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1024</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1025</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1026</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1027</td><td>134</td><td><span class=low-hits>local function archetype_delete(world: ecs_world_t, archetype: ecs_archetype_t, row: number)</span></td></tr>
<tr><td>1028</td><td>134</td><td><span class=low-hits>local entity_index = world.entity_index</span></td></tr>
<tr><td>1029</td><td>134</td><td><span class=low-hits>local component_index = world.component_index</span></td></tr>
<tr><td>1030</td><td>134</td><td><span class=low-hits>local columns = archetype.columns</span></td></tr>
<tr><td>1031</td><td>134</td><td><span class=low-hits>local id_types = archetype.types</span></td></tr>
<tr><td>1032</td><td>134</td><td><span class=low-hits>local entities = archetype.entities</span></td></tr>
<tr><td>1033</td><td>134</td><td><span class=low-hits>local column_count = #entities</span></td></tr>
<tr><td>1034</td><td>0</td><td><span class=zero-hits>local last = #entities</span></td></tr>
<tr><td>1035</td><td>134</td><td><span class=low-hits>local move = entities[last]</span></td></tr>
<tr><td>1036</td><td><span class='text-muted'>N/A</span></td><td>-- We assume first that the entity is the last in the archetype</td>></tr>
<tr><td>1037</td><td>134</td><td><span class=low-hits>local delete = move</span></td></tr>
<tr><td>1038</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1039</td><td>58</td><td><span class=low-hits>if row ~= last then</span></td></tr>
<tr><td>1040</td><td>58</td><td><span class=low-hits>local record_to_move = entity_index_try_get_any(entity_index, move)</span></td></tr>
<tr><td>1041</td><td>0</td><td><span class=zero-hits>if record_to_move then</span></td></tr>
<tr><td>1042</td><td>0</td><td><span class=zero-hits>record_to_move.row = row</span></td></tr>
<tr><td>1043</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1044</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1045</td><td>0</td><td><span class=zero-hits>delete = entities[row]</span></td></tr>
<tr><td>1046</td><td>0</td><td><span class=zero-hits>entities[row] = move</span></td></tr>
<tr><td>1047</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1048</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1049</td><td>262</td><td><span class=low-hits>for _, id in id_types do</span></td></tr>
<tr><td>1050</td><td>262</td><td><span class=low-hits>local idr = component_index[id]</span></td></tr>
<tr><td>1051</td><td>3</td><td><span class=low-hits>local on_remove = idr.hooks.on_remove</span></td></tr>
<tr><td>1052</td><td>0</td><td><span class=zero-hits>if on_remove then</span></td></tr>
<tr><td>1053</td><td>0</td><td><span class=zero-hits>on_remove(delete)</span></td></tr>
<tr><td>1054</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1055</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1056</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1057</td><td>134</td><td><span class=low-hits>entities[last] = nil :: any</span></td></tr>
<tr><td>1058</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1059</td><td>0</td><td><span class=zero-hits>if row == last then</span></td></tr>
<tr><td>1060</td><td>58</td><td><span class=low-hits>archetype_fast_delete_last(columns, column_count, id_types, delete)</span></td></tr>
<tr><td>1061</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
<tr><td>1062</td><td>0</td><td><span class=zero-hits>archetype_fast_delete(columns, column_count, row, id_types, delete)</span></td></tr>
<tr><td>1063</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1064</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1065</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1066</td><td>6</td><td><span class=low-hits>local function world_clear(world: ecs_world_t, entity: i53)</span></td></tr>
<tr><td>1067</td><td>6</td><td><span class=low-hits>local entity_index = world.entity_index</span></td></tr>
<tr><td>1068</td><td>6</td><td><span class=low-hits>local component_index = world.component_index</span></td></tr>
<tr><td>1069</td><td>6</td><td><span class=low-hits>local archetypes = world.archetypes</span></td></tr>
<tr><td>1070</td><td>6</td><td><span class=low-hits>local tgt = ECS_PAIR(EcsWildcard, entity)</span></td></tr>
<tr><td>1071</td><td>6</td><td><span class=low-hits>local idr_t = component_index[tgt]</span></td></tr>
<tr><td>1072</td><td>6</td><td><span class=low-hits>local idr = component_index[entity]</span></td></tr>
<tr><td>1073</td><td>0</td><td><span class=zero-hits>local rel = ECS_PAIR(entity, EcsWildcard)</span></td></tr>
<tr><td>1074</td><td>6</td><td><span class=low-hits>local idr_r = component_index[rel]</span></td></tr>
<tr><td>1075</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1076</td><td>4</td><td><span class=low-hits>if idr then</span></td></tr>
<tr><td>1077</td><td>4</td><td><span class=low-hits>local count = 0</span></td></tr>
<tr><td>1078</td><td>11</td><td><span class=low-hits>local queue = {}</span></td></tr>
<tr><td>1079</td><td>11</td><td><span class=low-hits>for archetype_id in idr.cache do</span></td></tr>
<tr><td>1080</td><td>11</td><td><span class=low-hits>local idr_archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>1081</td><td>11</td><td><span class=low-hits>local entities = idr_archetype.entities</span></td></tr>
<tr><td>1082</td><td>11</td><td><span class=low-hits>local n = #entities</span></td></tr>
<tr><td>1083</td><td>0</td><td><span class=zero-hits>count += n</span></td></tr>
<tr><td>1084</td><td>4</td><td><span class=low-hits>table.move(entities, 1, n, #queue + 1, queue)</span></td></tr>
<tr><td>1085</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1086</td><td>0</td><td><span class=zero-hits>for _, e in queue do</span></td></tr>
<tr><td>1087</td><td>0</td><td><span class=zero-hits>world_remove(world, e, entity)</span></td></tr>
<tr><td>1088</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1089</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1090</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1091</td><td>0</td><td><span class=zero-hits>if idr_t then</span></td></tr>
<tr><td>1092</td><td>0</td><td><span class=zero-hits>local queue</span></td></tr>
<tr><td>1093</td><td>0</td><td><span class=zero-hits>local ids</span></td></tr>
<tr><td>1094</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1095</td><td>0</td><td><span class=zero-hits>local count = 0</span></td></tr>
<tr><td>1096</td><td>0</td><td><span class=zero-hits>local archetype_ids = idr_t.cache</span></td></tr>
<tr><td>1097</td><td>0</td><td><span class=zero-hits>for archetype_id in archetype_ids do</span></td></tr>
<tr><td>1098</td><td>0</td><td><span class=zero-hits>local idr_t_archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>1099</td><td>0</td><td><span class=zero-hits>local idr_t_types = idr_t_archetype.types</span></td></tr>
<tr><td>1100</td><td>0</td><td><span class=zero-hits>local entities = idr_t_archetype.entities</span></td></tr>
<tr><td>1101</td><td>0</td><td><span class=zero-hits>local removal_queued = false</span></td></tr>
<tr><td>1102</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1103</td><td>0</td><td><span class=zero-hits>for _, id in idr_t_types do</span></td></tr>
<tr><td>1104</td><td>0</td><td><span class=zero-hits>if not ECS_IS_PAIR(id) then</span></td></tr>
<tr><td>1105</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1106</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1107</td><td>0</td><td><span class=zero-hits>local object = entity_index_get_alive(</span></td></tr>
<tr><td>1108</td><td>0</td><td><span class=zero-hits>entity_index, ECS_PAIR_SECOND(id))</span></td></tr>
<tr><td>1109</td><td>0</td><td><span class=zero-hits>if object ~= entity then</span></td></tr>
<tr><td>1110</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1111</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1112</td><td>0</td><td><span class=zero-hits>if not ids then</span></td></tr>
<tr><td>1113</td><td>0</td><td><span class=zero-hits>ids = {}</span></td></tr>
<tr><td>1114</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1115</td><td>0</td><td><span class=zero-hits>ids[id] = true</span></td></tr>
<tr><td>1116</td><td>0</td><td><span class=zero-hits>removal_queued = true</span></td></tr>
<tr><td>1117</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1118</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1119</td><td>0</td><td><span class=zero-hits>if not removal_queued then</span></td></tr>
<tr><td>1120</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1121</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1122</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1123</td><td>0</td><td><span class=zero-hits>if not queue then</span></td></tr>
<tr><td>1124</td><td>0</td><td><span class=zero-hits>queue = {}</span></td></tr>
<tr><td>1125</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1126</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1127</td><td>0</td><td><span class=zero-hits>local n = #entities</span></td></tr>
<tr><td>1128</td><td>0</td><td><span class=zero-hits>table.move(entities, 1, n, count + 1, queue)</span></td></tr>
<tr><td>1129</td><td>0</td><td><span class=zero-hits>count += n</span></td></tr>
<tr><td>1130</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1131</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1132</td><td>0</td><td><span class=zero-hits>for id in ids do</span></td></tr>
<tr><td>1133</td><td>0</td><td><span class=zero-hits>for _, child in queue do</span></td></tr>
<tr><td>1134</td><td>0</td><td><span class=zero-hits>world_remove(world, child, id)</span></td></tr>
<tr><td>1135</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1136</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1137</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1138</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1139</td><td>1</td><td><span class=low-hits>if idr_r then</span></td></tr>
<tr><td>1140</td><td>1</td><td><span class=low-hits>local count = 0</span></td></tr>
<tr><td>1141</td><td>1</td><td><span class=low-hits>local archetype_ids = idr_r.cache</span></td></tr>
<tr><td>1142</td><td>1</td><td><span class=low-hits>local ids = {}</span></td></tr>
<tr><td>1143</td><td>2</td><td><span class=low-hits>local queue = {}</span></td></tr>
<tr><td>1144</td><td>2</td><td><span class=low-hits>for archetype_id in archetype_ids do</span></td></tr>
<tr><td>1145</td><td>2</td><td><span class=low-hits>local idr_r_archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>1146</td><td>2</td><td><span class=low-hits>local entities = idr_r_archetype.entities</span></td></tr>
<tr><td>1147</td><td>2</td><td><span class=low-hits>local tr = idr_r_archetype.records[rel]</span></td></tr>
<tr><td>1148</td><td>2</td><td><span class=low-hits>local tr_count = idr_r_archetype.counts[rel]</span></td></tr>
<tr><td>1149</td><td>2</td><td><span class=low-hits>local types = idr_r_archetype.types</span></td></tr>
<tr><td>1150</td><td>0</td><td><span class=zero-hits>for i = tr, tr + tr_count - 1 do</span></td></tr>
<tr><td>1151</td><td>2</td><td><span class=low-hits>ids[types[i]] = true</span></td></tr>
<tr><td>1152</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1153</td><td>2</td><td><span class=low-hits>local n = #entities</span></td></tr>
<tr><td>1154</td><td>0</td><td><span class=zero-hits>table.move(entities, 1, n, count + 1, queue)</span></td></tr>
<tr><td>1155</td><td>0</td><td><span class=zero-hits>count += n</span></td></tr>
<tr><td>1156</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1157</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1158</td><td>3</td><td><span class=low-hits>for _, e in queue do</span></td></tr>
<tr><td>1159</td><td>0</td><td><span class=zero-hits>for id in ids do</span></td></tr>
<tr><td>1160</td><td>0</td><td><span class=zero-hits>world_remove(world, e, id)</span></td></tr>
<tr><td>1161</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1162</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1163</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1164</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1165</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1166</td><td>50</td><td><span class=low-hits>local function archetype_disconnect_edge(edge: ecs_graph_edge_t)</span></td></tr>
<tr><td>1167</td><td>50</td><td><span class=low-hits>local edge_next = edge.next</span></td></tr>
<tr><td>1168</td><td>19</td><td><span class=low-hits>local edge_prev = edge.prev</span></td></tr>
<tr><td>1169</td><td>0</td><td><span class=zero-hits>if edge_next then</span></td></tr>
<tr><td>1170</td><td>50</td><td><span class=low-hits>edge_next.prev = edge_prev</span></td></tr>
<tr><td>1171</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1172</td><td>0</td><td><span class=zero-hits>if edge_prev then</span></td></tr>
<tr><td>1173</td><td>0</td><td><span class=zero-hits>edge_prev.next = edge_next</span></td></tr>
<tr><td>1174</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1175</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1176</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1177</td><td>23</td><td><span class=low-hits>local function archetype_remove_edge(edges: ecs_graph_edges_t, id: i53, edge: ecs_graph_edge_t)</span></td></tr>
<tr><td>1178</td><td>0</td><td><span class=zero-hits>archetype_disconnect_edge(edge)</span></td></tr>
<tr><td>1179</td><td>0</td><td><span class=zero-hits>edges[id] = nil :: any</span></td></tr>
<tr><td>1180</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1181</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1182</td><td>36</td><td><span class=low-hits>local function archetype_clear_edges(archetype: ecs_archetype_t)</span></td></tr>
<tr><td>1183</td><td>36</td><td><span class=low-hits>local add: ecs_graph_edges_t = archetype.add</span></td></tr>
<tr><td>1184</td><td>36</td><td><span class=low-hits>local remove: ecs_graph_edges_t = archetype.remove</span></td></tr>
<tr><td>1185</td><td>9</td><td><span class=low-hits>local node_refs = archetype.refs</span></td></tr>
<tr><td>1186</td><td>9</td><td><span class=low-hits>for id, edge in add do</span></td></tr>
<tr><td>1187</td><td>0</td><td><span class=zero-hits>archetype_disconnect_edge(edge)</span></td></tr>
<tr><td>1188</td><td>36</td><td><span class=low-hits>add[id] = nil :: any</span></td></tr>
<tr><td>1189</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1190</td><td>18</td><td><span class=low-hits>for id, edge in remove do</span></td></tr>
<tr><td>1191</td><td>0</td><td><span class=zero-hits>archetype_disconnect_edge(edge)</span></td></tr>
<tr><td>1192</td><td>0</td><td><span class=zero-hits>remove[id] = nil :: any</span></td></tr>
<tr><td>1193</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1194</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1195</td><td>22</td><td><span class=low-hits>local cur = node_refs.next</span></td></tr>
<tr><td>1196</td><td>22</td><td><span class=low-hits>while cur do</span></td></tr>
<tr><td>1197</td><td>22</td><td><span class=low-hits>local edge = cur :: ecs_graph_edge_t</span></td></tr>
<tr><td>1198</td><td>22</td><td><span class=low-hits>local next_edge = edge.next</span></td></tr>
<tr><td>1199</td><td>0</td><td><span class=zero-hits>archetype_remove_edge(edge.from.add, edge.id, edge)</span></td></tr>
<tr><td>1200</td><td>0</td><td><span class=zero-hits>cur = next_edge</span></td></tr>
<tr><td>1201</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1202</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1203</td><td>1</td><td><span class=low-hits>cur = node_refs.prev</span></td></tr>
<tr><td>1204</td><td>1</td><td><span class=low-hits>while cur do</span></td></tr>
<tr><td>1205</td><td>1</td><td><span class=low-hits>local edge: ecs_graph_edge_t = cur</span></td></tr>
<tr><td>1206</td><td>1</td><td><span class=low-hits>local next_edge = edge.prev</span></td></tr>
<tr><td>1207</td><td>0</td><td><span class=zero-hits>archetype_remove_edge(edge.from.remove, edge.id, edge)</span></td></tr>
<tr><td>1208</td><td>0</td><td><span class=zero-hits>cur = next_edge</span></td></tr>
<tr><td>1209</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1210</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1211</td><td>0</td><td><span class=zero-hits>node_refs.next = nil</span></td></tr>
<tr><td>1212</td><td>0</td><td><span class=zero-hits>node_refs.prev = nil</span></td></tr>
<tr><td>1213</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1214</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1215</td><td>1</td><td><span class=low-hits>local function archetype_destroy(world: ecs_world_t, archetype: ecs_archetype_t)</span></td></tr>
<tr><td>1216</td><td>0</td><td><span class=zero-hits>if archetype == world.ROOT_ARCHETYPE then</span></td></tr>
<tr><td>1217</td><td>0</td><td><span class=zero-hits>return</span></td></tr>
<tr><td>1218</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1219</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1220</td><td>36</td><td><span class=low-hits>local component_index = world.component_index</span></td></tr>
<tr><td>1221</td><td>36</td><td><span class=low-hits>archetype_clear_edges(archetype)</span></td></tr>
<tr><td>1222</td><td>36</td><td><span class=low-hits>local archetype_id = archetype.id</span></td></tr>
<tr><td>1223</td><td>36</td><td><span class=low-hits>world.archetypes[archetype_id] = nil :: any</span></td></tr>
<tr><td>1224</td><td>0</td><td><span class=zero-hits>world.archetype_index[archetype.type] = nil :: any</span></td></tr>
<tr><td>1225</td><td>36</td><td><span class=low-hits>local records = archetype.records</span></td></tr>
<tr><td>1226</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1227</td><td>113</td><td><span class=low-hits>for id in records do</span></td></tr>
<tr><td>1228</td><td>0</td><td><span class=zero-hits>local observer_list = find_observers(world, EcsOnArchetypeDelete, id)</span></td></tr>
<tr><td>1229</td><td>0</td><td><span class=zero-hits>if not observer_list then</span></td></tr>
<tr><td>1230</td><td>2</td><td><span class=low-hits>continue</span></td></tr>
<tr><td>1231</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1232</td><td>1</td><td><span class=low-hits>for _, observer in observer_list do</span></td></tr>
<tr><td>1233</td><td>0</td><td><span class=zero-hits>if query_match(observer.query, archetype) then</span></td></tr>
<tr><td>1234</td><td>0</td><td><span class=zero-hits>observer.callback(archetype)</span></td></tr>
<tr><td>1235</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1236</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1237</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1238</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1239</td><td>113</td><td><span class=low-hits>for id in records do</span></td></tr>
<tr><td>1240</td><td>113</td><td><span class=low-hits>local idr = component_index[id]</span></td></tr>
<tr><td>1241</td><td>113</td><td><span class=low-hits>idr.cache[archetype_id] = nil :: any</span></td></tr>
<tr><td>1242</td><td>113</td><td><span class=low-hits>idr.counts[archetype_id] = nil</span></td></tr>
<tr><td>1243</td><td>113</td><td><span class=low-hits>idr.size -= 1</span></td></tr>
<tr><td>1244</td><td>0</td><td><span class=zero-hits>records[id] = nil :: any</span></td></tr>
<tr><td>1245</td><td>0</td><td><span class=zero-hits>if idr.size == 0 then</span></td></tr>
<tr><td>1246</td><td>0</td><td><span class=zero-hits>component_index[id] = nil :: any</span></td></tr>
<tr><td>1247</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1248</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1249</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1250</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1251</td><td>0</td><td><span class=zero-hits>local function world_cleanup(world: ecs_world_t)</span></td></tr>
<tr><td>1252</td><td>1</td><td><span class=low-hits>local archetypes = world.archetypes</span></td></tr>
<tr><td>1253</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1254</td><td>4</td><td><span class=low-hits>for _, archetype in archetypes do</span></td></tr>
<tr><td>1255</td><td>0</td><td><span class=zero-hits>if #archetype.entities == 0 then</span></td></tr>
<tr><td>1256</td><td>0</td><td><span class=zero-hits>archetype_destroy(world, archetype)</span></td></tr>
<tr><td>1257</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1258</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1259</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1260</td><td>0</td><td><span class=zero-hits>local new_archetypes = table.create(#archetypes) :: { ecs_archetype_t }</span></td></tr>
<tr><td>1261</td><td>1</td><td><span class=low-hits>local new_archetype_map = {}</span></td></tr>
<tr><td>1262</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1263</td><td>6</td><td><span class=low-hits>for index, archetype in archetypes do</span></td></tr>
<tr><td>1264</td><td>0</td><td><span class=zero-hits>new_archetypes[index] = archetype</span></td></tr>
<tr><td>1265</td><td>0</td><td><span class=zero-hits>new_archetype_map[archetype.type] = archetype</span></td></tr>
<tr><td>1266</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1267</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1268</td><td>0</td><td><span class=zero-hits>world.archetypes = new_archetypes</span></td></tr>
<tr><td>1269</td><td>0</td><td><span class=zero-hits>world.archetype_index = new_archetype_map</span></td></tr>
<tr><td>1270</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1271</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1272</td><td>65684</td><td><span class=high-hits>local function world_delete(world: ecs_world_t, entity: i53)</span></td></tr>
<tr><td>1273</td><td>65684</td><td><span class=high-hits>local entity_index = world.entity_index</span></td></tr>
<tr><td>1274</td><td>1</td><td><span class=low-hits>local record = entity_index_try_get(entity_index, entity)</span></td></tr>
<tr><td>1275</td><td>0</td><td><span class=zero-hits>if not record then</span></td></tr>
<tr><td>1276</td><td>0</td><td><span class=zero-hits>return</span></td></tr>
<tr><td>1277</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1278</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1279</td><td>0</td><td><span class=zero-hits>local archetype = record.archetype</span></td></tr>
<tr><td>1280</td><td>65683</td><td><span class=high-hits>local row = record.row</span></td></tr>
<tr><td>1281</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1282</td><td>0</td><td><span class=zero-hits>if archetype then</span></td></tr>
<tr><td>1283</td><td><span class='text-muted'>N/A</span></td><td>-- In the future should have a destruct mode for</td>></tr>
<tr><td>1284</td><td><span class='text-muted'>N/A</span></td><td>-- deleting archetypes themselves. Maybe requires recycling</td>></tr>
<tr><td>1285</td><td>0</td><td><span class=zero-hits>archetype_delete(world, archetype, row)</span></td></tr>
<tr><td>1286</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1287</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1288</td><td>65683</td><td><span class=high-hits>local delete = entity</span></td></tr>
<tr><td>1289</td><td>65683</td><td><span class=high-hits>local component_index = world.component_index</span></td></tr>
<tr><td>1290</td><td>65683</td><td><span class=high-hits>local archetypes = world.archetypes</span></td></tr>
<tr><td>1291</td><td>0</td><td><span class=zero-hits>local tgt = ECS_PAIR(EcsWildcard, delete)</span></td></tr>
<tr><td>1292</td><td>65683</td><td><span class=high-hits>local rel = ECS_PAIR(delete, EcsWildcard)</span></td></tr>
<tr><td>1293</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1294</td><td>65683</td><td><span class=high-hits>local idr_t = component_index[tgt]</span></td></tr>
<tr><td>1295</td><td>0</td><td><span class=zero-hits>local idr = component_index[delete]</span></td></tr>
<tr><td>1296</td><td>65683</td><td><span class=high-hits>local idr_r = component_index[rel]</span></td></tr>
<tr><td>1297</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1298</td><td>8</td><td><span class=low-hits>if idr then</span></td></tr>
<tr><td>1299</td><td>1</td><td><span class=low-hits>local flags = idr.flags</span></td></tr>
<tr><td>1300</td><td>1</td><td><span class=low-hits>if bit32.band(flags, ECS_ID_DELETE) ~= 0 then</span></td></tr>
<tr><td>1301</td><td>0</td><td><span class=zero-hits>for archetype_id in idr.cache do</span></td></tr>
<tr><td>1302</td><td>1</td><td><span class=low-hits>local idr_archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>1303</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1304</td><td>1</td><td><span class=low-hits>local entities = idr_archetype.entities</span></td></tr>
<tr><td>1305</td><td>2</td><td><span class=low-hits>local n = #entities</span></td></tr>
<tr><td>1306</td><td>0</td><td><span class=zero-hits>for i = n, 1, -1 do</span></td></tr>
<tr><td>1307</td><td>0</td><td><span class=zero-hits>world_delete(world, entities[i])</span></td></tr>
<tr><td>1308</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1309</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1310</td><td>0</td><td><span class=zero-hits>archetype_destroy(world, idr_archetype)</span></td></tr>
<tr><td>1311</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1312</td><td>12</td><td><span class=low-hits>else</span></td></tr>
<tr><td>1313</td><td>12</td><td><span class=low-hits>for archetype_id in idr.cache do</span></td></tr>
<tr><td>1314</td><td>12</td><td><span class=low-hits>local idr_archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>1315</td><td>12</td><td><span class=low-hits>local entities = idr_archetype.entities</span></td></tr>
<tr><td>1316</td><td>10</td><td><span class=low-hits>local n = #entities</span></td></tr>
<tr><td>1317</td><td>0</td><td><span class=zero-hits>for i = n, 1, -1 do</span></td></tr>
<tr><td>1318</td><td>0</td><td><span class=zero-hits>world_remove(world, entities[i], delete)</span></td></tr>
<tr><td>1319</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1320</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1321</td><td>0</td><td><span class=zero-hits>archetype_destroy(world, idr_archetype)</span></td></tr>
<tr><td>1322</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1323</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1324</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1325</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1326</td><td>13</td><td><span class=low-hits>if idr_t then</span></td></tr>
<tr><td>1327</td><td>0</td><td><span class=zero-hits>local children</span></td></tr>
<tr><td>1328</td><td>13</td><td><span class=low-hits>local ids</span></td></tr>
<tr><td>1329</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1330</td><td>13</td><td><span class=low-hits>local count = 0</span></td></tr>
<tr><td>1331</td><td>18</td><td><span class=low-hits>local archetype_ids = idr_t.cache</span></td></tr>
<tr><td>1332</td><td>18</td><td><span class=low-hits>for archetype_id in archetype_ids do</span></td></tr>
<tr><td>1333</td><td>18</td><td><span class=low-hits>local idr_t_archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>1334</td><td>18</td><td><span class=low-hits>local idr_t_types = idr_t_archetype.types</span></td></tr>
<tr><td>1335</td><td>0</td><td><span class=zero-hits>local entities = idr_t_archetype.entities</span></td></tr>
<tr><td>1336</td><td>18</td><td><span class=low-hits>local removal_queued = false</span></td></tr>
<tr><td>1337</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1338</td><td>0</td><td><span class=zero-hits>for _, id in idr_t_types do</span></td></tr>
<tr><td>1339</td><td>0</td><td><span class=zero-hits>if not ECS_IS_PAIR(id) then</span></td></tr>
<tr><td>1340</td><td>24</td><td><span class=low-hits>continue</span></td></tr>
<tr><td>1341</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1342</td><td>24</td><td><span class=low-hits>local object = entity_index_get_alive(</span></td></tr>
<tr><td>1343</td><td>0</td><td><span class=zero-hits>entity_index, ECS_PAIR_SECOND(id))</span></td></tr>
<tr><td>1344</td><td>0</td><td><span class=zero-hits>if object ~= delete then</span></td></tr>
<tr><td>1345</td><td>20</td><td><span class=low-hits>continue</span></td></tr>
<tr><td>1346</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1347</td><td>20</td><td><span class=low-hits>local id_record = component_index[id]</span></td></tr>
<tr><td>1348</td><td>20</td><td><span class=low-hits>local flags = id_record.flags</span></td></tr>
<tr><td>1349</td><td>8</td><td><span class=low-hits>local flags_delete_mask: number = bit32.band(flags, ECS_ID_DELETE)</span></td></tr>
<tr><td>1350</td><td>15</td><td><span class=low-hits>if flags_delete_mask ~= 0 then</span></td></tr>
<tr><td>1351</td><td>15</td><td><span class=low-hits>for i = #entities, 1, -1 do</span></td></tr>
<tr><td>1352</td><td>0</td><td><span class=zero-hits>local child = entities[i]</span></td></tr>
<tr><td>1353</td><td>8</td><td><span class=low-hits>world_delete(world, child)</span></td></tr>
<tr><td>1354</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1355</td><td>12</td><td><span class=low-hits>break</span></td></tr>
<tr><td>1356</td><td>6</td><td><span class=low-hits>else</span></td></tr>
<tr><td>1357</td><td>0</td><td><span class=zero-hits>if not ids then</span></td></tr>
<tr><td>1358</td><td>12</td><td><span class=low-hits>ids = {}</span></td></tr>
<tr><td>1359</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1360</td><td>0</td><td><span class=zero-hits>ids[id] = true</span></td></tr>
<tr><td>1361</td><td>0</td><td><span class=zero-hits>removal_queued = true</span></td></tr>
<tr><td>1362</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1363</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1364</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1365</td><td>0</td><td><span class=zero-hits>if not removal_queued then</span></td></tr>
<tr><td>1366</td><td>10</td><td><span class=low-hits>continue</span></td></tr>
<tr><td>1367</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1368</td><td>0</td><td><span class=zero-hits>if not children then</span></td></tr>
<tr><td>1369</td><td>10</td><td><span class=low-hits>children = {}</span></td></tr>
<tr><td>1370</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1371</td><td>10</td><td><span class=low-hits>local n = #entities</span></td></tr>
<tr><td>1372</td><td>0</td><td><span class=zero-hits>table.move(entities, 1, n, count + 1, children)</span></td></tr>
<tr><td>1373</td><td>0</td><td><span class=zero-hits>count += n</span></td></tr>
<tr><td>1374</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1375</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1376</td><td>17</td><td><span class=low-hits>if ids then</span></td></tr>
<tr><td>1377</td><td>19</td><td><span class=low-hits>for _, child in children do</span></td></tr>
<tr><td>1378</td><td>0</td><td><span class=zero-hits>for id in ids do</span></td></tr>
<tr><td>1379</td><td>0</td><td><span class=zero-hits>world_remove(world, child, id)</span></td></tr>
<tr><td>1380</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1381</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1382</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1383</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1384</td><td>0</td><td><span class=zero-hits>for archetype_id in archetype_ids do</span></td></tr>
<tr><td>1385</td><td>0</td><td><span class=zero-hits>archetype_destroy(world, archetypes[archetype_id])</span></td></tr>
<tr><td>1386</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1387</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1388</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1389</td><td>0</td><td><span class=zero-hits>if idr_r then</span></td></tr>
<tr><td>1390</td><td>0</td><td><span class=zero-hits>local archetype_ids = idr_r.cache</span></td></tr>
<tr><td>1391</td><td>0</td><td><span class=zero-hits>local flags = idr_r.flags</span></td></tr>
<tr><td>1392</td><td>0</td><td><span class=zero-hits>if bit32.band(flags, ECS_ID_DELETE) ~= 0 then</span></td></tr>
<tr><td>1393</td><td>0</td><td><span class=zero-hits>for archetype_id in archetype_ids do</span></td></tr>
<tr><td>1394</td><td>0</td><td><span class=zero-hits>local idr_r_archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>1395</td><td>0</td><td><span class=zero-hits>local entities = idr_r_archetype.entities</span></td></tr>
<tr><td>1396</td><td>0</td><td><span class=zero-hits>local n = #entities</span></td></tr>
<tr><td>1397</td><td>0</td><td><span class=zero-hits>for i = n, 1, -1 do</span></td></tr>
<tr><td>1398</td><td>0</td><td><span class=zero-hits>world_delete(world, entities[i])</span></td></tr>
<tr><td>1399</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1400</td><td>0</td><td><span class=zero-hits>archetype_destroy(world, idr_r_archetype)</span></td></tr>
<tr><td>1401</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1402</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
<tr><td>1403</td><td>0</td><td><span class=zero-hits>local children = {}</span></td></tr>
<tr><td>1404</td><td>0</td><td><span class=zero-hits>local count = 0</span></td></tr>
<tr><td>1405</td><td>0</td><td><span class=zero-hits>local ids = {}</span></td></tr>
<tr><td>1406</td><td>0</td><td><span class=zero-hits>for archetype_id in archetype_ids do</span></td></tr>
<tr><td>1407</td><td>0</td><td><span class=zero-hits>local idr_r_archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>1408</td><td>0</td><td><span class=zero-hits>local entities = idr_r_archetype.entities</span></td></tr>
<tr><td>1409</td><td>0</td><td><span class=zero-hits>local tr = idr_r_archetype.records[rel]</span></td></tr>
<tr><td>1410</td><td>0</td><td><span class=zero-hits>local tr_count = idr_r_archetype.counts[rel]</span></td></tr>
<tr><td>1411</td><td>0</td><td><span class=zero-hits>local types = idr_r_archetype.types</span></td></tr>
<tr><td>1412</td><td>0</td><td><span class=zero-hits>for i = tr, tr_count - 1 do</span></td></tr>
<tr><td>1413</td><td>0</td><td><span class=zero-hits>ids[types[tr]] = true</span></td></tr>
<tr><td>1414</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1415</td><td>0</td><td><span class=zero-hits>local n = #entities</span></td></tr>
<tr><td>1416</td><td>0</td><td><span class=zero-hits>table.move(entities, 1, n, count + 1, children)</span></td></tr>
<tr><td>1417</td><td>0</td><td><span class=zero-hits>count += n</span></td></tr>
<tr><td>1418</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1419</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1420</td><td>0</td><td><span class=zero-hits>for _, child in children do</span></td></tr>
<tr><td>1421</td><td>0</td><td><span class=zero-hits>for id in ids do</span></td></tr>
<tr><td>1422</td><td>0</td><td><span class=zero-hits>world_remove(world, child, id)</span></td></tr>
<tr><td>1423</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1424</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1425</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1426</td><td>0</td><td><span class=zero-hits>for archetype_id in archetype_ids do</span></td></tr>
<tr><td>1427</td><td>0</td><td><span class=zero-hits>archetype_destroy(world, archetypes[archetype_id])</span></td></tr>
<tr><td>1428</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1429</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1430</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1431</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1432</td><td>65683</td><td><span class=high-hits>local dense_array = entity_index.dense_array</span></td></tr>
<tr><td>1433</td><td>65683</td><td><span class=high-hits>local index_of_deleted_entity = record.dense</span></td></tr>
<tr><td>1434</td><td>0</td><td><span class=zero-hits>local index_of_last_alive_entity = entity_index.alive_count</span></td></tr>
<tr><td>1435</td><td>65683</td><td><span class=high-hits>entity_index.alive_count = index_of_last_alive_entity - 1</span></td></tr>
<tr><td>1436</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1437</td><td>65683</td><td><span class=high-hits>local last_alive_entity = dense_array[index_of_last_alive_entity]</span></td></tr>
<tr><td>1438</td><td>65683</td><td><span class=high-hits>local r_swap = entity_index_try_get_any(entity_index, last_alive_entity) :: ecs_record_t</span></td></tr>
<tr><td>1439</td><td>65683</td><td><span class=high-hits>r_swap.dense = index_of_deleted_entity</span></td></tr>
<tr><td>1440</td><td>65683</td><td><span class=high-hits>record.archetype = nil :: any</span></td></tr>
<tr><td>1441</td><td>0</td><td><span class=zero-hits>record.row = nil :: any</span></td></tr>
<tr><td>1442</td><td>65683</td><td><span class=high-hits>record.dense = index_of_last_alive_entity</span></td></tr>
<tr><td>1443</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1444</td><td>0</td><td><span class=zero-hits>dense_array[index_of_deleted_entity] = last_alive_entity</span></td></tr>
<tr><td>1445</td><td>0</td><td><span class=zero-hits>dense_array[index_of_last_alive_entity] = ECS_GENERATION_INC(entity)</span></td></tr>
<tr><td>1446</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1447</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1448</td><td>0</td><td><span class=zero-hits>local function world_contains(world: ecs_world_t, entity): boolean</span></td></tr>
<tr><td>1449</td><td>0</td><td><span class=zero-hits>return entity_index_is_alive(world.entity_index, entity)</span></td></tr>
<tr><td>1450</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1451</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1452</td><td>0</td><td><span class=zero-hits>local function NOOP() end</span></td></tr>
<tr><td>1453</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1454</td><td>0</td><td><span class=zero-hits>export type QueryInner = {</span></td></tr>
<tr><td>1455</td><td>0</td><td><span class=zero-hits>compatible_archetypes: { Archetype },</span></td></tr>
<tr><td>1456</td><td>0</td><td><span class=zero-hits>ids: { i53 },</span></td></tr>
<tr><td>1457</td><td>0</td><td><span class=zero-hits>filter_with: { i53 },</span></td></tr>
<tr><td>1458</td><td>0</td><td><span class=zero-hits>filter_without: { i53 },</span></td></tr>
<tr><td>1459</td><td>0</td><td><span class=zero-hits>next: () -> (number, ...any),</span></td></tr>
<tr><td>1460</td><td>0</td><td><span class=zero-hits>world: World,</span></td></tr>
<tr><td>1461</td><td>1</td><td><span class=low-hits>}</span></td></tr>
<tr><td>1462</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1463</td><td>0</td><td><span class=zero-hits>local function query_iter_init(query: ecs_query_data_t): () -> (number, ...any)</span></td></tr>
<tr><td>1464</td><td>26</td><td><span class=low-hits>local world_query_iter_next</span></td></tr>
<tr><td>1465</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1466</td><td>26</td><td><span class=low-hits>local compatible_archetypes = query.compatible_archetypes</span></td></tr>
<tr><td>1467</td><td>26</td><td><span class=low-hits>local lastArchetype = 1</span></td></tr>
<tr><td>1468</td><td>4</td><td><span class=low-hits>local archetype = compatible_archetypes[1]</span></td></tr>
<tr><td>1469</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1470</td><td>22</td><td><span class=low-hits>return NOOP :: () -> (number, ...any)</span></td></tr>
<tr><td>1471</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1472</td><td>22</td><td><span class=low-hits>local columns = archetype.columns</span></td></tr>
<tr><td>1473</td><td>22</td><td><span class=low-hits>local entities = archetype.entities</span></td></tr>
<tr><td>1474</td><td>0</td><td><span class=zero-hits>local i = #entities</span></td></tr>
<tr><td>1475</td><td>22</td><td><span class=low-hits>local records = archetype.records</span></td></tr>
<tr><td>1476</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1477</td><td>22</td><td><span class=low-hits>local ids = query.ids</span></td></tr>
<tr><td>1478</td><td>22</td><td><span class=low-hits>local A, B, C, D, E, F, G, H, I = unpack(ids)</span></td></tr>
<tr><td>1479</td><td>0</td><td><span class=zero-hits>local a: Column, b: Column, c: Column, d: Column</span></td></tr>
<tr><td>1480</td><td>22</td><td><span class=low-hits>local e: Column, f: Column, g: Column, h: Column</span></td></tr>
<tr><td>1481</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1482</td><td>5</td><td><span class=low-hits>if not B then</span></td></tr>
<tr><td>1483</td><td>3</td><td><span class=low-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1484</td><td>3</td><td><span class=low-hits>elseif not C then</span></td></tr>
<tr><td>1485</td><td>2</td><td><span class=low-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1486</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1487</td><td>0</td><td><span class=zero-hits>elseif not D then</span></td></tr>
<tr><td>1488</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1489</td><td>2</td><td><span class=low-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1490</td><td>1</td><td><span class=low-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1491</td><td>1</td><td><span class=low-hits>elseif not E then</span></td></tr>
<tr><td>1492</td><td>1</td><td><span class=low-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1493</td><td>1</td><td><span class=low-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1494</td><td>1</td><td><span class=low-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1495</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1496</td><td>0</td><td><span class=zero-hits>elseif not F then</span></td></tr>
<tr><td>1497</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1498</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1499</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1500</td><td>1</td><td><span class=low-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1501</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1502</td><td>0</td><td><span class=zero-hits>elseif not G then</span></td></tr>
<tr><td>1503</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1504</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1505</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1506</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1507</td><td>1</td><td><span class=low-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1508</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1509</td><td>0</td><td><span class=zero-hits>elseif not H then</span></td></tr>
<tr><td>1510</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1511</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1512</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1513</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1514</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1515</td><td>1</td><td><span class=low-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1516</td><td>0</td><td><span class=zero-hits>g = columns[records[G]]</span></td></tr>
<tr><td>1517</td><td>0</td><td><span class=zero-hits>elseif not I then</span></td></tr>
<tr><td>1518</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1519</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1520</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1521</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1522</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1523</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1524</td><td>0</td><td><span class=zero-hits>g = columns[records[G]]</span></td></tr>
<tr><td>1525</td><td>0</td><td><span class=zero-hits>h = columns[records[H]]</span></td></tr>
<tr><td>1526</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1527</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1528</td><td>556</td><td><span class=low-hits>if not B then</span></td></tr>
<tr><td>1529</td><td>556</td><td><span class=low-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1530</td><td>26</td><td><span class=low-hits>local entity = entities[i]</span></td></tr>
<tr><td>1531</td><td>26</td><td><span class=low-hits>while entity == nil do</span></td></tr>
<tr><td>1532</td><td>26</td><td><span class=low-hits>lastArchetype += 1</span></td></tr>
<tr><td>1533</td><td>18</td><td><span class=low-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1534</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1535</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1536</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1537</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1538</td><td>8</td><td><span class=low-hits>entities = archetype.entities</span></td></tr>
<tr><td>1539</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1540</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1541</td><td>8</td><td><span class=low-hits>continue</span></td></tr>
<tr><td>1542</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1543</td><td>8</td><td><span class=low-hits>entity = entities[i]</span></td></tr>
<tr><td>1544</td><td>8</td><td><span class=low-hits>columns = archetype.columns</span></td></tr>
<tr><td>1545</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1546</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1547</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1548</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1549</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1550</td><td>538</td><td><span class=low-hits>i -= 1</span></td></tr>
<tr><td>1551</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1552</td><td>5</td><td><span class=low-hits>return entity, a[row]</span></td></tr>
<tr><td>1553</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1554</td><td>7</td><td><span class=low-hits>elseif not C then</span></td></tr>
<tr><td>1555</td><td>7</td><td><span class=low-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1556</td><td>3</td><td><span class=low-hits>local entity = entities[i]</span></td></tr>
<tr><td>1557</td><td>3</td><td><span class=low-hits>while entity == nil do</span></td></tr>
<tr><td>1558</td><td>3</td><td><span class=low-hits>lastArchetype += 1</span></td></tr>
<tr><td>1559</td><td>3</td><td><span class=low-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1560</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1561</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1562</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1563</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1564</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>1565</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1566</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1567</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1568</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1569</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>1570</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>1571</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1572</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1573</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1574</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1575</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1576</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1577</td><td>4</td><td><span class=low-hits>i -= 1</span></td></tr>
<tr><td>1578</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1579</td><td>2</td><td><span class=low-hits>return entity, a[row], b[row]</span></td></tr>
<tr><td>1580</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1581</td><td>0</td><td><span class=zero-hits>elseif not D then</span></td></tr>
<tr><td>1582</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1583</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>1584</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>1585</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>1586</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1587</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1588</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1589</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1590</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1591</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>1592</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1593</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1594</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1595</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1596</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>1597</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>1598</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1599</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1600</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1601</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1602</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1603</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1604</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1605</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>1606</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1607</td><td>2</td><td><span class=low-hits>return entity, a[row], b[row], c[row]</span></td></tr>
<tr><td>1608</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1609</td><td>2</td><td><span class=low-hits>elseif not E then</span></td></tr>
<tr><td>1610</td><td>2</td><td><span class=low-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1611</td><td>1</td><td><span class=low-hits>local entity = entities[i]</span></td></tr>
<tr><td>1612</td><td>1</td><td><span class=low-hits>while entity == nil do</span></td></tr>
<tr><td>1613</td><td>1</td><td><span class=low-hits>lastArchetype += 1</span></td></tr>
<tr><td>1614</td><td>1</td><td><span class=low-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1615</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1616</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1617</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1618</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1619</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>1620</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1621</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1622</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1623</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1624</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>1625</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>1626</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1627</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1628</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1629</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1630</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1631</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1632</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1633</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1634</td><td>1</td><td><span class=low-hits>i -= 1</span></td></tr>
<tr><td>1635</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1636</td><td>1</td><td><span class=low-hits>return entity, a[row], b[row], c[row], d[row]</span></td></tr>
<tr><td>1637</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1638</td><td>0</td><td><span class=zero-hits>elseif not F then</span></td></tr>
<tr><td>1639</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1640</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>1641</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>1642</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>1643</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1644</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1645</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1646</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1647</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1648</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>1649</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1650</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1651</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1652</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1653</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>1654</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>1655</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1656</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1657</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1658</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1659</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1660</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1661</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1662</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1663</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1664</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>1665</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1666</td><td>1</td><td><span class=low-hits>return entity, a[row], b[row], c[row], d[row], e[row]</span></td></tr>
<tr><td>1667</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1668</td><td>0</td><td><span class=zero-hits>elseif not G then</span></td></tr>
<tr><td>1669</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1670</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>1671</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>1672</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>1673</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1674</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1675</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1676</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1677</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1678</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>1679</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1680</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1681</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1682</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1683</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>1684</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>1685</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1686</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1687</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1688</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1689</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1690</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1691</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1692</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1693</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1694</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1695</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>1696</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1697</td><td>1</td><td><span class=low-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row]</span></td></tr>
<tr><td>1698</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1699</td><td>0</td><td><span class=zero-hits>elseif not H then</span></td></tr>
<tr><td>1700</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1701</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>1702</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>1703</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>1704</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1705</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1706</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1707</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1708</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1709</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>1710</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1711</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1712</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1713</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1714</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>1715</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>1716</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1717</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1718</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1719</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1720</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1721</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1722</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1723</td><td>0</td><td><span class=zero-hits>g = columns[records[G]]</span></td></tr>
<tr><td>1724</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1725</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1726</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1727</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>1728</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1729</td><td>1</td><td><span class=low-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row], g[row]</span></td></tr>
<tr><td>1730</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1731</td><td>0</td><td><span class=zero-hits>elseif not I then</span></td></tr>
<tr><td>1732</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1733</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>1734</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>1735</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>1736</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1737</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1738</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1739</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1740</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1741</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>1742</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1743</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1744</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1745</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1746</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>1747</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>1748</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1749</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1750</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1751</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1752</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1753</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1754</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1755</td><td>0</td><td><span class=zero-hits>g = columns[records[G]]</span></td></tr>
<tr><td>1756</td><td>0</td><td><span class=zero-hits>h = columns[records[H]]</span></td></tr>
<tr><td>1757</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1758</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1759</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1760</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>1761</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1762</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row], g[row], h[row]</span></td></tr>
<tr><td>1763</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1764</td><td>1</td><td><span class=low-hits>else</span></td></tr>
<tr><td>1765</td><td>2</td><td><span class=low-hits>local output = {}</span></td></tr>
<tr><td>1766</td><td>2</td><td><span class=low-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>1767</td><td>1</td><td><span class=low-hits>local entity = entities[i]</span></td></tr>
<tr><td>1768</td><td>1</td><td><span class=low-hits>while entity == nil do</span></td></tr>
<tr><td>1769</td><td>1</td><td><span class=low-hits>lastArchetype += 1</span></td></tr>
<tr><td>1770</td><td>1</td><td><span class=low-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1771</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1772</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>1773</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1774</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1775</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>1776</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>1777</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>1778</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1779</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1780</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>1781</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>1782</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>1783</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1784</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1785</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>1786</td><td>1</td><td><span class=low-hits>i -= 1</span></td></tr>
<tr><td>1787</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1788</td><td>0</td><td><span class=zero-hits>for j, id in ids do</span></td></tr>
<tr><td>1789</td><td>0</td><td><span class=zero-hits>output[j] = columns[records[id]][row]</span></td></tr>
<tr><td>1790</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1791</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1792</td><td>0</td><td><span class=zero-hits>return entity, unpack(output)</span></td></tr>
<tr><td>1793</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1794</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1795</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1796</td><td>0</td><td><span class=zero-hits>query.next = world_query_iter_next</span></td></tr>
<tr><td>1797</td><td>0</td><td><span class=zero-hits>return world_query_iter_next</span></td></tr>
<tr><td>1798</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1799</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1800</td><td>20</td><td><span class=low-hits>local function query_iter(query): () -> (number, ...any)</span></td></tr>
<tr><td>1801</td><td>19</td><td><span class=low-hits>local query_next = query.next</span></td></tr>
<tr><td>1802</td><td>0</td><td><span class=zero-hits>if not query_next then</span></td></tr>
<tr><td>1803</td><td>20</td><td><span class=low-hits>query_next = query_iter_init(query)</span></td></tr>
<tr><td>1804</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1805</td><td>0</td><td><span class=zero-hits>return query_next</span></td></tr>
<tr><td>1806</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1807</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1808</td><td>6</td><td><span class=low-hits>local function query_without(query: ecs_query_data_t, ...: i53)</span></td></tr>
<tr><td>1809</td><td>6</td><td><span class=low-hits>local without = { ... }</span></td></tr>
<tr><td>1810</td><td>6</td><td><span class=low-hits>query.filter_without = without</span></td></tr>
<tr><td>1811</td><td>3</td><td><span class=low-hits>local compatible_archetypes = query.compatible_archetypes</span></td></tr>
<tr><td>1812</td><td>3</td><td><span class=low-hits>for i = #compatible_archetypes, 1, -1 do</span></td></tr>
<tr><td>1813</td><td>3</td><td><span class=low-hits>local archetype = compatible_archetypes[i]</span></td></tr>
<tr><td>1814</td><td>0</td><td><span class=zero-hits>local records = archetype.records</span></td></tr>
<tr><td>1815</td><td>3</td><td><span class=low-hits>local matches = true</span></td></tr>
<tr><td>1816</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1817</td><td>2</td><td><span class=low-hits>for _, id in without do</span></td></tr>
<tr><td>1818</td><td>2</td><td><span class=low-hits>if records[id] then</span></td></tr>
<tr><td>1819</td><td>0</td><td><span class=zero-hits>matches = false</span></td></tr>
<tr><td>1820</td><td>0</td><td><span class=zero-hits>break</span></td></tr>
<tr><td>1821</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1822</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1823</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1824</td><td>0</td><td><span class=zero-hits>if matches then</span></td></tr>
<tr><td>1825</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1826</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1827</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1828</td><td>0</td><td><span class=zero-hits>local last = #compatible_archetypes</span></td></tr>
<tr><td>1829</td><td>0</td><td><span class=zero-hits>if last ~= i then</span></td></tr>
<tr><td>1830</td><td>2</td><td><span class=low-hits>compatible_archetypes[i] = compatible_archetypes[last]</span></td></tr>
<tr><td>1831</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1832</td><td>0</td><td><span class=zero-hits>compatible_archetypes[last] = nil :: any</span></td></tr>
<tr><td>1833</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1834</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1835</td><td>0</td><td><span class=zero-hits>return query :: any</span></td></tr>
<tr><td>1836</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1837</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1838</td><td>1</td><td><span class=low-hits>local function query_with(query: ecs_query_data_t, ...: i53)</span></td></tr>
<tr><td>1839</td><td>1</td><td><span class=low-hits>local compatible_archetypes = query.compatible_archetypes</span></td></tr>
<tr><td>1840</td><td>0</td><td><span class=zero-hits>local with = { ... }</span></td></tr>
<tr><td>1841</td><td>1</td><td><span class=low-hits>query.filter_with = with</span></td></tr>
<tr><td>1842</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1843</td><td>0</td><td><span class=zero-hits>for i = #compatible_archetypes, 1, -1 do</span></td></tr>
<tr><td>1844</td><td>0</td><td><span class=zero-hits>local archetype = compatible_archetypes[i]</span></td></tr>
<tr><td>1845</td><td>0</td><td><span class=zero-hits>local records = archetype.records</span></td></tr>
<tr><td>1846</td><td>0</td><td><span class=zero-hits>local matches = true</span></td></tr>
<tr><td>1847</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1848</td><td>0</td><td><span class=zero-hits>for _, id in with do</span></td></tr>
<tr><td>1849</td><td>0</td><td><span class=zero-hits>if not records[id] then</span></td></tr>
<tr><td>1850</td><td>0</td><td><span class=zero-hits>matches = false</span></td></tr>
<tr><td>1851</td><td>0</td><td><span class=zero-hits>break</span></td></tr>
<tr><td>1852</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1853</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1854</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1855</td><td>0</td><td><span class=zero-hits>if matches then</span></td></tr>
<tr><td>1856</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>1857</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1858</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1859</td><td>0</td><td><span class=zero-hits>local last = #compatible_archetypes</span></td></tr>
<tr><td>1860</td><td>0</td><td><span class=zero-hits>if last ~= i then</span></td></tr>
<tr><td>1861</td><td>0</td><td><span class=zero-hits>compatible_archetypes[i] = compatible_archetypes[last]</span></td></tr>
<tr><td>1862</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1863</td><td>0</td><td><span class=zero-hits>compatible_archetypes[last] = nil :: any</span></td></tr>
<tr><td>1864</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1865</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1866</td><td>0</td><td><span class=zero-hits>return query :: any</span></td></tr>
<tr><td>1867</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1868</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1869</td><td><span class='text-muted'>N/A</span></td><td>-- Meant for directly iterating over archetypes to minimize</td>></tr>
<tr><td>1870</td><td><span class='text-muted'>N/A</span></td><td>-- function call overhead. Should not be used unless iterating over</td>></tr>
<tr><td>1871</td><td><span class='text-muted'>N/A</span></td><td>-- hundreds of thousands of entities in bulk.</td>></tr>
<tr><td>1872</td><td>0</td><td><span class=zero-hits>local function query_archetypes(query)</span></td></tr>
<tr><td>1873</td><td>0</td><td><span class=zero-hits>return query.compatible_archetypes</span></td></tr>
<tr><td>1874</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1875</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1876</td><td>6</td><td><span class=low-hits>local function query_cached(query: ecs_query_data_t)</span></td></tr>
<tr><td>1877</td><td>6</td><td><span class=low-hits>local with = query.filter_with</span></td></tr>
<tr><td>1878</td><td>1</td><td><span class=low-hits>local ids = query.ids</span></td></tr>
<tr><td>1879</td><td>0</td><td><span class=zero-hits>if with then</span></td></tr>
<tr><td>1880</td><td>5</td><td><span class=low-hits>table.move(ids, 1, #ids, #with + 1, with)</span></td></tr>
<tr><td>1881</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
<tr><td>1882</td><td>0</td><td><span class=zero-hits>query.filter_with = ids</span></td></tr>
<tr><td>1883</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1884</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1885</td><td>0</td><td><span class=zero-hits>local compatible_archetypes = query.compatible_archetypes</span></td></tr>
<tr><td>1886</td><td>6</td><td><span class=low-hits>local lastArchetype = 1</span></td></tr>
<tr><td>1887</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1888</td><td>6</td><td><span class=low-hits>local A, B, C, D, E, F, G, H, I = unpack(ids)</span></td></tr>
<tr><td>1889</td><td>0</td><td><span class=zero-hits>local a: Column, b: Column, c: Column, d: Column</span></td></tr>
<tr><td>1890</td><td>6</td><td><span class=low-hits>local e: Column, f: Column, g: Column, h: Column</span></td></tr>
<tr><td>1891</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1892</td><td>6</td><td><span class=low-hits>local world_query_iter_next</span></td></tr>
<tr><td>1893</td><td>6</td><td><span class=low-hits>local columns: { Column }</span></td></tr>
<tr><td>1894</td><td>6</td><td><span class=low-hits>local entities: { number }</span></td></tr>
<tr><td>1895</td><td>6</td><td><span class=low-hits>local i: number</span></td></tr>
<tr><td>1896</td><td>6</td><td><span class=low-hits>local archetype: ecs_archetype_t</span></td></tr>
<tr><td>1897</td><td>0</td><td><span class=zero-hits>local records: { number }</span></td></tr>
<tr><td>1898</td><td>6</td><td><span class=low-hits>local archetypes = query.compatible_archetypes</span></td></tr>
<tr><td>1899</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1900</td><td>0</td><td><span class=zero-hits>local world = query.world :: { observable: ecs_observable_t }</span></td></tr>
<tr><td>1901</td><td><span class='text-muted'>N/A</span></td><td>-- Only need one observer for EcsArchetypeCreate and EcsArchetypeDelete respectively</td>></tr>
<tr><td>1902</td><td><span class='text-muted'>N/A</span></td><td>-- because the event will be emitted for all components of that Archetype.</td>></tr>
<tr><td>1903</td><td>6</td><td><span class=low-hits>local observable = world.observable :: ecs_observable_t</span></td></tr>
<tr><td>1904</td><td>6</td><td><span class=low-hits>local on_create_action = observable[EcsOnArchetypeCreate]</span></td></tr>
<tr><td>1905</td><td>6</td><td><span class=low-hits>if not on_create_action then</span></td></tr>
<tr><td>1906</td><td>0</td><td><span class=zero-hits>on_create_action = {}</span></td></tr>
<tr><td>1907</td><td>6</td><td><span class=low-hits>observable[EcsOnArchetypeCreate] = on_create_action</span></td></tr>
<tr><td>1908</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1909</td><td>6</td><td><span class=low-hits>local query_cache_on_create = on_create_action[A]</span></td></tr>
<tr><td>1910</td><td>6</td><td><span class=low-hits>if not query_cache_on_create then</span></td></tr>
<tr><td>1911</td><td>0</td><td><span class=zero-hits>query_cache_on_create = {}</span></td></tr>
<tr><td>1912</td><td>0</td><td><span class=zero-hits>on_create_action[A] = query_cache_on_create</span></td></tr>
<tr><td>1913</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1914</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1915</td><td>6</td><td><span class=low-hits>local on_delete_action = observable[EcsOnArchetypeDelete]</span></td></tr>
<tr><td>1916</td><td>6</td><td><span class=low-hits>if not on_delete_action then</span></td></tr>
<tr><td>1917</td><td>0</td><td><span class=zero-hits>on_delete_action = {}</span></td></tr>
<tr><td>1918</td><td>6</td><td><span class=low-hits>observable[EcsOnArchetypeDelete] = on_delete_action</span></td></tr>
<tr><td>1919</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1920</td><td>6</td><td><span class=low-hits>local query_cache_on_delete = on_delete_action[A]</span></td></tr>
<tr><td>1921</td><td>6</td><td><span class=low-hits>if not query_cache_on_delete then</span></td></tr>
<tr><td>1922</td><td>0</td><td><span class=zero-hits>query_cache_on_delete = {}</span></td></tr>
<tr><td>1923</td><td>0</td><td><span class=zero-hits>on_delete_action[A] = query_cache_on_delete</span></td></tr>
<tr><td>1924</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1925</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1926</td><td>0</td><td><span class=zero-hits>local function on_create_callback(archetype)</span></td></tr>
<tr><td>1927</td><td>0</td><td><span class=zero-hits>table.insert(archetypes, archetype)</span></td></tr>
<tr><td>1928</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1929</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1930</td><td>1</td><td><span class=low-hits>local function on_delete_callback(archetype)</span></td></tr>
<tr><td>1931</td><td>1</td><td><span class=low-hits>local i = table.find(archetypes, archetype) :: number</span></td></tr>
<tr><td>1932</td><td>1</td><td><span class=low-hits>local n = #archetypes</span></td></tr>
<tr><td>1933</td><td>0</td><td><span class=zero-hits>archetypes[i] = archetypes[n]</span></td></tr>
<tr><td>1934</td><td>0</td><td><span class=zero-hits>archetypes[n] = nil</span></td></tr>
<tr><td>1935</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1936</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1937</td><td>0</td><td><span class=zero-hits>local observer_for_create = { query = query, callback = on_create_callback }</span></td></tr>
<tr><td>1938</td><td>6</td><td><span class=low-hits>local observer_for_delete = { query = query, callback = on_delete_callback }</span></td></tr>
<tr><td>1939</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1940</td><td>0</td><td><span class=zero-hits>table.insert(query_cache_on_create, observer_for_create)</span></td></tr>
<tr><td>1941</td><td>6</td><td><span class=low-hits>table.insert(query_cache_on_delete, observer_for_delete)</span></td></tr>
<tr><td>1942</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1943</td><td>11</td><td><span class=low-hits>local function cached_query_iter()</span></td></tr>
<tr><td>1944</td><td>11</td><td><span class=low-hits>lastArchetype = 1</span></td></tr>
<tr><td>1945</td><td>1</td><td><span class=low-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>1946</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>1947</td><td>10</td><td><span class=low-hits>return NOOP</span></td></tr>
<tr><td>1948</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1949</td><td>10</td><td><span class=low-hits>entities = archetype.entities</span></td></tr>
<tr><td>1950</td><td>10</td><td><span class=low-hits>i = #entities</span></td></tr>
<tr><td>1951</td><td>10</td><td><span class=low-hits>records = archetype.records</span></td></tr>
<tr><td>1952</td><td>6</td><td><span class=low-hits>columns = archetype.columns</span></td></tr>
<tr><td>1953</td><td>4</td><td><span class=low-hits>if not B then</span></td></tr>
<tr><td>1954</td><td>4</td><td><span class=low-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1955</td><td>4</td><td><span class=low-hits>elseif not C then</span></td></tr>
<tr><td>1956</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1957</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1958</td><td>0</td><td><span class=zero-hits>elseif not D then</span></td></tr>
<tr><td>1959</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1960</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1961</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1962</td><td>0</td><td><span class=zero-hits>elseif not E then</span></td></tr>
<tr><td>1963</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1964</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1965</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1966</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1967</td><td>0</td><td><span class=zero-hits>elseif not F then</span></td></tr>
<tr><td>1968</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1969</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1970</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1971</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1972</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1973</td><td>0</td><td><span class=zero-hits>elseif not G then</span></td></tr>
<tr><td>1974</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1975</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1976</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1977</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1978</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1979</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1980</td><td>0</td><td><span class=zero-hits>elseif not H then</span></td></tr>
<tr><td>1981</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1982</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1983</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1984</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1985</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1986</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1987</td><td>0</td><td><span class=zero-hits>g = columns[records[G]]</span></td></tr>
<tr><td>1988</td><td>0</td><td><span class=zero-hits>elseif not I then</span></td></tr>
<tr><td>1989</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>1990</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>1991</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>1992</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>1993</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>1994</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>1995</td><td>0</td><td><span class=zero-hits>g = columns[records[G]]</span></td></tr>
<tr><td>1996</td><td>0</td><td><span class=zero-hits>h = columns[records[H]]</span></td></tr>
<tr><td>1997</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>1998</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>1999</td><td>0</td><td><span class=zero-hits>return world_query_iter_next</span></td></tr>
<tr><td>2000</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2001</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2002</td><td>11</td><td><span class=low-hits>if not B then</span></td></tr>
<tr><td>2003</td><td>11</td><td><span class=low-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2004</td><td>6</td><td><span class=low-hits>local entity = entities[i]</span></td></tr>
<tr><td>2005</td><td>6</td><td><span class=low-hits>while entity == nil do</span></td></tr>
<tr><td>2006</td><td>6</td><td><span class=low-hits>lastArchetype += 1</span></td></tr>
<tr><td>2007</td><td>6</td><td><span class=low-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2008</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2009</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2010</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2011</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2012</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2013</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2014</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2015</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2016</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2017</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2018</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2019</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2020</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>2021</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2022</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2023</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2024</td><td>5</td><td><span class=low-hits>i -= 1</span></td></tr>
<tr><td>2025</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2026</td><td>1</td><td><span class=low-hits>return entity, a[row]</span></td></tr>
<tr><td>2027</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2028</td><td>8</td><td><span class=low-hits>elseif not C then</span></td></tr>
<tr><td>2029</td><td>8</td><td><span class=low-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2030</td><td>4</td><td><span class=low-hits>local entity = entities[i]</span></td></tr>
<tr><td>2031</td><td>4</td><td><span class=low-hits>while entity == nil do</span></td></tr>
<tr><td>2032</td><td>4</td><td><span class=low-hits>lastArchetype += 1</span></td></tr>
<tr><td>2033</td><td>4</td><td><span class=low-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2034</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2035</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2036</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2037</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2038</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2039</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2040</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2041</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2042</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2043</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2044</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2045</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2046</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>2047</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>2048</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2049</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2050</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2051</td><td>4</td><td><span class=low-hits>i -= 1</span></td></tr>
<tr><td>2052</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2053</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row]</span></td></tr>
<tr><td>2054</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2055</td><td>0</td><td><span class=zero-hits>elseif not D then</span></td></tr>
<tr><td>2056</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2057</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>2058</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>2059</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>2060</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2061</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2062</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2063</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2064</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2065</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2066</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2067</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2068</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2069</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2070</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2071</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2072</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2073</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>2074</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>2075</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>2076</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2077</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2078</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2079</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>2080</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2081</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row]</span></td></tr>
<tr><td>2082</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2083</td><td>0</td><td><span class=zero-hits>elseif not E then</span></td></tr>
<tr><td>2084</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2085</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>2086</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>2087</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>2088</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2089</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2090</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2091</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2092</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2093</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2094</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2095</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2096</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2097</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2098</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2099</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2100</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2101</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>2102</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>2103</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>2104</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>2105</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2106</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2107</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2108</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>2109</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2110</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row]</span></td></tr>
<tr><td>2111</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2112</td><td>0</td><td><span class=zero-hits>elseif not F then</span></td></tr>
<tr><td>2113</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2114</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>2115</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>2116</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>2117</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2118</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2119</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2120</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2121</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2122</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2123</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2124</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2125</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2126</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2127</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2128</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2129</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2130</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>2131</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>2132</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>2133</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>2134</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>2135</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2136</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2137</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2138</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>2139</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2140</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row]</span></td></tr>
<tr><td>2141</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2142</td><td>0</td><td><span class=zero-hits>elseif not G then</span></td></tr>
<tr><td>2143</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2144</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>2145</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>2146</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>2147</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2148</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2149</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2150</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2151</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2152</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2153</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2154</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2155</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2156</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2157</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2158</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2159</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2160</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>2161</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>2162</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>2163</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>2164</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>2165</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>2166</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2167</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2168</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2169</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>2170</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2171</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row]</span></td></tr>
<tr><td>2172</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2173</td><td>0</td><td><span class=zero-hits>elseif not H then</span></td></tr>
<tr><td>2174</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2175</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>2176</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>2177</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>2178</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2179</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2180</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2181</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2182</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2183</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2184</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2185</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2186</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2187</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2188</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2189</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2190</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2191</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>2192</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>2193</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>2194</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>2195</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>2196</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>2197</td><td>0</td><td><span class=zero-hits>g = columns[records[G]]</span></td></tr>
<tr><td>2198</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2199</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2200</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2201</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>2202</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2203</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row], g[row]</span></td></tr>
<tr><td>2204</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2205</td><td>0</td><td><span class=zero-hits>elseif not I then</span></td></tr>
<tr><td>2206</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2207</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>2208</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>2209</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>2210</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2211</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2212</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2213</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2214</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2215</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2216</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2217</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2218</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2219</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2220</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2221</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2222</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2223</td><td>0</td><td><span class=zero-hits>a = columns[records[A]]</span></td></tr>
<tr><td>2224</td><td>0</td><td><span class=zero-hits>b = columns[records[B]]</span></td></tr>
<tr><td>2225</td><td>0</td><td><span class=zero-hits>c = columns[records[C]]</span></td></tr>
<tr><td>2226</td><td>0</td><td><span class=zero-hits>d = columns[records[D]]</span></td></tr>
<tr><td>2227</td><td>0</td><td><span class=zero-hits>e = columns[records[E]]</span></td></tr>
<tr><td>2228</td><td>0</td><td><span class=zero-hits>f = columns[records[F]]</span></td></tr>
<tr><td>2229</td><td>0</td><td><span class=zero-hits>g = columns[records[G]]</span></td></tr>
<tr><td>2230</td><td>0</td><td><span class=zero-hits>h = columns[records[H]]</span></td></tr>
<tr><td>2231</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2232</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2233</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2234</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>2235</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2236</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row], g[row], h[row]</span></td></tr>
<tr><td>2237</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2238</td><td>0</td><td><span class=zero-hits>else</span></td></tr>
<tr><td>2239</td><td>0</td><td><span class=zero-hits>local queryOutput = {}</span></td></tr>
<tr><td>2240</td><td>0</td><td><span class=zero-hits>function world_query_iter_next(): any</span></td></tr>
<tr><td>2241</td><td>0</td><td><span class=zero-hits>local entity = entities[i]</span></td></tr>
<tr><td>2242</td><td>0</td><td><span class=zero-hits>while entity == nil do</span></td></tr>
<tr><td>2243</td><td>0</td><td><span class=zero-hits>lastArchetype += 1</span></td></tr>
<tr><td>2244</td><td>0</td><td><span class=zero-hits>archetype = compatible_archetypes[lastArchetype]</span></td></tr>
<tr><td>2245</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2246</td><td>0</td><td><span class=zero-hits>return nil</span></td></tr>
<tr><td>2247</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2248</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2249</td><td>0</td><td><span class=zero-hits>entities = archetype.entities</span></td></tr>
<tr><td>2250</td><td>0</td><td><span class=zero-hits>i = #entities</span></td></tr>
<tr><td>2251</td><td>0</td><td><span class=zero-hits>if i == 0 then</span></td></tr>
<tr><td>2252</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2253</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2254</td><td>0</td><td><span class=zero-hits>entity = entities[i]</span></td></tr>
<tr><td>2255</td><td>0</td><td><span class=zero-hits>columns = archetype.columns</span></td></tr>
<tr><td>2256</td><td>0</td><td><span class=zero-hits>records = archetype.records</span></td></tr>
<tr><td>2257</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2258</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2259</td><td>0</td><td><span class=zero-hits>local row = i</span></td></tr>
<tr><td>2260</td><td>0</td><td><span class=zero-hits>i -= 1</span></td></tr>
<tr><td>2261</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2262</td><td>0</td><td><span class=zero-hits>if not F then</span></td></tr>
<tr><td>2263</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row]</span></td></tr>
<tr><td>2264</td><td>0</td><td><span class=zero-hits>elseif not G then</span></td></tr>
<tr><td>2265</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row]</span></td></tr>
<tr><td>2266</td><td>0</td><td><span class=zero-hits>elseif not H then</span></td></tr>
<tr><td>2267</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row], g[row]</span></td></tr>
<tr><td>2268</td><td>0</td><td><span class=zero-hits>elseif not I then</span></td></tr>
<tr><td>2269</td><td>0</td><td><span class=zero-hits>return entity, a[row], b[row], c[row], d[row], e[row], f[row], g[row], h[row]</span></td></tr>
<tr><td>2270</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2271</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2272</td><td>0</td><td><span class=zero-hits>for j, id in ids do</span></td></tr>
<tr><td>2273</td><td>0</td><td><span class=zero-hits>queryOutput[j] = columns[records[id]][row]</span></td></tr>
<tr><td>2274</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2275</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2276</td><td>0</td><td><span class=zero-hits>return entity, unpack(queryOutput)</span></td></tr>
<tr><td>2277</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2278</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2279</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2280</td><td>6</td><td><span class=low-hits>local cached_query = query :: any</span></td></tr>
<tr><td>2281</td><td>6</td><td><span class=low-hits>cached_query.archetypes = query_archetypes</span></td></tr>
<tr><td>2282</td><td>6</td><td><span class=low-hits>cached_query.__iter = cached_query_iter</span></td></tr>
<tr><td>2283</td><td>6</td><td><span class=low-hits>cached_query.iter = cached_query_iter</span></td></tr>
<tr><td>2284</td><td>0</td><td><span class=zero-hits>setmetatable(cached_query, cached_query)</span></td></tr>
<tr><td>2285</td><td>0</td><td><span class=zero-hits>return cached_query</span></td></tr>
<tr><td>2286</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2287</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2288</td><td>1</td><td><span class=low-hits>local Query = {}</span></td></tr>
<tr><td>2289</td><td>1</td><td><span class=low-hits>Query.__index = Query</span></td></tr>
<tr><td>2290</td><td>1</td><td><span class=low-hits>Query.__iter = query_iter</span></td></tr>
<tr><td>2291</td><td>1</td><td><span class=low-hits>Query.iter = query_iter_init</span></td></tr>
<tr><td>2292</td><td>1</td><td><span class=low-hits>Query.without = query_without</span></td></tr>
<tr><td>2293</td><td>1</td><td><span class=low-hits>Query.with = query_with</span></td></tr>
<tr><td>2294</td><td>0</td><td><span class=zero-hits>Query.archetypes = query_archetypes</span></td></tr>
<tr><td>2295</td><td>1</td><td><span class=low-hits>Query.cached = query_cached</span></td></tr>
<tr><td>2296</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2297</td><td>33</td><td><span class=low-hits>local function world_query(world: ecs_world_t, ...)</span></td></tr>
<tr><td>2298</td><td>0</td><td><span class=zero-hits>local compatible_archetypes = {}</span></td></tr>
<tr><td>2299</td><td>33</td><td><span class=low-hits>local length = 0</span></td></tr>
<tr><td>2300</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2301</td><td>33</td><td><span class=low-hits>local ids = { ... }</span></td></tr>
<tr><td>2302</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2303</td><td>33</td><td><span class=low-hits>local archetypes = world.archetypes</span></td></tr>
<tr><td>2304</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2305</td><td>0</td><td><span class=zero-hits>local idr: ecs_id_record_t?</span></td></tr>
<tr><td>2306</td><td>33</td><td><span class=low-hits>local component_index = world.component_index</span></td></tr>
<tr><td>2307</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2308</td><td>33</td><td><span class=low-hits>local q = setmetatable({</span></td></tr>
<tr><td>2309</td><td>33</td><td><span class=low-hits>ids = ids,</span></td></tr>
<tr><td>2310</td><td>33</td><td><span class=low-hits>compatible_archetypes = compatible_archetypes,</span></td></tr>
<tr><td>2311</td><td>0</td><td><span class=zero-hits>world = world,</span></td></tr>
<tr><td>2312</td><td>33</td><td><span class=low-hits>}, Query)</span></td></tr>
<tr><td>2313</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2314</td><td>47</td><td><span class=low-hits>for _, id in ids do</span></td></tr>
<tr><td>2315</td><td>7</td><td><span class=low-hits>local map = component_index[id]</span></td></tr>
<tr><td>2316</td><td>0</td><td><span class=zero-hits>if not map then</span></td></tr>
<tr><td>2317</td><td>0</td><td><span class=zero-hits>return q</span></td></tr>
<tr><td>2318</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2319</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2320</td><td>0</td><td><span class=zero-hits>if idr == nil or map.size < idr.size then</span></td></tr>
<tr><td>2321</td><td>0</td><td><span class=zero-hits>idr = map</span></td></tr>
<tr><td>2322</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2323</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2324</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2325</td><td>0</td><td><span class=zero-hits>if not idr then</span></td></tr>
<tr><td>2326</td><td>0</td><td><span class=zero-hits>return q</span></td></tr>
<tr><td>2327</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2328</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2329</td><td>48</td><td><span class=low-hits>for archetype_id in idr.cache do</span></td></tr>
<tr><td>2330</td><td>0</td><td><span class=zero-hits>local compatibleArchetype = archetypes[archetype_id]</span></td></tr>
<tr><td>2331</td><td>0</td><td><span class=zero-hits>if #compatibleArchetype.entities == 0 then</span></td></tr>
<tr><td>2332</td><td>34</td><td><span class=low-hits>continue</span></td></tr>
<tr><td>2333</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2334</td><td>34</td><td><span class=low-hits>local records = compatibleArchetype.records</span></td></tr>
<tr><td>2335</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2336</td><td>34</td><td><span class=low-hits>local skip = false</span></td></tr>
<tr><td>2337</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2338</td><td>47</td><td><span class=low-hits>for i, id in ids do</span></td></tr>
<tr><td>2339</td><td>0</td><td><span class=zero-hits>local tr = records[id]</span></td></tr>
<tr><td>2340</td><td>0</td><td><span class=zero-hits>if not tr then</span></td></tr>
<tr><td>2341</td><td>0</td><td><span class=zero-hits>skip = true</span></td></tr>
<tr><td>2342</td><td>0</td><td><span class=zero-hits>break</span></td></tr>
<tr><td>2343</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2344</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2345</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2346</td><td>0</td><td><span class=zero-hits>if skip then</span></td></tr>
<tr><td>2347</td><td>0</td><td><span class=zero-hits>continue</span></td></tr>
<tr><td>2348</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2349</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2350</td><td>0</td><td><span class=zero-hits>length += 1</span></td></tr>
<tr><td>2351</td><td>0</td><td><span class=zero-hits>compatible_archetypes[length] = compatibleArchetype</span></td></tr>
<tr><td>2352</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2353</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2354</td><td>0</td><td><span class=zero-hits>return q</span></td></tr>
<tr><td>2355</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2356</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2357</td><td>4</td><td><span class=low-hits>local function world_each(world: ecs_world_t, id: i53): () -> ()</span></td></tr>
<tr><td>2358</td><td>0</td><td><span class=zero-hits>local idr = world.component_index[id]</span></td></tr>
<tr><td>2359</td><td>0</td><td><span class=zero-hits>if not idr then</span></td></tr>
<tr><td>2360</td><td>0</td><td><span class=zero-hits>return NOOP</span></td></tr>
<tr><td>2361</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2362</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2363</td><td>4</td><td><span class=low-hits>local idr_cache = idr.cache</span></td></tr>
<tr><td>2364</td><td>4</td><td><span class=low-hits>local archetypes = world.archetypes</span></td></tr>
<tr><td>2365</td><td>4</td><td><span class=low-hits>local archetype_id = next(idr_cache, nil) :: number</span></td></tr>
<tr><td>2366</td><td>0</td><td><span class=zero-hits>local archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>2367</td><td>0</td><td><span class=zero-hits>if not archetype then</span></td></tr>
<tr><td>2368</td><td>0</td><td><span class=zero-hits>return NOOP</span></td></tr>
<tr><td>2369</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2370</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2371</td><td>0</td><td><span class=zero-hits>local entities = archetype.entities</span></td></tr>
<tr><td>2372</td><td>4</td><td><span class=low-hits>local row = #entities</span></td></tr>
<tr><td>2373</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2374</td><td>12</td><td><span class=low-hits>return function(): any</span></td></tr>
<tr><td>2375</td><td>11</td><td><span class=low-hits>local entity = entities[row]</span></td></tr>
<tr><td>2376</td><td>11</td><td><span class=low-hits>while not entity do</span></td></tr>
<tr><td>2377</td><td>4</td><td><span class=low-hits>archetype_id = next(idr_cache, archetype_id) :: number</span></td></tr>
<tr><td>2378</td><td>0</td><td><span class=zero-hits>if not archetype_id then</span></td></tr>
<tr><td>2379</td><td>7</td><td><span class=low-hits>return</span></td></tr>
<tr><td>2380</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2381</td><td>7</td><td><span class=low-hits>archetype = archetypes[archetype_id]</span></td></tr>
<tr><td>2382</td><td>7</td><td><span class=low-hits>entities = archetype.entities</span></td></tr>
<tr><td>2383</td><td>0</td><td><span class=zero-hits>row = #entities</span></td></tr>
<tr><td>2384</td><td>8</td><td><span class=low-hits>entity = entities[row]</span></td></tr>
<tr><td>2385</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2386</td><td>0</td><td><span class=zero-hits>row -= 1</span></td></tr>
<tr><td>2387</td><td>0</td><td><span class=zero-hits>return entity</span></td></tr>
<tr><td>2388</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2389</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2390</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2391</td><td>0</td><td><span class=zero-hits>local function world_children(world: ecs_world_t, parent: i53)</span></td></tr>
<tr><td>2392</td><td>0</td><td><span class=zero-hits>return world_each(world, ECS_PAIR(EcsChildOf, parent))</span></td></tr>
<tr><td>2393</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2394</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2395</td><td>0</td><td><span class=zero-hits>export type Record = {</span></td></tr>
<tr><td>2396</td><td>0</td><td><span class=zero-hits>archetype: Archetype,</span></td></tr>
<tr><td>2397</td><td>0</td><td><span class=zero-hits>row: number,</span></td></tr>
<tr><td>2398</td><td>0</td><td><span class=zero-hits>dense: i24,</span></td></tr>
<tr><td>2399</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>2400</td><td>0</td><td><span class=zero-hits>export type ComponentRecord = {</span></td></tr>
<tr><td>2401</td><td>0</td><td><span class=zero-hits>cache: { [Id]: number },</span></td></tr>
<tr><td>2402</td><td>0</td><td><span class=zero-hits>counts: { [Id]: number },</span></td></tr>
<tr><td>2403</td><td>0</td><td><span class=zero-hits>flags: number,</span></td></tr>
<tr><td>2404</td><td>0</td><td><span class=zero-hits>size: number,</span></td></tr>
<tr><td>2405</td><td>0</td><td><span class=zero-hits>hooks: {</span></td></tr>
<tr><td>2406</td><td>0</td><td><span class=zero-hits>on_add: ((entity: Entity) -> ())?,</span></td></tr>
<tr><td>2407</td><td>0</td><td><span class=zero-hits>on_set: ((entity: Entity, data: any) -> ())?,</span></td></tr>
<tr><td>2408</td><td>0</td><td><span class=zero-hits>on_remove: ((entity: Entity) -> ())?,</span></td></tr>
<tr><td>2409</td><td>0</td><td><span class=zero-hits>},</span></td></tr>
<tr><td>2410</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>2411</td><td>0</td><td><span class=zero-hits>export type ComponentIndex = Map<Id, ComponentRecord></span></td></tr>
<tr><td>2412</td><td>0</td><td><span class=zero-hits>export type Archetypes = { [Id]: Archetype }</span></td></tr>
<tr><td>2413</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2414</td><td>0</td><td><span class=zero-hits>export type EntityIndex = {</span></td></tr>
<tr><td>2415</td><td>0</td><td><span class=zero-hits>dense_array: Map<number, Entity>,</span></td></tr>
<tr><td>2416</td><td>0</td><td><span class=zero-hits>sparse_array: Map<i24, Record>,</span></td></tr>
<tr><td>2417</td><td>0</td><td><span class=zero-hits>alive_count: number,</span></td></tr>
<tr><td>2418</td><td>0</td><td><span class=zero-hits>max_id: number,</span></td></tr>
<tr><td>2419</td><td>1</td><td><span class=low-hits>}</span></td></tr>
<tr><td>2420</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2421</td><td>0</td><td><span class=zero-hits>local World = {}</span></td></tr>
<tr><td>2422</td><td>1</td><td><span class=low-hits>World.__index = World</span></td></tr>
<tr><td>2423</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2424</td><td>1</td><td><span class=low-hits>World.entity = world_entity</span></td></tr>
<tr><td>2425</td><td>1</td><td><span class=low-hits>World.query = world_query</span></td></tr>
<tr><td>2426</td><td>1</td><td><span class=low-hits>World.remove = world_remove</span></td></tr>
<tr><td>2427</td><td>1</td><td><span class=low-hits>World.clear = world_clear</span></td></tr>
<tr><td>2428</td><td>1</td><td><span class=low-hits>World.delete = world_delete</span></td></tr>
<tr><td>2429</td><td>1</td><td><span class=low-hits>World.component = world_component</span></td></tr>
<tr><td>2430</td><td>1</td><td><span class=low-hits>World.add = world_add</span></td></tr>
<tr><td>2431</td><td>1</td><td><span class=low-hits>World.set = world_set</span></td></tr>
<tr><td>2432</td><td>1</td><td><span class=low-hits>World.get = world_get</span></td></tr>
<tr><td>2433</td><td>1</td><td><span class=low-hits>World.has = world_has</span></td></tr>
<tr><td>2434</td><td>1</td><td><span class=low-hits>World.target = world_target</span></td></tr>
<tr><td>2435</td><td>1</td><td><span class=low-hits>World.parent = world_parent</span></td></tr>
<tr><td>2436</td><td>1</td><td><span class=low-hits>World.contains = world_contains</span></td></tr>
<tr><td>2437</td><td>1</td><td><span class=low-hits>World.cleanup = world_cleanup</span></td></tr>
<tr><td>2438</td><td>0</td><td><span class=zero-hits>World.each = world_each</span></td></tr>
<tr><td>2439</td><td>1</td><td><span class=low-hits>World.children = world_children</span></td></tr>
<tr><td>2440</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2441</td><td>73</td><td><span class=low-hits>local function world_new()</span></td></tr>
<tr><td>2442</td><td>73</td><td><span class=low-hits>local entity_index = {</span></td></tr>
<tr><td>2443</td><td>73</td><td><span class=low-hits>dense_array = {},</span></td></tr>
<tr><td>2444</td><td>73</td><td><span class=low-hits>sparse_array = {},</span></td></tr>
<tr><td>2445</td><td>0</td><td><span class=zero-hits>alive_count = 0,</span></td></tr>
<tr><td>2446</td><td>73</td><td><span class=low-hits>max_id = 0,</span></td></tr>
<tr><td>2447</td><td>73</td><td><span class=low-hits>} :: ecs_entity_index_t</span></td></tr>
<tr><td>2448</td><td>73</td><td><span class=low-hits>local self = setmetatable({</span></td></tr>
<tr><td>2449</td><td>73</td><td><span class=low-hits>archetype_index = {} :: { [string]: Archetype },</span></td></tr>
<tr><td>2450</td><td>73</td><td><span class=low-hits>archetypes = {} :: Archetypes,</span></td></tr>
<tr><td>2451</td><td>73</td><td><span class=low-hits>component_index = {} :: ComponentIndex,</span></td></tr>
<tr><td>2452</td><td>0</td><td><span class=zero-hits>entity_index = entity_index,</span></td></tr>
<tr><td>2453</td><td>73</td><td><span class=low-hits>ROOT_ARCHETYPE = (nil :: any) :: Archetype,</span></td></tr>
<tr><td>2454</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2455</td><td>0</td><td><span class=zero-hits>max_archetype_id = 0,</span></td></tr>
<tr><td>2456</td><td>73</td><td><span class=low-hits>max_component_id = 0,</span></td></tr>
<tr><td>2457</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2458</td><td>0</td><td><span class=zero-hits>observable = {} :: Observable,</span></td></tr>
<tr><td>2459</td><td>73</td><td><span class=low-hits>}, World) :: any</span></td></tr>
<tr><td>2460</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2461</td><td>73</td><td><span class=low-hits>self.ROOT_ARCHETYPE = archetype_create(self, {}, "")</span></td></tr>
<tr><td>2462</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2463</td><td>18688</td><td><span class=low-hits>for i = 1, HI_COMPONENT_ID do</span></td></tr>
<tr><td>2464</td><td>0</td><td><span class=zero-hits>local e = entity_index_new_id(entity_index)</span></td></tr>
<tr><td>2465</td><td>0</td><td><span class=zero-hits>world_add(self, e, EcsComponent)</span></td></tr>
<tr><td>2466</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2467</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2468</td><td>1022</td><td><span class=low-hits>for i = HI_COMPONENT_ID + 1, EcsRest do</span></td></tr>
<tr><td>2469</td><td><span class='text-muted'>N/A</span></td><td>-- Initialize built-in components</td>></tr>
<tr><td>2470</td><td>0</td><td><span class=zero-hits>entity_index_new_id(entity_index)</span></td></tr>
<tr><td>2471</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2472</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2473</td><td>73</td><td><span class=low-hits>world_add(self, EcsName, EcsComponent)</span></td></tr>
<tr><td>2474</td><td>73</td><td><span class=low-hits>world_add(self, EcsOnSet, EcsComponent)</span></td></tr>
<tr><td>2475</td><td>73</td><td><span class=low-hits>world_add(self, EcsOnAdd, EcsComponent)</span></td></tr>
<tr><td>2476</td><td>73</td><td><span class=low-hits>world_add(self, EcsOnRemove, EcsComponent)</span></td></tr>
<tr><td>2477</td><td>0</td><td><span class=zero-hits>world_add(self, EcsWildcard, EcsComponent)</span></td></tr>
<tr><td>2478</td><td>73</td><td><span class=low-hits>world_add(self, EcsRest, EcsComponent)</span></td></tr>
<tr><td>2479</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2480</td><td>73</td><td><span class=low-hits>world_set(self, EcsOnAdd, EcsName, "jecs.OnAdd")</span></td></tr>
<tr><td>2481</td><td>73</td><td><span class=low-hits>world_set(self, EcsOnRemove, EcsName, "jecs.OnRemove")</span></td></tr>
<tr><td>2482</td><td>73</td><td><span class=low-hits>world_set(self, EcsOnSet, EcsName, "jecs.OnSet")</span></td></tr>
<tr><td>2483</td><td>73</td><td><span class=low-hits>world_set(self, EcsWildcard, EcsName, "jecs.Wildcard")</span></td></tr>
<tr><td>2484</td><td>73</td><td><span class=low-hits>world_set(self, EcsChildOf, EcsName, "jecs.ChildOf")</span></td></tr>
<tr><td>2485</td><td>73</td><td><span class=low-hits>world_set(self, EcsComponent, EcsName, "jecs.Component")</span></td></tr>
<tr><td>2486</td><td>73</td><td><span class=low-hits>world_set(self, EcsOnDelete, EcsName, "jecs.OnDelete")</span></td></tr>
<tr><td>2487</td><td>73</td><td><span class=low-hits>world_set(self, EcsOnDeleteTarget, EcsName, "jecs.OnDeleteTarget")</span></td></tr>
<tr><td>2488</td><td>73</td><td><span class=low-hits>world_set(self, EcsDelete, EcsName, "jecs.Delete")</span></td></tr>
<tr><td>2489</td><td>73</td><td><span class=low-hits>world_set(self, EcsRemove, EcsName, "jecs.Remove")</span></td></tr>
<tr><td>2490</td><td>0</td><td><span class=zero-hits>world_set(self, EcsName, EcsName, "jecs.Name")</span></td></tr>
<tr><td>2491</td><td>73</td><td><span class=low-hits>world_set(self, EcsRest, EcsRest, "jecs.Rest")</span></td></tr>
<tr><td>2492</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2493</td><td>73</td><td><span class=low-hits>world_add(self, EcsChildOf, ECS_PAIR(EcsOnDeleteTarget, EcsDelete))</span></td></tr>
<tr><td>2494</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2495</td><td>0</td><td><span class=zero-hits>return self</span></td></tr>
<tr><td>2496</td><td><span class='text-muted'>N/A</span></td><td>end</td>></tr>
<tr><td>2497</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2498</td><td>0</td><td><span class=zero-hits>World.new = world_new</span></td></tr>
<tr><td>2499</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2500</td><td>0</td><td><span class=zero-hits>export type Entity<T = unknown> = { __T: T }</span></td></tr>
<tr><td>2501</td><td>0</td><td><span class=zero-hits>export type Id<T = unknown> = { __T: T }</span></td></tr>
<tr><td>2502</td><td>0</td><td><span class=zero-hits>export type Pair<P, O> = Id<P></span></td></tr>
<tr><td>2503</td><td>0</td><td><span class=zero-hits>type ecs_id_t<T=unknown> = Id<T> | Pair<T, "Tag"> | Pair<"Tag", T></span></td></tr>
<tr><td>2504</td><td>0</td><td><span class=zero-hits>export type Item<T...> = (self: Query<T...>) -> (Entity, T...)</span></td></tr>
<tr><td>2505</td><td>0</td><td><span class=zero-hits>export type Iter<T...> = (query: Query<T...>) -> () -> (Entity, T...)</span></td></tr>
<tr><td>2506</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2507</td><td>0</td><td><span class=zero-hits>export type Query<T...> = typeof(setmetatable({}, {</span></td></tr>
<tr><td>2508</td><td>0</td><td><span class=zero-hits>__iter = (nil :: any) :: Iter<T...>,</span></td></tr>
<tr><td>2509</td><td>0</td><td><span class=zero-hits>})) & {</span></td></tr>
<tr><td>2510</td><td>0</td><td><span class=zero-hits>iter: Iter<T...>,</span></td></tr>
<tr><td>2511</td><td>0</td><td><span class=zero-hits>with: (self: Query<T...>, ...Id) -> Query<T...>,</span></td></tr>
<tr><td>2512</td><td>0</td><td><span class=zero-hits>without: (self: Query<T...>, ...Id) -> Query<T...>,</span></td></tr>
<tr><td>2513</td><td>0</td><td><span class=zero-hits>archetypes: (self: Query<T...>) -> { Archetype },</span></td></tr>
<tr><td>2514</td><td>0</td><td><span class=zero-hits>cached: (self: Query<T...>) -> Query<T...>,</span></td></tr>
<tr><td>2515</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>2516</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2517</td><td>0</td><td><span class=zero-hits>export type Observer = {</span></td></tr>
<tr><td>2518</td><td>0</td><td><span class=zero-hits>callback: (archetype: Archetype) -> (),</span></td></tr>
<tr><td>2519</td><td>0</td><td><span class=zero-hits>query: QueryInner,</span></td></tr>
<tr><td>2520</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>2521</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2522</td><td>0</td><td><span class=zero-hits>export type Observable = {</span></td></tr>
<tr><td>2523</td><td>0</td><td><span class=zero-hits>[Id]: {</span></td></tr>
<tr><td>2524</td><td>0</td><td><span class=zero-hits>[Id]: {</span></td></tr>
<tr><td>2525</td><td>0</td><td><span class=zero-hits>{ Observer }</span></td></tr>
<tr><td>2526</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>2527</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>2528</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>2529</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2530</td><td>0</td><td><span class=zero-hits>export type World = {</span></td></tr>
<tr><td>2531</td><td>0</td><td><span class=zero-hits>archetype_index: { [string]: Archetype },</span></td></tr>
<tr><td>2532</td><td>0</td><td><span class=zero-hits>archetypes: Archetypes,</span></td></tr>
<tr><td>2533</td><td>0</td><td><span class=zero-hits>component_index: ComponentIndex,</span></td></tr>
<tr><td>2534</td><td>0</td><td><span class=zero-hits>entity_index: EntityIndex,</span></td></tr>
<tr><td>2535</td><td>0</td><td><span class=zero-hits>ROOT_ARCHETYPE: Archetype,</span></td></tr>
<tr><td>2536</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2537</td><td>0</td><td><span class=zero-hits>max_component_id: number,</span></td></tr>
<tr><td>2538</td><td>0</td><td><span class=zero-hits>max_archetype_id: number,</span></td></tr>
<tr><td>2539</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2540</td><td>0</td><td><span class=zero-hits>observable: any,</span></td></tr>
<tr><td>2541</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2542</td><td><span class='text-muted'>N/A</span></td><td>--- Creates a new entity</td>></tr>
<tr><td>2543</td><td>0</td><td><span class=zero-hits>entity: (self: World, id: Entity?) -> Entity,</span></td></tr>
<tr><td>2544</td><td><span class='text-muted'>N/A</span></td><td>--- Creates a new entity located in the first 256 ids.</td>></tr>
<tr><td>2545</td><td><span class='text-muted'>N/A</span></td><td>--- These should be used for static components for fast access.</td>></tr>
<tr><td>2546</td><td>0</td><td><span class=zero-hits>component: <T>(self: World) -> Entity<T>,</span></td></tr>
<tr><td>2547</td><td><span class='text-muted'>N/A</span></td><td>--- Gets the target of an relationship. For example, when a user calls</td>></tr>
<tr><td>2548</td><td><span class='text-muted'>N/A</span></td><td>--- `world:target(id, ChildOf(parent), 0)`, you will obtain the parent entity.</td>></tr>
<tr><td>2549</td><td>0</td><td><span class=zero-hits>target: (self: World, id: Entity, relation: Id, index: number?) -> Entity?,</span></td></tr>
<tr><td>2550</td><td><span class='text-muted'>N/A</span></td><td>--- Deletes an entity and all it's related components and relationships.</td>></tr>
<tr><td>2551</td><td>0</td><td><span class=zero-hits>delete: (self: World, id: Entity) -> (),</span></td></tr>
<tr><td>2552</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2553</td><td><span class='text-muted'>N/A</span></td><td>--- Adds a component to the entity with no value</td>></tr>
<tr><td>2554</td><td>0</td><td><span class=zero-hits>add: <T>(self: World, id: Entity, component: Id) -> (),</span></td></tr>
<tr><td>2555</td><td><span class='text-muted'>N/A</span></td><td>--- Assigns a value to a component on the given entity</td>></tr>
<tr><td>2556</td><td>0</td><td><span class=zero-hits>set: <T>(self: World, id: Entity, component: Id<T>, data: T) -> (),</span></td></tr>
<tr><td>2557</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2558</td><td>0</td><td><span class=zero-hits>cleanup: (self: World) -> (),</span></td></tr>
<tr><td>2559</td><td><span class='text-muted'>N/A</span></td><td>-- Clears an entity from the world</td>></tr>
<tr><td>2560</td><td>0</td><td><span class=zero-hits>clear: (self: World, id: Entity) -> (),</span></td></tr>
<tr><td>2561</td><td><span class='text-muted'>N/A</span></td><td>--- Removes a component from the given entity</td>></tr>
<tr><td>2562</td><td>0</td><td><span class=zero-hits>remove: (self: World, id: Entity, component: Id) -> (),</span></td></tr>
<tr><td>2563</td><td><span class='text-muted'>N/A</span></td><td>--- Retrieves the value of up to 4 components. These values may be nil.</td>></tr>
<tr><td>2564</td><td>0</td><td><span class=zero-hits>get: (<A>(self: World, id: Entity, Id<A>) -> A?)</span></td></tr>
<tr><td>2565</td><td>0</td><td><span class=zero-hits>& (<A, B>(self: World, id: Entity, Id<A>, Id<B>) -> (A?, B?))</span></td></tr>
<tr><td>2566</td><td>0</td><td><span class=zero-hits>& (<A, B, C>(self: World, id: Entity, Id<A>, Id<B>, Id<C>) -> (A?, B?, C?))</span></td></tr>
<tr><td>2567</td><td>0</td><td><span class=zero-hits>& <A, B, C, D>(self: World, id: Entity, Id<A>, Id<B>, Id<C>, Id<D>) -> (A?, B?, C?, D?),</span></td></tr>
<tr><td>2568</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2569</td><td><span class='text-muted'>N/A</span></td><td>--- Returns whether the entity has the ID.</td>></tr>
<tr><td>2570</td><td>0</td><td><span class=zero-hits>has: (self: World, entity: Entity, ...Id) -> boolean,</span></td></tr>
<tr><td>2571</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2572</td><td><span class='text-muted'>N/A</span></td><td>--- Get parent (target of ChildOf relationship) for entity. If there is no ChildOf relationship pair, it will return nil.</td>></tr>
<tr><td>2573</td><td>0</td><td><span class=zero-hits>parent:(self: World, entity: Entity) -> Entity,</span></td></tr>
<tr><td>2574</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2575</td><td><span class='text-muted'>N/A</span></td><td>--- Checks if the world contains the given entity</td>></tr>
<tr><td>2576</td><td>0</td><td><span class=zero-hits>contains:(self: World, entity: Entity) -> boolean,</span></td></tr>
<tr><td>2577</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2578</td><td>0</td><td><span class=zero-hits>each: (self: World, id: Id) -> () -> Entity,</span></td></tr>
<tr><td>2579</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2580</td><td>0</td><td><span class=zero-hits>children: (self: World, id: Id) -> () -> Entity,</span></td></tr>
<tr><td>2581</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2582</td><td><span class='text-muted'>N/A</span></td><td>--- Searches the world for entities that match a given query</td>></tr>
<tr><td>2583</td><td>0</td><td><span class=zero-hits>query: (<A>(World, Id<A>) -> Query<A>)</span></td></tr>
<tr><td>2584</td><td>0</td><td><span class=zero-hits>& (<A, B>(World, Id<A>, Id<B>) -> Query<A, B>)</span></td></tr>
<tr><td>2585</td><td>0</td><td><span class=zero-hits>& (<A, B, C>(World, Id<A>, Id<B>, Id<C>) -> Query<A, B, C>)</span></td></tr>
<tr><td>2586</td><td>0</td><td><span class=zero-hits>& (<A, B, C, D>(World, Id<A>, Id<B>, Id<C>, Id<D>) -> Query<A, B, C, D>)</span></td></tr>
<tr><td>2587</td><td>0</td><td><span class=zero-hits>& (<A, B, C, D, E>(World, Id<A>, Id<B>, Id<C>, Id<D>, Id<E>) -> Query<A, B, C, D, E>)</span></td></tr>
<tr><td>2588</td><td>0</td><td><span class=zero-hits>& (<A, B, C, D, E, F>(World, Id<A>, Id<B>, Id<C>, Id<D>, Id<E>, Id<F>) -> Query<A, B, C, D, E, F>)</span></td></tr>
<tr><td>2589</td><td>0</td><td><span class=zero-hits>& (<A, B, C, D, E, F, G>(World, Id<A>, Id<B>, Id<C>, Id<D>, Id<E>, Id<F>, Id<G>) -> Query<A, B, C, D, E, F, G>)</span></td></tr>
<tr><td>2590</td><td>0</td><td><span class=zero-hits>& (<A, B, C, D, E, F, G, H>(World, Id<A>, Id<B>, Id<C>, Id<D>, Id<E>, Id<F>, Id<G>, Id<H>, ...Id<any>) -> Query<A, B, C, D, E, F, G, H>)</span></td></tr>
<tr><td>2591</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
<tr><td>2592</td><td><span class='text-muted'>N/A</span></td><td>-- type function ecs_id_t(entity)</td>></tr>
<tr><td>2593</td><td><span class='text-muted'>N/A</span></td><td>-- local ty = entity:components()[2]</td>></tr>
<tr><td>2594</td><td><span class='text-muted'>N/A</span></td><td>-- local __T = ty:readproperty(types.singleton("__T"))</td>></tr>
<tr><td>2595</td><td><span class='text-muted'>N/A</span></td><td>-- if not __T then</td>></tr>
<tr><td>2596</td><td><span class='text-muted'>N/A</span></td><td>-- return ty:readproperty(types.singleton("__jecs_pair_value"))</td>></tr>
<tr><td>2597</td><td><span class='text-muted'>N/A</span></td><td>-- end</td>></tr>
<tr><td>2598</td><td><span class='text-muted'>N/A</span></td><td>-- return __T</td>></tr>
<tr><td>2599</td><td><span class='text-muted'>N/A</span></td><td>-- end</td>></tr>
<tr><td>2600</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2601</td><td><span class='text-muted'>N/A</span></td><td>-- type function ecs_pair_t(first, second)</td>></tr>
<tr><td>2602</td><td><span class='text-muted'>N/A</span></td><td>-- if ecs_id_t(first):is("nil") then</td>></tr>
<tr><td>2603</td><td><span class='text-muted'>N/A</span></td><td>-- return second</td>></tr>
<tr><td>2604</td><td><span class='text-muted'>N/A</span></td><td>-- else</td>></tr>
<tr><td>2605</td><td><span class='text-muted'>N/A</span></td><td>-- return first</td>></tr>
<tr><td>2606</td><td><span class='text-muted'>N/A</span></td><td>-- end</td>></tr>
<tr><td>2607</td><td><span class='text-muted'>N/A</span></td><td>-- end</td>></tr>
<tr><td>2608</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2609</td><td>1</td><td><span class=low-hits>return {</span></td></tr>
<tr><td>2610</td><td>0</td><td><span class=zero-hits>World = World :: { new: () -> World },</span></td></tr>
<tr><td>2611</td><td>1</td><td><span class=low-hits>world = World.new :: () -> World,</span></td></tr>
<tr><td>2612</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2613</td><td>1</td><td><span class=low-hits>OnAdd = EcsOnAdd :: Entity<(entity: Entity) -> ()>,</span></td></tr>
<tr><td>2614</td><td>1</td><td><span class=low-hits>OnRemove = EcsOnRemove :: Entity<(entity: Entity) -> ()>,</span></td></tr>
<tr><td>2615</td><td>1</td><td><span class=low-hits>OnSet = EcsOnSet :: Entity<(entity: Entity, data: any) -> ()>,</span></td></tr>
<tr><td>2616</td><td>1</td><td><span class=low-hits>ChildOf = EcsChildOf :: Entity,</span></td></tr>
<tr><td>2617</td><td>1</td><td><span class=low-hits>Component = EcsComponent :: Entity,</span></td></tr>
<tr><td>2618</td><td>1</td><td><span class=low-hits>Wildcard = EcsWildcard :: Entity,</span></td></tr>
<tr><td>2619</td><td>1</td><td><span class=low-hits>w = EcsWildcard :: Entity,</span></td></tr>
<tr><td>2620</td><td>1</td><td><span class=low-hits>OnDelete = EcsOnDelete :: Entity,</span></td></tr>
<tr><td>2621</td><td>1</td><td><span class=low-hits>OnDeleteTarget = EcsOnDeleteTarget :: Entity,</span></td></tr>
<tr><td>2622</td><td>1</td><td><span class=low-hits>Delete = EcsDelete :: Entity,</span></td></tr>
<tr><td>2623</td><td>1</td><td><span class=low-hits>Remove = EcsRemove :: Entity,</span></td></tr>
<tr><td>2624</td><td>0</td><td><span class=zero-hits>Name = EcsName :: Entity<string>,</span></td></tr>
<tr><td>2625</td><td>1</td><td><span class=low-hits>Rest = EcsRest :: Entity,</span></td></tr>
<tr><td>2626</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2627</td><td>0</td><td><span class=zero-hits>pair = (ECS_PAIR :: any) :: <P, O>(first: Id<P>, second: Id<O>) -> Pair<P, O>,</span></td></tr>
<tr><td>2628</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2629</td><td><span class='text-muted'>N/A</span></td><td>-- Inwards facing API for testing</td>></tr>
<tr><td>2630</td><td>1</td><td><span class=low-hits>ECS_ID = ECS_ENTITY_T_LO,</span></td></tr>
<tr><td>2631</td><td>1</td><td><span class=low-hits>ECS_GENERATION_INC = ECS_GENERATION_INC,</span></td></tr>
<tr><td>2632</td><td>0</td><td><span class=zero-hits>ECS_GENERATION = ECS_GENERATION,</span></td></tr>
<tr><td>2633</td><td>1</td><td><span class=low-hits>ECS_ID_IS_WILDCARD = ECS_ID_IS_WILDCARD,</span></td></tr>
<tr><td>2634</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2635</td><td>1</td><td><span class=low-hits>ECS_ID_DELETE = ECS_ID_DELETE,</span></td></tr>
<tr><td>2636</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2637</td><td>1</td><td><span class=low-hits>IS_PAIR = ECS_IS_PAIR,</span></td></tr>
<tr><td>2638</td><td>1</td><td><span class=low-hits>pair_first = ecs_pair_first,</span></td></tr>
<tr><td>2639</td><td>0</td><td><span class=zero-hits>pair_second = ecs_pair_second,</span></td></tr>
<tr><td>2640</td><td>1</td><td><span class=low-hits>entity_index_get_alive = entity_index_get_alive,</span></td></tr>
<tr><td>2641</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2642</td><td>1</td><td><span class=low-hits>archetype_append_to_records = archetype_append_to_records,</span></td></tr>
<tr><td>2643</td><td>1</td><td><span class=low-hits>id_record_ensure = id_record_ensure,</span></td></tr>
<tr><td>2644</td><td>1</td><td><span class=low-hits>archetype_create = archetype_create,</span></td></tr>
<tr><td>2645</td><td>1</td><td><span class=low-hits>archetype_ensure = archetype_ensure,</span></td></tr>
<tr><td>2646</td><td>1</td><td><span class=low-hits>find_insert = find_insert,</span></td></tr>
<tr><td>2647</td><td>1</td><td><span class=low-hits>find_archetype_with = find_archetype_with,</span></td></tr>
<tr><td>2648</td><td>1</td><td><span class=low-hits>find_archetype_without = find_archetype_without,</span></td></tr>
<tr><td>2649</td><td>1</td><td><span class=low-hits>archetype_init_edge = archetype_init_edge,</span></td></tr>
<tr><td>2650</td><td>1</td><td><span class=low-hits>archetype_ensure_edge = archetype_ensure_edge,</span></td></tr>
<tr><td>2651</td><td>1</td><td><span class=low-hits>init_edge_for_add = init_edge_for_add,</span></td></tr>
<tr><td>2652</td><td>1</td><td><span class=low-hits>init_edge_for_remove = init_edge_for_remove,</span></td></tr>
<tr><td>2653</td><td>1</td><td><span class=low-hits>create_edge_for_add = create_edge_for_add,</span></td></tr>
<tr><td>2654</td><td>1</td><td><span class=low-hits>create_edge_for_remove = create_edge_for_remove,</span></td></tr>
<tr><td>2655</td><td>0</td><td><span class=zero-hits>archetype_traverse_add = archetype_traverse_add,</span></td></tr>
<tr><td>2656</td><td>1</td><td><span class=low-hits>archetype_traverse_remove = archetype_traverse_remove,</span></td></tr>
<tr><td>2657</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2658</td><td>1</td><td><span class=low-hits>entity_move = entity_move,</span></td></tr>
<tr><td>2659</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2660</td><td>1</td><td><span class=low-hits>entity_index_try_get = entity_index_try_get,</span></td></tr>
<tr><td>2661</td><td>1</td><td><span class=low-hits>entity_index_try_get_any = entity_index_try_get_any,</span></td></tr>
<tr><td>2662</td><td>1</td><td><span class=low-hits>entity_index_try_get_fast = entity_index_try_get_fast,</span></td></tr>
<tr><td>2663</td><td>0</td><td><span class=zero-hits>entity_index_is_alive = entity_index_is_alive,</span></td></tr>
<tr><td>2664</td><td>1</td><td><span class=low-hits>entity_index_new_id = entity_index_new_id,</span></td></tr>
<tr><td>2665</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2666</td><td>1</td><td><span class=low-hits>query_iter = query_iter,</span></td></tr>
<tr><td>2667</td><td>1</td><td><span class=low-hits>query_iter_init = query_iter_init,</span></td></tr>
<tr><td>2668</td><td>1</td><td><span class=low-hits>query_with = query_with,</span></td></tr>
<tr><td>2669</td><td>1</td><td><span class=low-hits>query_without = query_without,</span></td></tr>
<tr><td>2670</td><td>0</td><td><span class=zero-hits>query_archetypes = query_archetypes,</span></td></tr>
<tr><td>2671</td><td>1</td><td><span class=low-hits>query_match = query_match,</span></td></tr>
<tr><td>2672</td><td><span class='text-muted'>N/A</span></td><td></td>></tr>
<tr><td>2673</td><td>0</td><td><span class=zero-hits>find_observers = find_observers,</span></td></tr>
<tr><td>2674</td><td>0</td><td><span class=zero-hits>}</span></td></tr>
</tbody></table></body></html>