@oasys/oecs 0.5.4 → 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1223 -266
- package/README.md +217 -112
- package/dist/core/ecs/access_check.d.cts +29 -29
- package/dist/core/ecs/access_check.d.ts +29 -29
- package/dist/core/ecs/access_check.d.ts.map +1 -1
- package/dist/core/ecs/archetype.d.cts +217 -209
- package/dist/core/ecs/archetype.d.ts +217 -209
- package/dist/core/ecs/archetype.d.ts.map +1 -1
- package/dist/core/ecs/archetype_closure.d.cts +23 -0
- package/dist/core/ecs/archetype_closure.d.ts +23 -0
- package/dist/core/ecs/archetype_closure.d.ts.map +1 -0
- package/dist/core/ecs/archetype_graph.d.cts +33 -33
- package/dist/core/ecs/archetype_graph.d.ts +33 -33
- package/dist/core/ecs/archetype_graph.d.ts.map +1 -1
- package/dist/core/ecs/archetype_types.d.cts +55 -0
- package/dist/core/ecs/archetype_types.d.ts +55 -0
- package/dist/core/ecs/archetype_types.d.ts.map +1 -0
- package/dist/core/ecs/change_feed.d.cts +53 -0
- package/dist/core/ecs/change_feed.d.ts +53 -0
- package/dist/core/ecs/change_feed.d.ts.map +1 -0
- package/dist/core/ecs/changed_query.d.cts +36 -0
- package/dist/core/ecs/changed_query.d.ts +36 -0
- package/dist/core/ecs/changed_query.d.ts.map +1 -0
- package/dist/core/ecs/chunk_columns.d.cts +49 -0
- package/dist/core/ecs/chunk_columns.d.ts +49 -0
- package/dist/core/ecs/chunk_columns.d.ts.map +1 -0
- package/dist/core/ecs/command_log.d.cts +26 -26
- package/dist/core/ecs/command_log.d.ts +26 -26
- package/dist/core/ecs/command_log.d.ts.map +1 -1
- package/dist/core/ecs/component.d.cts +43 -42
- package/dist/core/ecs/component.d.ts +43 -42
- package/dist/core/ecs/component.d.ts.map +1 -1
- package/dist/core/ecs/component_registry.d.cts +53 -0
- package/dist/core/ecs/component_registry.d.ts +53 -0
- package/dist/core/ecs/component_registry.d.ts.map +1 -0
- package/dist/core/ecs/compute_backend.d.cts +18 -7
- package/dist/core/ecs/compute_backend.d.ts +18 -7
- package/dist/core/ecs/compute_backend.d.ts.map +1 -1
- package/dist/core/ecs/deferred_commands.d.cts +15 -14
- package/dist/core/ecs/deferred_commands.d.ts +15 -14
- package/dist/core/ecs/deferred_commands.d.ts.map +1 -1
- package/dist/core/ecs/dispatch_trace.d.cts +32 -31
- package/dist/core/ecs/dispatch_trace.d.ts +32 -31
- package/dist/core/ecs/dispatch_trace.d.ts.map +1 -1
- package/dist/core/ecs/ecs.d.cts +289 -270
- package/dist/core/ecs/ecs.d.ts +289 -270
- package/dist/core/ecs/ecs.d.ts.map +1 -1
- package/dist/core/ecs/ecs_memory.d.cts +134 -136
- package/dist/core/ecs/ecs_memory.d.ts +134 -136
- package/dist/core/ecs/ecs_memory.d.ts.map +1 -1
- package/dist/core/ecs/ecs_options.d.cts +89 -0
- package/dist/core/ecs/ecs_options.d.ts +89 -0
- package/dist/core/ecs/ecs_options.d.ts.map +1 -0
- package/dist/core/ecs/entity.d.cts +4 -4
- package/dist/core/ecs/entity.d.ts +4 -4
- package/dist/core/ecs/entity_allocator.d.cts +20 -18
- package/dist/core/ecs/entity_allocator.d.ts +20 -18
- package/dist/core/ecs/entity_allocator.d.ts.map +1 -1
- package/dist/core/ecs/event.d.cts +36 -22
- package/dist/core/ecs/event.d.ts +36 -22
- package/dist/core/ecs/event.d.ts.map +1 -1
- package/dist/core/ecs/facades.d.cts +12 -126
- package/dist/core/ecs/facades.d.ts +12 -126
- package/dist/core/ecs/facades.d.ts.map +1 -1
- package/dist/core/ecs/frame_stepper.d.cts +12 -12
- package/dist/core/ecs/frame_stepper.d.ts +12 -12
- package/dist/core/ecs/frame_stepper.d.ts.map +1 -1
- package/dist/core/ecs/frame_trace.d.cts +32 -32
- package/dist/core/ecs/frame_trace.d.ts +32 -32
- package/dist/core/ecs/frame_trace.d.ts.map +1 -1
- package/dist/core/ecs/host_commands.d.cts +103 -85
- package/dist/core/ecs/host_commands.d.ts +103 -85
- package/dist/core/ecs/host_commands.d.ts.map +1 -1
- package/dist/core/ecs/index.d.cts +21 -11
- package/dist/core/ecs/index.d.ts +21 -11
- package/dist/core/ecs/index.d.ts.map +1 -1
- package/dist/core/ecs/observer.d.cts +39 -120
- package/dist/core/ecs/observer.d.ts +39 -120
- package/dist/core/ecs/observer.d.ts.map +1 -1
- package/dist/core/ecs/phase.d.cts +79 -0
- package/dist/core/ecs/phase.d.ts +79 -0
- package/dist/core/ecs/phase.d.ts.map +1 -0
- package/dist/core/ecs/plugin.d.cts +125 -0
- package/dist/core/ecs/plugin.d.ts +125 -0
- package/dist/core/ecs/plugin.d.ts.map +1 -0
- package/dist/core/ecs/plugin_slots.d.cts +26 -0
- package/dist/core/ecs/plugin_slots.d.ts +26 -0
- package/dist/core/ecs/plugin_slots.d.ts.map +1 -0
- package/dist/core/ecs/query.d.cts +208 -578
- package/dist/core/ecs/query.d.ts +208 -578
- package/dist/core/ecs/query.d.ts.map +1 -1
- package/dist/core/ecs/query_cache.d.cts +130 -0
- package/dist/core/ecs/query_cache.d.ts +130 -0
- package/dist/core/ecs/query_cache.d.ts.map +1 -0
- package/dist/core/ecs/query_registry.d.cts +47 -0
- package/dist/core/ecs/query_registry.d.ts +47 -0
- package/dist/core/ecs/query_registry.d.ts.map +1 -0
- package/dist/core/ecs/query_terms.d.cts +126 -0
- package/dist/core/ecs/query_terms.d.ts +126 -0
- package/dist/core/ecs/query_terms.d.ts.map +1 -0
- package/dist/core/ecs/ref.d.cts +100 -39
- package/dist/core/ecs/ref.d.ts +100 -39
- package/dist/core/ecs/ref.d.ts.map +1 -1
- package/dist/core/ecs/relation.d.cts +101 -182
- package/dist/core/ecs/relation.d.ts +101 -182
- package/dist/core/ecs/relation.d.ts.map +1 -1
- package/dist/core/ecs/resource.d.cts +13 -13
- package/dist/core/ecs/resource.d.ts +13 -13
- package/dist/core/ecs/resource_registry.d.cts +5 -5
- package/dist/core/ecs/resource_registry.d.ts +5 -5
- package/dist/core/ecs/resource_registry.d.ts.map +1 -1
- package/dist/core/ecs/row_kinds.d.cts +24 -0
- package/dist/core/ecs/row_kinds.d.ts +24 -0
- package/dist/core/ecs/row_kinds.d.ts.map +1 -0
- package/dist/core/ecs/run_condition.d.cts +23 -23
- package/dist/core/ecs/run_condition.d.ts +23 -23
- package/dist/core/ecs/run_condition.d.ts.map +1 -1
- package/dist/core/ecs/schedule.d.cts +91 -120
- package/dist/core/ecs/schedule.d.ts +91 -120
- package/dist/core/ecs/schedule.d.ts.map +1 -1
- package/dist/core/ecs/schedule_plan.d.cts +33 -0
- package/dist/core/ecs/schedule_plan.d.ts +33 -0
- package/dist/core/ecs/schedule_plan.d.ts.map +1 -0
- package/dist/core/ecs/snapshot.d.cts +77 -0
- package/dist/core/ecs/snapshot.d.ts +77 -0
- package/dist/core/ecs/snapshot.d.ts.map +1 -0
- package/dist/core/ecs/snapshot_mount.d.cts +42 -0
- package/dist/core/ecs/snapshot_mount.d.ts +42 -0
- package/dist/core/ecs/snapshot_mount.d.ts.map +1 -0
- package/dist/core/ecs/sparse_store.d.cts +108 -51
- package/dist/core/ecs/sparse_store.d.ts +108 -51
- package/dist/core/ecs/sparse_store.d.ts.map +1 -1
- package/dist/core/ecs/store.d.cts +527 -473
- package/dist/core/ecs/store.d.ts +527 -473
- package/dist/core/ecs/store.d.ts.map +1 -1
- package/dist/core/ecs/store_layout_listener.d.cts +6 -6
- package/dist/core/ecs/store_layout_listener.d.ts +6 -6
- package/dist/core/ecs/store_types.d.cts +122 -0
- package/dist/core/ecs/store_types.d.ts +122 -0
- package/dist/core/ecs/store_types.d.ts.map +1 -0
- package/dist/core/ecs/system.d.cts +146 -61
- package/dist/core/ecs/system.d.ts +146 -61
- package/dist/core/ecs/system.d.ts.map +1 -1
- package/dist/core/ecs/system_context.d.cts +296 -0
- package/dist/core/ecs/system_context.d.ts +296 -0
- package/dist/core/ecs/system_context.d.ts.map +1 -0
- package/dist/core/ecs/system_set.d.cts +48 -0
- package/dist/core/ecs/system_set.d.ts +48 -0
- package/dist/core/ecs/system_set.d.ts.map +1 -0
- package/dist/core/ecs/utils/arrays.d.cts +15 -1
- package/dist/core/ecs/utils/arrays.d.ts +15 -1
- package/dist/core/ecs/utils/arrays.d.ts.map +1 -1
- package/dist/core/ecs/utils/error.d.cts +82 -6
- package/dist/core/ecs/utils/error.d.ts +82 -6
- package/dist/core/ecs/utils/error.d.ts.map +1 -1
- package/dist/core/ecs/utils/plugin_error.d.cts +10 -0
- package/dist/core/ecs/utils/plugin_error.d.ts +10 -0
- package/dist/core/ecs/utils/plugin_error.d.ts.map +1 -0
- package/dist/core/restore_errors.d.cts +30 -0
- package/dist/core/restore_errors.d.ts +30 -0
- package/dist/core/restore_errors.d.ts.map +1 -0
- package/dist/core/store/action_ring.d.cts +44 -44
- package/dist/core/store/action_ring.d.ts +44 -44
- package/dist/core/store/action_ring.d.ts.map +1 -1
- package/dist/core/store/allocator.d.cts +149 -95
- package/dist/core/store/allocator.d.ts +149 -95
- package/dist/core/store/allocator.d.ts.map +1 -1
- package/dist/core/store/buffer_backed_column.d.cts +17 -17
- package/dist/core/store/buffer_backed_column.d.ts +17 -17
- package/dist/core/store/buffer_backed_column.d.ts.map +1 -1
- package/dist/core/store/column_store.d.cts +124 -86
- package/dist/core/store/column_store.d.ts +124 -86
- package/dist/core/store/column_store.d.ts.map +1 -1
- package/dist/core/store/command_dispatch.d.cts +14 -15
- package/dist/core/store/command_dispatch.d.ts +14 -15
- package/dist/core/store/command_dispatch.d.ts.map +1 -1
- package/dist/core/store/command_ring.d.cts +36 -39
- package/dist/core/store/command_ring.d.ts +36 -39
- package/dist/core/store/command_ring.d.ts.map +1 -1
- package/dist/core/store/descriptor.d.cts +34 -17
- package/dist/core/store/descriptor.d.ts +34 -17
- package/dist/core/store/descriptor.d.ts.map +1 -1
- package/dist/core/store/entity_index.d.cts +34 -35
- package/dist/core/store/entity_index.d.ts +34 -35
- package/dist/core/store/entity_index.d.ts.map +1 -1
- package/dist/core/store/event_ring.d.cts +36 -38
- package/dist/core/store/event_ring.d.ts +36 -38
- package/dist/core/store/event_ring.d.ts.map +1 -1
- package/dist/core/store/extend.d.cts +13 -7
- package/dist/core/store/extend.d.ts +13 -7
- package/dist/core/store/extend.d.ts.map +1 -1
- package/dist/core/store/grow.d.cts +2 -2
- package/dist/core/store/grow.d.ts +2 -2
- package/dist/core/store/grow.d.ts.map +1 -1
- package/dist/core/store/header.d.cts +31 -27
- package/dist/core/store/header.d.ts +31 -27
- package/dist/core/store/header.d.ts.map +1 -1
- package/dist/core/store/index.d.cts +10 -10
- package/dist/core/store/index.d.ts +10 -10
- package/dist/core/store/index.d.ts.map +1 -1
- package/dist/core/store/layout_ops.d.cts +71 -62
- package/dist/core/store/layout_ops.d.ts +71 -62
- package/dist/core/store/layout_ops.d.ts.map +1 -1
- package/dist/core/store/region_table.d.cts +28 -21
- package/dist/core/store/region_table.d.ts +28 -21
- package/dist/core/store/region_table.d.ts.map +1 -1
- package/dist/core/store/snapshot.d.cts +31 -16
- package/dist/core/store/snapshot.d.ts +31 -16
- package/dist/core/store/snapshot.d.ts.map +1 -1
- package/dist/core/store/state_hash.d.cts +12 -12
- package/dist/core/store/state_hash.d.ts +12 -12
- package/dist/core/store/state_hash.d.ts.map +1 -1
- package/dist/core/store/store_regions.d.cts +10 -10
- package/dist/core/store/store_regions.d.ts +10 -10
- package/dist/core/store/store_regions.d.ts.map +1 -1
- package/dist/core/store/vendored_abi/abi.d.cts +27 -2
- package/dist/core/store/vendored_abi/abi.d.ts +27 -2
- package/dist/core/store/vendored_abi/abi.d.ts.map +1 -1
- package/dist/host_commands-B2KMx8O2.cjs +1 -0
- package/dist/host_commands-ClVPvhSa.cjs +2 -0
- package/dist/host_commands-CwxVQS1z.js +1524 -0
- package/dist/host_commands-nJvTy88E.js +1667 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +15 -10
- package/dist/index.d.ts +15 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.development.cjs +1 -1
- package/dist/index.development.js +5804 -5203
- package/dist/index.js +5323 -4764
- package/dist/internal.cjs +2 -2
- package/dist/internal.d.cts +5 -2
- package/dist/internal.d.ts +5 -2
- package/dist/internal.d.ts.map +1 -1
- package/dist/internal.development.cjs +1 -1
- package/dist/internal.development.js +70 -20
- package/dist/internal.js +138 -83
- package/dist/plugins/abi-D3V-QUSf.cjs +1 -0
- package/dist/plugins/abi-NP8pNxpd.js +42 -0
- package/dist/plugins/arrays-Dr_1hCjL.js +28 -0
- package/dist/plugins/arrays-Dt-Joc4i.cjs +1 -0
- package/dist/plugins/assertions-gtDVfbnQ.js +6 -0
- package/dist/plugins/assertions-z5GQd_bB.cjs +1 -0
- package/dist/{extensions → plugins}/editor/editor.d.cts +54 -54
- package/dist/{extensions → plugins}/editor/editor.d.ts +54 -54
- package/dist/plugins/editor/editor.d.ts.map +1 -0
- package/dist/{extensions → plugins}/editor/field_handle.d.cts +12 -12
- package/dist/{extensions → plugins}/editor/field_handle.d.ts +12 -12
- package/dist/plugins/editor/field_handle.d.ts.map +1 -0
- package/dist/plugins/editor/index.d.cts +22 -0
- package/dist/plugins/editor/index.d.ts +22 -0
- package/dist/plugins/editor/index.d.ts.map +1 -0
- package/dist/plugins/editor.cjs +1 -0
- package/dist/plugins/editor.d.cts +1 -0
- package/dist/plugins/editor.d.ts +1 -0
- package/dist/plugins/editor.development.cjs +1 -0
- package/dist/{extensions/editor/index.development.js → plugins/editor.development.js} +81 -64
- package/dist/{extensions/editor/index.js → plugins/editor.js} +81 -64
- package/dist/plugins/events/event_channel.d.cts +13 -0
- package/dist/plugins/events/event_channel.d.ts +13 -0
- package/dist/plugins/events/event_channel.d.ts.map +1 -0
- package/dist/plugins/events/event_registry.d.cts +22 -0
- package/dist/plugins/events/event_registry.d.ts +22 -0
- package/dist/plugins/events/event_registry.d.ts.map +1 -0
- package/dist/plugins/events/facade.d.cts +26 -0
- package/dist/plugins/events/facade.d.ts +26 -0
- package/dist/plugins/events/facade.d.ts.map +1 -0
- package/dist/plugins/events/index.d.cts +10 -0
- package/dist/plugins/events/index.d.ts +10 -0
- package/dist/plugins/events/index.d.ts.map +1 -0
- package/dist/plugins/events.cjs +1 -0
- package/dist/plugins/events.d.cts +1 -0
- package/dist/plugins/events.d.ts +1 -0
- package/dist/plugins/events.development.cjs +1 -0
- package/dist/plugins/events.development.js +174 -0
- package/dist/plugins/events.js +159 -0
- package/dist/plugins/observers/index.d.cts +23 -0
- package/dist/plugins/observers/index.d.ts +23 -0
- package/dist/plugins/observers/index.d.ts.map +1 -0
- package/dist/plugins/observers/observer_registry.d.cts +101 -0
- package/dist/plugins/observers/observer_registry.d.ts +101 -0
- package/dist/plugins/observers/observer_registry.d.ts.map +1 -0
- package/dist/plugins/observers.cjs +1 -0
- package/dist/plugins/observers.d.cts +1 -0
- package/dist/plugins/observers.d.ts +1 -0
- package/dist/plugins/observers.development.cjs +1 -0
- package/dist/plugins/observers.development.js +431 -0
- package/dist/plugins/observers.js +403 -0
- package/dist/plugins/relation_store-BsoegrZh.js +313 -0
- package/dist/plugins/relation_store-DQKSnxsm.cjs +1 -0
- package/dist/plugins/relation_store-RBhpcE28.cjs +1 -0
- package/dist/plugins/relation_store-RqW5Snx6.js +328 -0
- package/dist/plugins/relations/builtin_relations.d.cts +48 -0
- package/dist/plugins/relations/builtin_relations.d.ts +48 -0
- package/dist/plugins/relations/builtin_relations.d.ts.map +1 -0
- package/dist/plugins/relations/facade.d.cts +73 -0
- package/dist/plugins/relations/facade.d.ts +73 -0
- package/dist/plugins/relations/facade.d.ts.map +1 -0
- package/dist/plugins/relations/index.d.cts +11 -0
- package/dist/plugins/relations/index.d.ts +11 -0
- package/dist/plugins/relations/index.d.ts.map +1 -0
- package/dist/{core/ecs → plugins/relations}/relation_service.d.cts +85 -97
- package/dist/{core/ecs → plugins/relations}/relation_service.d.ts +85 -97
- package/dist/plugins/relations/relation_service.d.ts.map +1 -0
- package/dist/plugins/relations/relation_store.d.cts +177 -0
- package/dist/plugins/relations/relation_store.d.ts +177 -0
- package/dist/plugins/relations/relation_store.d.ts.map +1 -0
- package/dist/plugins/relations.cjs +1 -0
- package/dist/plugins/relations.d.cts +1 -0
- package/dist/plugins/relations.d.ts +1 -0
- package/dist/plugins/relations.development.cjs +1 -0
- package/dist/plugins/relations.development.js +603 -0
- package/dist/plugins/relations.js +553 -0
- package/dist/plugins/snapshots/index.d.cts +33 -0
- package/dist/plugins/snapshots/index.d.ts +33 -0
- package/dist/plugins/snapshots/index.d.ts.map +1 -0
- package/dist/plugins/snapshots/resume.d.cts +57 -0
- package/dist/plugins/snapshots/resume.d.ts +57 -0
- package/dist/plugins/snapshots/resume.d.ts.map +1 -0
- package/dist/plugins/snapshots/snapshot_service.d.cts +59 -0
- package/dist/plugins/snapshots/snapshot_service.d.ts +59 -0
- package/dist/plugins/snapshots/snapshot_service.d.ts.map +1 -0
- package/dist/plugins/snapshots.cjs +1 -0
- package/dist/plugins/snapshots.d.cts +1 -0
- package/dist/plugins/snapshots.d.ts +1 -0
- package/dist/plugins/snapshots.development.cjs +1 -0
- package/dist/plugins/snapshots.development.js +737 -0
- package/dist/plugins/snapshots.js +737 -0
- package/dist/plugins/solid/index.d.cts +8 -0
- package/dist/plugins/solid/index.d.ts +8 -0
- package/dist/plugins/solid/index.d.ts.map +1 -0
- package/dist/plugins/solid/solid.d.cts +97 -0
- package/dist/plugins/solid/solid.d.ts +97 -0
- package/dist/plugins/solid/solid.d.ts.map +1 -0
- package/dist/plugins/solid.cjs +1 -0
- package/dist/plugins/solid.d.cts +1 -0
- package/dist/plugins/solid.d.ts +1 -0
- package/dist/plugins/solid.development.cjs +1 -0
- package/dist/plugins/solid.development.js +319 -0
- package/dist/plugins/solid.js +319 -0
- package/dist/plugins/workers/index.d.cts +75 -0
- package/dist/plugins/workers/index.d.ts +75 -0
- package/dist/plugins/workers/index.d.ts.map +1 -0
- package/dist/plugins/workers/node_threads.d.cts +25 -0
- package/dist/plugins/workers/node_threads.d.ts +25 -0
- package/dist/plugins/workers/node_threads.d.ts.map +1 -0
- package/dist/plugins/workers/plan.d.cts +61 -0
- package/dist/plugins/workers/plan.d.ts +61 -0
- package/dist/plugins/workers/plan.d.ts.map +1 -0
- package/dist/plugins/workers/pool.d.cts +144 -0
- package/dist/plugins/workers/pool.d.ts +144 -0
- package/dist/plugins/workers/pool.d.ts.map +1 -0
- package/dist/plugins/workers/protocol.d.cts +112 -0
- package/dist/plugins/workers/protocol.d.ts +112 -0
- package/dist/plugins/workers/protocol.d.ts.map +1 -0
- package/dist/plugins/workers/worker_bind.d.cts +64 -0
- package/dist/plugins/workers/worker_bind.d.ts +64 -0
- package/dist/plugins/workers/worker_bind.d.ts.map +1 -0
- package/dist/plugins/workers/worker_loop.d.cts +14 -0
- package/dist/plugins/workers/worker_loop.d.ts +14 -0
- package/dist/plugins/workers/worker_loop.d.ts.map +1 -0
- package/dist/plugins/workers.cjs +1 -0
- package/dist/plugins/workers.d.cts +1 -0
- package/dist/plugins/workers.d.ts +1 -0
- package/dist/plugins/workers.development.cjs +1 -0
- package/dist/plugins/workers.development.js +596 -0
- package/dist/plugins/workers.js +474 -0
- package/dist/primitives.cjs +1 -1
- package/dist/primitives.d.cts +4 -4
- package/dist/primitives.d.ts +4 -4
- package/dist/primitives.development.cjs +1 -1
- package/dist/primitives.development.js +66 -22
- package/dist/primitives.js +66 -22
- package/dist/shared-BKl12xF1.js +132 -0
- package/dist/shared-Dk-pACZT.cjs +1 -0
- package/dist/shared.cjs +1 -1
- package/dist/shared.d.cts +7 -7
- package/dist/shared.d.ts +7 -7
- package/dist/shared.d.ts.map +1 -1
- package/dist/shared.development.cjs +1 -1
- package/dist/shared.development.js +4 -3
- package/dist/shared.js +4 -3
- package/dist/topological_sort-Cc_yXqPT.js +346 -0
- package/dist/topological_sort-vp1imU6D.cjs +1 -0
- package/dist/type_primitives/assertions.d.cts +12 -16
- package/dist/type_primitives/assertions.d.ts +12 -16
- package/dist/type_primitives/assertions.d.ts.map +1 -1
- package/dist/type_primitives/binary_heap/binary_heap.d.cts +2 -6
- package/dist/type_primitives/binary_heap/binary_heap.d.ts +2 -6
- package/dist/type_primitives/binary_heap/binary_heap.d.ts.map +1 -1
- package/dist/type_primitives/bitset/bitset.d.cts +7 -11
- package/dist/type_primitives/bitset/bitset.d.ts +7 -11
- package/dist/type_primitives/bitset/bitset.d.ts.map +1 -1
- package/dist/type_primitives/brand.d.cts +2 -7
- package/dist/type_primitives/brand.d.ts +2 -7
- package/dist/type_primitives/brand.d.ts.map +1 -1
- package/dist/type_primitives/error.d.cts +1 -2
- package/dist/type_primitives/error.d.ts +1 -2
- package/dist/type_primitives/error.d.ts.map +1 -1
- package/dist/type_primitives/index.d.cts +1 -1
- package/dist/type_primitives/index.d.ts +1 -1
- package/dist/type_primitives/sparse_map/sparse_map.d.cts +3 -7
- package/dist/type_primitives/sparse_map/sparse_map.d.ts +3 -7
- package/dist/type_primitives/sparse_map/sparse_map.d.ts.map +1 -1
- package/dist/type_primitives/sparse_set/sparse_set.d.cts +2 -6
- package/dist/type_primitives/sparse_set/sparse_set.d.ts +2 -6
- package/dist/type_primitives/sparse_set/sparse_set.d.ts.map +1 -1
- package/dist/type_primitives/topological_sort/topological_sort.d.cts +1 -5
- package/dist/type_primitives/topological_sort/topological_sort.d.ts +1 -5
- package/dist/type_primitives/topological_sort/topological_sort.d.ts.map +1 -1
- package/dist/type_primitives/typed_arrays/typed_arrays.d.cts +16 -15
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts +16 -15
- package/dist/type_primitives/typed_arrays/typed_arrays.d.ts.map +1 -1
- package/dist/utils/error.d.ts.map +1 -1
- package/dist/version.d.cts +3 -3
- package/dist/version.d.ts +3 -3
- package/dist/worker.cjs +1 -0
- package/dist/worker.d.cts +17 -0
- package/dist/worker.d.ts +17 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.development.cjs +1 -0
- package/dist/worker.development.js +253 -0
- package/dist/worker.js +253 -0
- package/package.json +363 -191
- package/dist/core/ecs/builtin_relations.d.cts +0 -43
- package/dist/core/ecs/builtin_relations.d.ts +0 -43
- package/dist/core/ecs/builtin_relations.d.ts.map +0 -1
- package/dist/core/ecs/event_registry.d.cts +0 -22
- package/dist/core/ecs/event_registry.d.ts +0 -22
- package/dist/core/ecs/event_registry.d.ts.map +0 -1
- package/dist/core/ecs/relation_service.d.ts.map +0 -1
- package/dist/core/ecs/resume.d.cts +0 -85
- package/dist/core/ecs/resume.d.ts +0 -85
- package/dist/core/ecs/resume.d.ts.map +0 -1
- package/dist/core/ecs/snapshot_service.d.cts +0 -94
- package/dist/core/ecs/snapshot_service.d.ts +0 -94
- package/dist/core/ecs/snapshot_service.d.ts.map +0 -1
- package/dist/extensions/editor/editor.d.ts.map +0 -1
- package/dist/extensions/editor/field_handle.d.ts.map +0 -1
- package/dist/extensions/editor/index.cjs +0 -1
- package/dist/extensions/editor/index.d.cts +0 -21
- package/dist/extensions/editor/index.d.ts +0 -21
- package/dist/extensions/editor/index.d.ts.map +0 -1
- package/dist/extensions/editor/index.development.cjs +0 -1
- package/dist/extensions/reactive/ecs_sync.d.cts +0 -214
- package/dist/extensions/reactive/ecs_sync.d.ts +0 -214
- package/dist/extensions/reactive/ecs_sync.d.ts.map +0 -1
- package/dist/extensions/reactive/index.cjs +0 -1
- package/dist/extensions/reactive/index.d.cts +0 -23
- package/dist/extensions/reactive/index.d.ts +0 -23
- package/dist/extensions/reactive/index.d.ts.map +0 -1
- package/dist/extensions/reactive/index.development.cjs +0 -1
- package/dist/extensions/reactive/index.development.js +0 -215
- package/dist/extensions/reactive/index.js +0 -215
- package/dist/extensions/solid/index.cjs +0 -1
- package/dist/extensions/solid/index.d.cts +0 -6
- package/dist/extensions/solid/index.d.ts +0 -6
- package/dist/extensions/solid/index.d.ts.map +0 -1
- package/dist/extensions/solid/index.development.cjs +0 -1
- package/dist/extensions/solid/index.development.js +0 -40
- package/dist/extensions/solid/index.js +0 -36
- package/dist/extensions/solid/kernel_solid.d.cts +0 -45
- package/dist/extensions/solid/kernel_solid.d.ts +0 -45
- package/dist/extensions/solid/kernel_solid.d.ts.map +0 -1
- package/dist/host_commands-BlR3oZ3x.js +0 -2406
- package/dist/host_commands-C2cpU3yC.cjs +0 -1
- package/dist/internal-BoxWl4dG.js +0 -2565
- package/dist/internal-CGBEwfeB.cjs +0 -2
- package/dist/interop-CT-REx0W.cjs +0 -1
- package/dist/interop-CcY6ASQc.js +0 -18
- package/dist/interop-DqxleBo7.js +0 -18
- package/dist/interop-T1HZ-Dpa.cjs +0 -1
- package/dist/kernel-Cz2Kxlwl.js +0 -240
- package/dist/kernel-DgyrLFjW.js +0 -227
- package/dist/kernel-sw7ScKWu.cjs +0 -1
- package/dist/kernel-yWV3XnAb.cjs +0 -1
- package/dist/reactive/array.d.cts +0 -24
- package/dist/reactive/array.d.ts +0 -24
- package/dist/reactive/array.d.ts.map +0 -1
- package/dist/reactive/index.cjs +0 -1
- package/dist/reactive/index.d.cts +0 -11
- package/dist/reactive/index.d.ts +0 -11
- package/dist/reactive/index.d.ts.map +0 -1
- package/dist/reactive/index.development.cjs +0 -1
- package/dist/reactive/index.development.js +0 -18
- package/dist/reactive/index.js +0 -18
- package/dist/reactive/interop.d.cts +0 -19
- package/dist/reactive/interop.d.ts +0 -19
- package/dist/reactive/interop.d.ts.map +0 -1
- package/dist/reactive/kernel.d.cts +0 -73
- package/dist/reactive/kernel.d.ts +0 -73
- package/dist/reactive/kernel.d.ts.map +0 -1
- package/dist/reactive/map.d.cts +0 -16
- package/dist/reactive/map.d.ts +0 -16
- package/dist/reactive/map.d.ts.map +0 -1
- package/dist/reactive/shallow.d.cts +0 -11
- package/dist/reactive/shallow.d.ts +0 -11
- package/dist/reactive/shallow.d.ts.map +0 -1
- package/dist/reactive/struct.d.cts +0 -10
- package/dist/reactive/struct.d.ts +0 -10
- package/dist/reactive/struct.d.ts.map +0 -1
- package/dist/shallow-Bs39EPh1.js +0 -150
- package/dist/shallow-C5YmTbtb.cjs +0 -1
- package/dist/shallow-CiFC70Dz.js +0 -159
- package/dist/shallow-DQ8aG51_.cjs +0 -1
- package/dist/shared-B4v0L1cw.js +0 -109
- package/dist/shared-DU78k0pU.cjs +0 -1
- package/dist/topological_sort-BDvEyb9W.cjs +0 -1
- package/dist/topological_sort-DK6EjpWa.js +0 -135
- package/dist/typed_arrays-D3NmwtCG.cjs +0 -1
- package/dist/typed_arrays-DIVwVy5_.js +0 -258
|
@@ -1,61 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Command ring
|
|
2
|
+
* Command ring. A WASM-side producer and TS-side consumer SPSC ring buffer
|
|
3
3
|
* for structural-change intents emitted during `sim.tick()`.
|
|
4
4
|
*
|
|
5
5
|
* Layout:
|
|
6
6
|
*
|
|
7
|
-
* [ write_head: u32 ] slot 0..N-1, monotonic (
|
|
7
|
+
* [ write_head: u32 ] slot 0..N-1, monotonic (not slot-modulo)
|
|
8
8
|
* [ read_head: u32 ] slot 0..N-1, monotonic
|
|
9
9
|
* [ capacity: u32 ] slot count, power-of-two
|
|
10
|
-
* [ overflow: u32 ] 0 = OK
|
|
10
|
+
* [ overflow: u32 ] 0 = OK, 1 = WASM exhausted the ring this tick
|
|
11
11
|
* [ slot 0: 16 B ] opCode: u8, payload: [15]u8
|
|
12
12
|
* [ slot 1: 16 B ] ...
|
|
13
13
|
* ...
|
|
14
14
|
*
|
|
15
15
|
* SPSC contract (single host thread):
|
|
16
|
-
* - Producer: WASM
|
|
16
|
+
* - Producer: the WASM tick. It pushes 0..N commands during one tick and
|
|
17
17
|
* bumps `write_head` after each.
|
|
18
18
|
* - Consumer: TS host, immediately after `wasm.tick()` returns. Drains
|
|
19
|
-
* 0..N pending commands
|
|
19
|
+
* 0..N pending commands. Bumps `read_head` after each.
|
|
20
20
|
* - The two never run concurrently (one host thread orchestrates
|
|
21
21
|
* both). A later worker offload promotes the head
|
|
22
|
-
* bumps to `Atomics.store
|
|
22
|
+
* bumps to `Atomics.store`. That's an additive change without
|
|
23
23
|
* altering the layout.
|
|
24
24
|
*
|
|
25
25
|
* Overflow:
|
|
26
26
|
* - If WASM would write a slot when (`write_head - read_head == capacity`),
|
|
27
27
|
* it sets `overflow = 1` and drops the command. TS treats overflow as
|
|
28
|
-
* a hard error in dev builds
|
|
28
|
+
* a hard error in dev builds. Production logs and continues (a command
|
|
29
29
|
* might be lost rather than crash the host).
|
|
30
30
|
*
|
|
31
31
|
* Slot format:
|
|
32
32
|
* byte 0: opCode (u8). 0 is reserved as the empty-slot marker
|
|
33
|
-
* (`COMMAND_OP_EMPTY`)
|
|
34
|
-
* The engine never interprets a code
|
|
35
|
-
* `(opCode, payload)` and hands them to the attached
|
|
36
|
-
* consumer, which owns the opcode enum
|
|
37
|
-
* game's live in `@internal/sim`'s `command_payloads.ts`).
|
|
33
|
+
* (`COMMAND_OP_EMPTY`), and every other code is
|
|
34
|
+
* consumer-defined. The engine never interprets a code. It
|
|
35
|
+
* drains `(opCode, payload)` and hands them to the attached
|
|
36
|
+
* consumer, which owns the opcode enum and the payload codecs.
|
|
38
37
|
* bytes 1..15: payload, op-specific. Multi-byte fields may be
|
|
39
|
-
* unaligned within the payload
|
|
40
|
-
* oriented helpers
|
|
38
|
+
* unaligned within the payload. Readers must use byte-
|
|
39
|
+
* oriented helpers, such as a `DataView` in TS.
|
|
41
40
|
*
|
|
42
|
-
* The ring lives
|
|
43
|
-
* after the
|
|
44
|
-
* column-region growth. The host writes `header.command_ring_off` to
|
|
45
|
-
* point at it during `createColumnStore
|
|
41
|
+
* The ring lives before the layout-descriptor region in the SAB (right
|
|
42
|
+
* after the `STORE_HEADER_BYTES` header) so its offset is stable across
|
|
43
|
+
* descriptor growth and column-region growth. The host writes `header.command_ring_off` to
|
|
44
|
+
* point at it during `createColumnStore`. Absent ring is signalled by
|
|
46
45
|
* `command_ring_off === 0`.
|
|
47
46
|
*/
|
|
48
47
|
/** Total bytes for the ring header. */
|
|
49
48
|
export declare const COMMAND_RING_HEADER_BYTES = 16;
|
|
50
|
-
/** Fixed slot size
|
|
49
|
+
/** Fixed slot size, 1-byte opCode + 15-byte payload. */
|
|
51
50
|
export declare const COMMAND_RING_SLOT_BYTES = 16;
|
|
52
51
|
/** Default ring capacity in slots. 256 × 16 B = 4 KiB of ring data plus
|
|
53
|
-
* 16 B header. Sized for the worst-case burst
|
|
54
|
-
*
|
|
55
|
-
* in the bench harness. */
|
|
52
|
+
* 16 B header. Sized for the worst-case burst of spawn intents in one tick,
|
|
53
|
+
* with a small safety margin. Tune it up when a burst pushes past it. */
|
|
56
54
|
export declare const COMMAND_RING_DEFAULT_CAPACITY_SLOTS = 256;
|
|
57
|
-
/** Byte offsets within the ring header.
|
|
58
|
-
*
|
|
55
|
+
/** Byte offsets within the ring header. A reader on the module side mirrors
|
|
56
|
+
* these offsets, so a change here is an ABI change. */
|
|
59
57
|
export declare const COMMAND_RING_HEADER_OFFSETS: {
|
|
60
58
|
readonly write_head: 0;
|
|
61
59
|
readonly read_head: 4;
|
|
@@ -64,9 +62,8 @@ export declare const COMMAND_RING_HEADER_OFFSETS: {
|
|
|
64
62
|
};
|
|
65
63
|
/** Op-code `0` is reserved across the SAB layer as the empty-slot marker
|
|
66
64
|
* so a zero-initialised SAB doesn't appear to hold a valid command (mirror
|
|
67
|
-
* of `EVENT_OP_EMPTY`).
|
|
68
|
-
* the attached consumer owns the opcode enum
|
|
69
|
-
* `COMMAND_OP` + `SpawnUnitFields` live in `@internal/sim`). */
|
|
65
|
+
* of `EVENT_OP_EMPTY`). Every non-zero code is opaque to the engine, and
|
|
66
|
+
* the attached consumer owns the opcode enum and the payload codecs. */
|
|
70
67
|
export declare const COMMAND_OP_EMPTY = 0;
|
|
71
68
|
/** Total bytes the ring occupies for `capacity_slots` slots. */
|
|
72
69
|
export declare function commandRingBytes(capacitySlots: number): number;
|
|
@@ -74,26 +71,26 @@ export declare class CommandRingError extends Error {
|
|
|
74
71
|
constructor(message: string);
|
|
75
72
|
}
|
|
76
73
|
/** Initialise the ring header at `ringOff` in the SAB. Zeroes
|
|
77
|
-
* `write_head`, `read_head`, and `overflow_flag
|
|
74
|
+
* `write_head`, `read_head`, and `overflow_flag`. Sets `capacity_slots`.
|
|
78
75
|
* Slot bytes are left as-is (callers normally allocate the ring on a
|
|
79
76
|
* fresh, zero-initialised SAB). */
|
|
80
77
|
export declare function initCommandRing(view: DataView, ringOff: number, capacitySlots: number): void;
|
|
81
78
|
/** Read live ring-header field. */
|
|
82
|
-
export declare function
|
|
83
|
-
export declare function
|
|
84
|
-
export declare function
|
|
85
|
-
export declare function
|
|
79
|
+
export declare function commandRingWriteHead(view: DataView, ringOff: number): number;
|
|
80
|
+
export declare function commandRingReadHead(view: DataView, ringOff: number): number;
|
|
81
|
+
export declare function commandRingCapacitySlots(view: DataView, ringOff: number): number;
|
|
82
|
+
export declare function commandRingOverflow(view: DataView, ringOff: number): boolean;
|
|
86
83
|
/** Pending command count = `(write_head - read_head) mod 2^32`. The
|
|
87
|
-
* `>>> 0` keeps the result a u32 in the wrap-around case
|
|
88
|
-
* the host's lifetime
|
|
89
|
-
* arithmetic
|
|
84
|
+
* `>>> 0` keeps the result a u32 in the wrap-around case. A ring lives for
|
|
85
|
+
* the host's lifetime, so a long-lived host can reach the wrap, and the
|
|
86
|
+
* arithmetic has to stay correct there. */
|
|
90
87
|
export declare function pendingCommandCount(view: DataView, ringOff: number): number;
|
|
91
|
-
/** Push a command into the ring from the TS side.
|
|
92
|
-
* WASM
|
|
93
|
-
* symmetric tests across the two sides. Returns `false` on overflow and
|
|
88
|
+
/** Push a command into the ring from the TS side. The production producer is
|
|
89
|
+
* the WASM module, through its own ring writer. This is for host-side tests
|
|
90
|
+
* and for symmetric tests across the two sides. Returns `false` on overflow and
|
|
94
91
|
* sets the overflow flag. Payload must be exactly 15 bytes. */
|
|
95
92
|
export declare function pushCommand(view: DataView, ringOff: number, opCode: number, payload: Uint8Array): boolean;
|
|
96
|
-
/** Read one command from the ring. Returns opCode (0 = empty
|
|
93
|
+
/** Read one command from the ring. Returns opCode (0 = empty, no
|
|
97
94
|
* command) and fills `outPayload` (15 bytes) with the slot's payload.
|
|
98
95
|
* When 0 is returned, `outPayload` is untouched. */
|
|
99
96
|
export declare function popCommand(view: DataView, ringOff: number, outPayload: Uint8Array): number;
|
|
@@ -1,61 +1,59 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Command ring
|
|
2
|
+
* Command ring. A WASM-side producer and TS-side consumer SPSC ring buffer
|
|
3
3
|
* for structural-change intents emitted during `sim.tick()`.
|
|
4
4
|
*
|
|
5
5
|
* Layout:
|
|
6
6
|
*
|
|
7
|
-
* [ write_head: u32 ] slot 0..N-1, monotonic (
|
|
7
|
+
* [ write_head: u32 ] slot 0..N-1, monotonic (not slot-modulo)
|
|
8
8
|
* [ read_head: u32 ] slot 0..N-1, monotonic
|
|
9
9
|
* [ capacity: u32 ] slot count, power-of-two
|
|
10
|
-
* [ overflow: u32 ] 0 = OK
|
|
10
|
+
* [ overflow: u32 ] 0 = OK, 1 = WASM exhausted the ring this tick
|
|
11
11
|
* [ slot 0: 16 B ] opCode: u8, payload: [15]u8
|
|
12
12
|
* [ slot 1: 16 B ] ...
|
|
13
13
|
* ...
|
|
14
14
|
*
|
|
15
15
|
* SPSC contract (single host thread):
|
|
16
|
-
* - Producer: WASM
|
|
16
|
+
* - Producer: the WASM tick. It pushes 0..N commands during one tick and
|
|
17
17
|
* bumps `write_head` after each.
|
|
18
18
|
* - Consumer: TS host, immediately after `wasm.tick()` returns. Drains
|
|
19
|
-
* 0..N pending commands
|
|
19
|
+
* 0..N pending commands. Bumps `read_head` after each.
|
|
20
20
|
* - The two never run concurrently (one host thread orchestrates
|
|
21
21
|
* both). A later worker offload promotes the head
|
|
22
|
-
* bumps to `Atomics.store
|
|
22
|
+
* bumps to `Atomics.store`. That's an additive change without
|
|
23
23
|
* altering the layout.
|
|
24
24
|
*
|
|
25
25
|
* Overflow:
|
|
26
26
|
* - If WASM would write a slot when (`write_head - read_head == capacity`),
|
|
27
27
|
* it sets `overflow = 1` and drops the command. TS treats overflow as
|
|
28
|
-
* a hard error in dev builds
|
|
28
|
+
* a hard error in dev builds. Production logs and continues (a command
|
|
29
29
|
* might be lost rather than crash the host).
|
|
30
30
|
*
|
|
31
31
|
* Slot format:
|
|
32
32
|
* byte 0: opCode (u8). 0 is reserved as the empty-slot marker
|
|
33
|
-
* (`COMMAND_OP_EMPTY`)
|
|
34
|
-
* The engine never interprets a code
|
|
35
|
-
* `(opCode, payload)` and hands them to the attached
|
|
36
|
-
* consumer, which owns the opcode enum
|
|
37
|
-
* game's live in `@internal/sim`'s `command_payloads.ts`).
|
|
33
|
+
* (`COMMAND_OP_EMPTY`), and every other code is
|
|
34
|
+
* consumer-defined. The engine never interprets a code. It
|
|
35
|
+
* drains `(opCode, payload)` and hands them to the attached
|
|
36
|
+
* consumer, which owns the opcode enum and the payload codecs.
|
|
38
37
|
* bytes 1..15: payload, op-specific. Multi-byte fields may be
|
|
39
|
-
* unaligned within the payload
|
|
40
|
-
* oriented helpers
|
|
38
|
+
* unaligned within the payload. Readers must use byte-
|
|
39
|
+
* oriented helpers, such as a `DataView` in TS.
|
|
41
40
|
*
|
|
42
|
-
* The ring lives
|
|
43
|
-
* after the
|
|
44
|
-
* column-region growth. The host writes `header.command_ring_off` to
|
|
45
|
-
* point at it during `createColumnStore
|
|
41
|
+
* The ring lives before the layout-descriptor region in the SAB (right
|
|
42
|
+
* after the `STORE_HEADER_BYTES` header) so its offset is stable across
|
|
43
|
+
* descriptor growth and column-region growth. The host writes `header.command_ring_off` to
|
|
44
|
+
* point at it during `createColumnStore`. Absent ring is signalled by
|
|
46
45
|
* `command_ring_off === 0`.
|
|
47
46
|
*/
|
|
48
47
|
/** Total bytes for the ring header. */
|
|
49
48
|
export declare const COMMAND_RING_HEADER_BYTES = 16;
|
|
50
|
-
/** Fixed slot size
|
|
49
|
+
/** Fixed slot size, 1-byte opCode + 15-byte payload. */
|
|
51
50
|
export declare const COMMAND_RING_SLOT_BYTES = 16;
|
|
52
51
|
/** Default ring capacity in slots. 256 × 16 B = 4 KiB of ring data plus
|
|
53
|
-
* 16 B header. Sized for the worst-case burst
|
|
54
|
-
*
|
|
55
|
-
* in the bench harness. */
|
|
52
|
+
* 16 B header. Sized for the worst-case burst of spawn intents in one tick,
|
|
53
|
+
* with a small safety margin. Tune it up when a burst pushes past it. */
|
|
56
54
|
export declare const COMMAND_RING_DEFAULT_CAPACITY_SLOTS = 256;
|
|
57
|
-
/** Byte offsets within the ring header.
|
|
58
|
-
*
|
|
55
|
+
/** Byte offsets within the ring header. A reader on the module side mirrors
|
|
56
|
+
* these offsets, so a change here is an ABI change. */
|
|
59
57
|
export declare const COMMAND_RING_HEADER_OFFSETS: {
|
|
60
58
|
readonly write_head: 0;
|
|
61
59
|
readonly read_head: 4;
|
|
@@ -64,9 +62,8 @@ export declare const COMMAND_RING_HEADER_OFFSETS: {
|
|
|
64
62
|
};
|
|
65
63
|
/** Op-code `0` is reserved across the SAB layer as the empty-slot marker
|
|
66
64
|
* so a zero-initialised SAB doesn't appear to hold a valid command (mirror
|
|
67
|
-
* of `EVENT_OP_EMPTY`).
|
|
68
|
-
* the attached consumer owns the opcode enum
|
|
69
|
-
* `COMMAND_OP` + `SpawnUnitFields` live in `@internal/sim`). */
|
|
65
|
+
* of `EVENT_OP_EMPTY`). Every non-zero code is opaque to the engine, and
|
|
66
|
+
* the attached consumer owns the opcode enum and the payload codecs. */
|
|
70
67
|
export declare const COMMAND_OP_EMPTY = 0;
|
|
71
68
|
/** Total bytes the ring occupies for `capacity_slots` slots. */
|
|
72
69
|
export declare function commandRingBytes(capacitySlots: number): number;
|
|
@@ -74,26 +71,26 @@ export declare class CommandRingError extends Error {
|
|
|
74
71
|
constructor(message: string);
|
|
75
72
|
}
|
|
76
73
|
/** Initialise the ring header at `ringOff` in the SAB. Zeroes
|
|
77
|
-
* `write_head`, `read_head`, and `overflow_flag
|
|
74
|
+
* `write_head`, `read_head`, and `overflow_flag`. Sets `capacity_slots`.
|
|
78
75
|
* Slot bytes are left as-is (callers normally allocate the ring on a
|
|
79
76
|
* fresh, zero-initialised SAB). */
|
|
80
77
|
export declare function initCommandRing(view: DataView, ringOff: number, capacitySlots: number): void;
|
|
81
78
|
/** Read live ring-header field. */
|
|
82
|
-
export declare function
|
|
83
|
-
export declare function
|
|
84
|
-
export declare function
|
|
85
|
-
export declare function
|
|
79
|
+
export declare function commandRingWriteHead(view: DataView, ringOff: number): number;
|
|
80
|
+
export declare function commandRingReadHead(view: DataView, ringOff: number): number;
|
|
81
|
+
export declare function commandRingCapacitySlots(view: DataView, ringOff: number): number;
|
|
82
|
+
export declare function commandRingOverflow(view: DataView, ringOff: number): boolean;
|
|
86
83
|
/** Pending command count = `(write_head - read_head) mod 2^32`. The
|
|
87
|
-
* `>>> 0` keeps the result a u32 in the wrap-around case
|
|
88
|
-
* the host's lifetime
|
|
89
|
-
* arithmetic
|
|
84
|
+
* `>>> 0` keeps the result a u32 in the wrap-around case. A ring lives for
|
|
85
|
+
* the host's lifetime, so a long-lived host can reach the wrap, and the
|
|
86
|
+
* arithmetic has to stay correct there. */
|
|
90
87
|
export declare function pendingCommandCount(view: DataView, ringOff: number): number;
|
|
91
|
-
/** Push a command into the ring from the TS side.
|
|
92
|
-
* WASM
|
|
93
|
-
* symmetric tests across the two sides. Returns `false` on overflow and
|
|
88
|
+
/** Push a command into the ring from the TS side. The production producer is
|
|
89
|
+
* the WASM module, through its own ring writer. This is for host-side tests
|
|
90
|
+
* and for symmetric tests across the two sides. Returns `false` on overflow and
|
|
94
91
|
* sets the overflow flag. Payload must be exactly 15 bytes. */
|
|
95
92
|
export declare function pushCommand(view: DataView, ringOff: number, opCode: number, payload: Uint8Array): boolean;
|
|
96
|
-
/** Read one command from the ring. Returns opCode (0 = empty
|
|
93
|
+
/** Read one command from the ring. Returns opCode (0 = empty, no
|
|
97
94
|
* command) and fills `outPayload` (15 bytes) with the slot's payload.
|
|
98
95
|
* When 0 is returned, `outPayload` is untouched. */
|
|
99
96
|
export declare function popCommand(view: DataView, ringOff: number, outPayload: Uint8Array): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command_ring.d.ts","sourceRoot":"","sources":["../../../src/core/store/command_ring.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"command_ring.d.ts","sourceRoot":"","sources":["../../../src/core/store/command_ring.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AAEH,uCAAuC;AACvC,eAAO,MAAM,yBAAyB,KAAK,CAAC;AAE5C,wDAAwD;AACxD,eAAO,MAAM,uBAAuB,KAAK,CAAC;AAE1C;;yEAEyE;AACzE,eAAO,MAAM,mCAAmC,MAAM,CAAC;AAEvD;uDACuD;AACvD,eAAO,MAAM,2BAA2B;;;;;CAK9B,CAAC;AAEX;;;wEAGwE;AACxE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAElC,gEAAgE;AAChE,wBAAgB,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAE9D;AASD,qBAAa,gBAAiB,SAAQ,KAAK;gBAC9B,OAAO,EAAE,MAAM;CAI3B;AAED;;;mCAGmC;AACnC,wBAAgB,eAAe,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,GAAG,IAAI,CAU5F;AAED,mCAAmC;AACnC,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE5E;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AACD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAEhF;AACD,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAE5E;AAED;;;2CAG2C;AAC3C,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAE3E;AAED;;;+DAG+D;AAC/D,wBAAgB,WAAW,CAC1B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,GACjB,OAAO,CA2CT;AAED;;oDAEoD;AACpD,wBAAgB,UAAU,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAqB1F;AAED;;;;gEAIgE;AAChE,wBAAgB,gBAAgB,CAC/B,IAAI,EAAE,QAAQ,EACd,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,KAAK,IAAI,GACpD,MAAM,CAWR"}
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS } from './vendored_abi/abi.cjs';
|
|
2
|
-
export { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS };
|
|
1
|
+
import { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS } from './vendored_abi/abi.cjs';
|
|
2
|
+
export { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS };
|
|
3
3
|
/** type_tag values for `ColumnDescriptor.type_tag`. The order matches the
|
|
4
|
-
* TypedArrayTag union
|
|
5
|
-
* width is `TYPE_TAG_STRIDE[tag]`. */
|
|
4
|
+
* `TypedArrayTag` union, so a tag's element width is `TYPE_TAG_STRIDE[tag]`. */
|
|
6
5
|
export declare const TYPE_TAG: {
|
|
7
6
|
readonly u8: 0;
|
|
8
7
|
readonly i8: 1;
|
|
@@ -18,9 +17,9 @@ export type TypeTagValue = (typeof TYPE_TAG)[keyof typeof TYPE_TAG];
|
|
|
18
17
|
* `stride = TYPE_TAG_STRIDE[tag]` lookup is O(1) array access. */
|
|
19
18
|
export declare const TYPE_TAG_STRIDE: Readonly<Record<TypeTagValue, number>>;
|
|
20
19
|
/** String-tag → numeric-tag bridge. `TypedArrayTag` ("u8", "f32", …) is the
|
|
21
|
-
* vocabulary the TS-side component registry speaks
|
|
20
|
+
* vocabulary the TS-side component registry speaks. `TypeTagValue` is the
|
|
22
21
|
* numeric enum the SAB descriptors carry on the wire. Bridging happens at
|
|
23
|
-
* the ECS↔SAB seam
|
|
22
|
+
* the ECS↔SAB seam. Archetype layouts come in as strings, ColumnSpecs go
|
|
24
23
|
* out as integers. */
|
|
25
24
|
export declare const TYPED_ARRAY_TAG_TO_TYPE_TAG: {
|
|
26
25
|
readonly u8: 0;
|
|
@@ -36,18 +35,19 @@ export interface ColumnDescriptor {
|
|
|
36
35
|
readonly componentId: number;
|
|
37
36
|
readonly fieldId: number;
|
|
38
37
|
readonly typeTag: TypeTagValue;
|
|
39
|
-
/** Byte offset of the column's first row, measured from
|
|
38
|
+
/** Byte offset of the column's first row, measured from the store base.
|
|
39
|
+
* A reader adds the base it mounted the store at. */
|
|
40
40
|
readonly byteOff: number;
|
|
41
|
-
/** Element width in bytes
|
|
41
|
+
/** Element width in bytes. Should always equal `TYPE_TAG_STRIDE[type_tag]`. */
|
|
42
42
|
readonly stride: number;
|
|
43
43
|
}
|
|
44
44
|
export declare function writeColumnDescriptor(view: DataView, off: number, c: ColumnDescriptor): void;
|
|
45
45
|
export declare function readColumnDescriptor(view: DataView, off: number): ColumnDescriptor;
|
|
46
46
|
/** Number of distinct components the cross-language ECS supports:
|
|
47
47
|
* `COMPONENT_MASK_WORDS × 32` bits in the SAB archetype descriptor mask. The
|
|
48
|
-
*
|
|
48
|
+
* module side matches archetypes purely on this mask, so a component whose id is
|
|
49
49
|
* ≥ this limit would be invisible there while the heap-side `BitSet` stayed
|
|
50
|
-
* correct
|
|
50
|
+
* correct, silently conflating archetypes that differ only in such a
|
|
51
51
|
* component. `Store.registerComponent` enforces this as a hard registration
|
|
52
52
|
* ceiling so the overflow fails loudly instead. The mask is sized to
|
|
53
53
|
* the `BitSet`'s `INITIAL_WORD_COUNT`, so a registry within the limit never
|
|
@@ -60,20 +60,37 @@ export interface ArchetypeDescriptor {
|
|
|
60
60
|
readonly componentMask: readonly number[];
|
|
61
61
|
readonly rowCount: number;
|
|
62
62
|
readonly rowCapacity: number;
|
|
63
|
-
/** Enabled-row count `≤ row_count`.
|
|
64
|
-
*
|
|
65
|
-
* `[enabled_count, row_count)`) are not simulated
|
|
63
|
+
/** Enabled-row count `≤ row_count`. A compute backend's per-row entity-scan
|
|
64
|
+
* loops bound on this so disabled entities (swapped to the tail
|
|
65
|
+
* `[enabled_count, row_count)`) are not simulated. Row-indexed cross-entity
|
|
66
66
|
* reads still use `row_count`. */
|
|
67
67
|
readonly enabledCount: number;
|
|
68
68
|
readonly columns: readonly ColumnDescriptor[];
|
|
69
69
|
}
|
|
70
70
|
/** Total bytes a descriptor will occupy, given its column count. Useful for
|
|
71
|
-
* planning the layout descriptor region size up front.
|
|
72
|
-
|
|
71
|
+
* planning the layout descriptor region size up front.
|
|
72
|
+
*
|
|
73
|
+
* `headerBytes` selects the header width and defaults to the current one. Pass
|
|
74
|
+
* `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES` to measure a version 0 region.
|
|
75
|
+
* Never pass it when planning a region the store will write. */
|
|
76
|
+
export declare function archetypeDescriptorBytes(columnCount: number, headerBytes?: number): number;
|
|
73
77
|
export declare function writeArchetypeDescriptor(view: DataView, off: number, d: ArchetypeDescriptor): number;
|
|
74
|
-
|
|
78
|
+
/** Read one archetype descriptor at `off`.
|
|
79
|
+
*
|
|
80
|
+
* `headerBytes` says where this record's columns start and defaults to the
|
|
81
|
+
* current header width. A version 0 region needs
|
|
82
|
+
* `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES`, because it holds no
|
|
83
|
+
* `entity_ids_off`. Every other field sits at the same offset in both widths,
|
|
84
|
+
* so nothing else here branches on the version. */
|
|
85
|
+
export declare function readArchetypeDescriptor(view: DataView, off: number, headerBytes?: number): ArchetypeDescriptor;
|
|
75
86
|
export declare function writeLayoutDescriptorRegion(view: DataView, regionOff: number, descriptors: readonly ArchetypeDescriptor[]): number;
|
|
76
|
-
|
|
87
|
+
/** Walk `archetypeCount` descriptors from `regionOff`, in written order.
|
|
88
|
+
*
|
|
89
|
+
* `headerBytes` selects the archetype header width, and defaults to the current
|
|
90
|
+
* one. A caller that reads a version 0 store passes
|
|
91
|
+
* `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES`, because the record stride is the
|
|
92
|
+
* only thing the narrower header changes. */
|
|
93
|
+
export declare function readLayoutDescriptorRegion(view: DataView, regionOff: number, archetypeCount: number, headerBytes?: number): readonly ArchetypeDescriptor[];
|
|
77
94
|
/** Total bytes needed for a layout descriptor region holding these archetypes.
|
|
78
95
|
* Use to size the SAB region between header end and the first column. */
|
|
79
96
|
export declare function layoutDescriptorRegionBytes(descriptors: readonly ArchetypeDescriptor[]): number;
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS } from './vendored_abi/abi.js';
|
|
2
|
-
export { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS };
|
|
1
|
+
import { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS } from './vendored_abi/abi.js';
|
|
2
|
+
export { COLUMN_DESCRIPTOR_BYTES, COLUMN_DESCRIPTOR_OFFSETS, ARCHETYPE_DESCRIPTOR_HEADER_BYTES, LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES, ARCHETYPE_DESCRIPTOR_OFFSETS, COMPONENT_MASK_WORDS };
|
|
3
3
|
/** type_tag values for `ColumnDescriptor.type_tag`. The order matches the
|
|
4
|
-
* TypedArrayTag union
|
|
5
|
-
* width is `TYPE_TAG_STRIDE[tag]`. */
|
|
4
|
+
* `TypedArrayTag` union, so a tag's element width is `TYPE_TAG_STRIDE[tag]`. */
|
|
6
5
|
export declare const TYPE_TAG: {
|
|
7
6
|
readonly u8: 0;
|
|
8
7
|
readonly i8: 1;
|
|
@@ -18,9 +17,9 @@ export type TypeTagValue = (typeof TYPE_TAG)[keyof typeof TYPE_TAG];
|
|
|
18
17
|
* `stride = TYPE_TAG_STRIDE[tag]` lookup is O(1) array access. */
|
|
19
18
|
export declare const TYPE_TAG_STRIDE: Readonly<Record<TypeTagValue, number>>;
|
|
20
19
|
/** String-tag → numeric-tag bridge. `TypedArrayTag` ("u8", "f32", …) is the
|
|
21
|
-
* vocabulary the TS-side component registry speaks
|
|
20
|
+
* vocabulary the TS-side component registry speaks. `TypeTagValue` is the
|
|
22
21
|
* numeric enum the SAB descriptors carry on the wire. Bridging happens at
|
|
23
|
-
* the ECS↔SAB seam
|
|
22
|
+
* the ECS↔SAB seam. Archetype layouts come in as strings, ColumnSpecs go
|
|
24
23
|
* out as integers. */
|
|
25
24
|
export declare const TYPED_ARRAY_TAG_TO_TYPE_TAG: {
|
|
26
25
|
readonly u8: 0;
|
|
@@ -36,18 +35,19 @@ export interface ColumnDescriptor {
|
|
|
36
35
|
readonly componentId: number;
|
|
37
36
|
readonly fieldId: number;
|
|
38
37
|
readonly typeTag: TypeTagValue;
|
|
39
|
-
/** Byte offset of the column's first row, measured from
|
|
38
|
+
/** Byte offset of the column's first row, measured from the store base.
|
|
39
|
+
* A reader adds the base it mounted the store at. */
|
|
40
40
|
readonly byteOff: number;
|
|
41
|
-
/** Element width in bytes
|
|
41
|
+
/** Element width in bytes. Should always equal `TYPE_TAG_STRIDE[type_tag]`. */
|
|
42
42
|
readonly stride: number;
|
|
43
43
|
}
|
|
44
44
|
export declare function writeColumnDescriptor(view: DataView, off: number, c: ColumnDescriptor): void;
|
|
45
45
|
export declare function readColumnDescriptor(view: DataView, off: number): ColumnDescriptor;
|
|
46
46
|
/** Number of distinct components the cross-language ECS supports:
|
|
47
47
|
* `COMPONENT_MASK_WORDS × 32` bits in the SAB archetype descriptor mask. The
|
|
48
|
-
*
|
|
48
|
+
* module side matches archetypes purely on this mask, so a component whose id is
|
|
49
49
|
* ≥ this limit would be invisible there while the heap-side `BitSet` stayed
|
|
50
|
-
* correct
|
|
50
|
+
* correct, silently conflating archetypes that differ only in such a
|
|
51
51
|
* component. `Store.registerComponent` enforces this as a hard registration
|
|
52
52
|
* ceiling so the overflow fails loudly instead. The mask is sized to
|
|
53
53
|
* the `BitSet`'s `INITIAL_WORD_COUNT`, so a registry within the limit never
|
|
@@ -60,20 +60,37 @@ export interface ArchetypeDescriptor {
|
|
|
60
60
|
readonly componentMask: readonly number[];
|
|
61
61
|
readonly rowCount: number;
|
|
62
62
|
readonly rowCapacity: number;
|
|
63
|
-
/** Enabled-row count `≤ row_count`.
|
|
64
|
-
*
|
|
65
|
-
* `[enabled_count, row_count)`) are not simulated
|
|
63
|
+
/** Enabled-row count `≤ row_count`. A compute backend's per-row entity-scan
|
|
64
|
+
* loops bound on this so disabled entities (swapped to the tail
|
|
65
|
+
* `[enabled_count, row_count)`) are not simulated. Row-indexed cross-entity
|
|
66
66
|
* reads still use `row_count`. */
|
|
67
67
|
readonly enabledCount: number;
|
|
68
68
|
readonly columns: readonly ColumnDescriptor[];
|
|
69
69
|
}
|
|
70
70
|
/** Total bytes a descriptor will occupy, given its column count. Useful for
|
|
71
|
-
* planning the layout descriptor region size up front.
|
|
72
|
-
|
|
71
|
+
* planning the layout descriptor region size up front.
|
|
72
|
+
*
|
|
73
|
+
* `headerBytes` selects the header width and defaults to the current one. Pass
|
|
74
|
+
* `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES` to measure a version 0 region.
|
|
75
|
+
* Never pass it when planning a region the store will write. */
|
|
76
|
+
export declare function archetypeDescriptorBytes(columnCount: number, headerBytes?: number): number;
|
|
73
77
|
export declare function writeArchetypeDescriptor(view: DataView, off: number, d: ArchetypeDescriptor): number;
|
|
74
|
-
|
|
78
|
+
/** Read one archetype descriptor at `off`.
|
|
79
|
+
*
|
|
80
|
+
* `headerBytes` says where this record's columns start and defaults to the
|
|
81
|
+
* current header width. A version 0 region needs
|
|
82
|
+
* `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES`, because it holds no
|
|
83
|
+
* `entity_ids_off`. Every other field sits at the same offset in both widths,
|
|
84
|
+
* so nothing else here branches on the version. */
|
|
85
|
+
export declare function readArchetypeDescriptor(view: DataView, off: number, headerBytes?: number): ArchetypeDescriptor;
|
|
75
86
|
export declare function writeLayoutDescriptorRegion(view: DataView, regionOff: number, descriptors: readonly ArchetypeDescriptor[]): number;
|
|
76
|
-
|
|
87
|
+
/** Walk `archetypeCount` descriptors from `regionOff`, in written order.
|
|
88
|
+
*
|
|
89
|
+
* `headerBytes` selects the archetype header width, and defaults to the current
|
|
90
|
+
* one. A caller that reads a version 0 store passes
|
|
91
|
+
* `LEGACY_ARCHETYPE_DESCRIPTOR_HEADER_BYTES`, because the record stride is the
|
|
92
|
+
* only thing the narrower header changes. */
|
|
93
|
+
export declare function readLayoutDescriptorRegion(view: DataView, regionOff: number, archetypeCount: number, headerBytes?: number): readonly ArchetypeDescriptor[];
|
|
77
94
|
/** Total bytes needed for a layout descriptor region holding these archetypes.
|
|
78
95
|
* Use to size the SAB region between header end and the first column. */
|
|
79
96
|
export declare function layoutDescriptorRegionBytes(descriptors: readonly ArchetypeDescriptor[]): number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/core/store/descriptor.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../../src/core/store/descriptor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAYH,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,iCAAiC,EACjC,wCAAwC,EACxC,4BAA4B,EAC5B,oBAAoB,EACpB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EACN,uBAAuB,EACvB,yBAAyB,EACzB,iCAAiC,EACjC,wCAAwC,EACxC,4BAA4B,EAC5B,oBAAoB,EACpB,CAAC;AAEF;gFACgF;AAChF,eAAO,MAAM,QAAQ;;;;;;;;;CASX,CAAC;AAEX,MAAM,MAAM,YAAY,GAAG,CAAC,OAAO,QAAQ,CAAC,CAAC,MAAM,OAAO,QAAQ,CAAC,CAAC;AAEpE;kEACkE;AAClE,eAAO,MAAM,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,YAAY,EAAE,MAAM,CAAC,CASjE,CAAC;AAEH;;;;sBAIsB;AACtB,eAAO,MAAM,2BAA2B;;;;;;;;;CAS9B,CAAC;AAWX,MAAM,WAAW,gBAAgB;IAChC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B;yDACqD;IACrD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,+EAA+E;IAC/E,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACxB;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAS5F;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,gBAAgB,CAQlF;AAkBD;;;;;;;;oDAQoD;AACpD,eAAO,MAAM,gCAAgC,QAA4B,CAAC;AAE1E,MAAM,WAAW,mBAAmB;IACnC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;uDACmD;IACnD,QAAQ,CAAC,aAAa,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B;;;sCAGkC;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,SAAS,gBAAgB,EAAE,CAAC;CAC9C;AAED;;;;;gEAKgE;AAChE,wBAAgB,wBAAwB,CACvC,WAAW,EAAE,MAAM,EACnB,WAAW,GAAE,MAA0C,GACrD,MAAM,CAER;AAED,wBAAgB,wBAAwB,CACvC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,CAAC,EAAE,mBAAmB,GACpB,MAAM,CAyBR;AAED;;;;;;mDAMmD;AACnD,wBAAgB,uBAAuB,CACtC,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,WAAW,GAAE,MAA0C,GACrD,mBAAmB,CAuBrB;AAcD,wBAAgB,2BAA2B,CAC1C,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,SAAS,mBAAmB,EAAE,GACzC,MAAM,CAMR;AAED;;;;;6CAK6C;AAC7C,wBAAgB,0BAA0B,CACzC,IAAI,EAAE,QAAQ,EACd,SAAS,EAAE,MAAM,EACjB,cAAc,EAAE,MAAM,EACtB,WAAW,GAAE,MAA0C,GACrD,SAAS,mBAAmB,EAAE,CAShC;AAED;yEACyE;AACzE,wBAAgB,2BAA2B,CAAC,WAAW,EAAE,SAAS,mBAAmB,EAAE,GAAG,MAAM,CAM/F"}
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Entity-index SAB region
|
|
3
|
-
* lookup table shared with
|
|
2
|
+
* Entity-index SAB region, `EntityID` → `(archetype_id, row, generation)`
|
|
3
|
+
* lookup table shared with a compute backend.
|
|
4
4
|
*
|
|
5
|
-
* Every hot fixed-update system that
|
|
6
|
-
* held in a column (
|
|
7
|
-
* entity
|
|
8
|
-
* `entityId → archetype + row` translation. WASM-into-TS
|
|
9
|
-
* during
|
|
5
|
+
* Every hot fixed-update system that resolves an `EntityID`
|
|
6
|
+
* held in a column (a component field that points at another
|
|
7
|
+
* entity, and through it at that entity's columns) has to do
|
|
8
|
+
* `entityId → archetype + row` translation. A WASM-into-TS callback
|
|
9
|
+
* during a tick is forbidden, so the lookup
|
|
10
10
|
* tables must live in shared memory.
|
|
11
11
|
*
|
|
12
12
|
* Layout:
|
|
13
13
|
*
|
|
14
14
|
* [ length: u32 ] high-water index (count of slots ever issued)
|
|
15
|
-
* [ capacity: u32 ] backing-array length (slots × 1
|
|
15
|
+
* [ capacity: u32 ] backing-array length (slots × 1, not bytes)
|
|
16
16
|
* [ _pad0: u32 ] alignment pad to 16 bytes
|
|
17
17
|
* [ _pad1: u32 ] ───
|
|
18
18
|
* [ generations[capacity]: i32 ]
|
|
@@ -21,26 +21,26 @@
|
|
|
21
21
|
*
|
|
22
22
|
* Sentinels:
|
|
23
23
|
* - `generations[i] = 0` (INITIAL_GENERATION) for never-used slots.
|
|
24
|
-
* Generation grows by 1 on every destroy
|
|
24
|
+
* Generation grows by 1 on every destroy. An `EntityID`'s generation
|
|
25
25
|
* field matches `generations[index]` iff it's still alive.
|
|
26
26
|
* - `archetypes[i] = -1` (UNASSIGNED) when the slot hasn't been placed
|
|
27
|
-
* into an archetype,
|
|
28
|
-
* - `rows[i] = -1` (UNASSIGNED) on destroy
|
|
27
|
+
* into an archetype, or when the entity is destroyed.
|
|
28
|
+
* - `rows[i] = -1` (`UNASSIGNED`) on a destroy, or when not placed.
|
|
29
29
|
*
|
|
30
30
|
* Field width: i32 (signed) on the TS side so `-1` round-trips through
|
|
31
|
-
* `Int32Array` without unsigned coercion.
|
|
32
|
-
* pattern is identical to u32 `0xFFFFFFFF` for the UNASSIGNED case, and
|
|
33
|
-
* for valid
|
|
34
|
-
* is never set, so signed
|
|
31
|
+
* `Int32Array` without unsigned coercion. A module reads i32 too. The bit
|
|
32
|
+
* pattern is identical to u32 `0xFFFFFFFF` for the `UNASSIGNED` case, and
|
|
33
|
+
* for a valid archetype id (bounded by `MAX_INDEX`) the sign bit
|
|
34
|
+
* is never set, so signed and unsigned interpretation agree.
|
|
35
35
|
*
|
|
36
36
|
* Region placement: between command ring and descriptor region so the
|
|
37
|
-
* offset is stable across descriptor
|
|
37
|
+
* offset is stable across descriptor growth and column-region growth (same
|
|
38
38
|
* property the command ring gets). Grow path (when entityHighWater
|
|
39
|
-
* exceeds `capacity`) uses `growColumnStore
|
|
39
|
+
* exceeds `capacity`) uses `growColumnStore`, slow path, same as
|
|
40
40
|
* descriptor-region overflow.
|
|
41
41
|
*
|
|
42
|
-
*
|
|
43
|
-
*
|
|
42
|
+
* A module reads the region with the symmetric reader: the header first,
|
|
43
|
+
* then the two i32 arrays it names.
|
|
44
44
|
*/
|
|
45
45
|
/** Fixed bytes of the region header (length, capacity, two pad u32s for
|
|
46
46
|
* 16-byte alignment of the i32 arrays that follow). */
|
|
@@ -48,24 +48,23 @@ export declare const ENTITY_INDEX_HEADER_BYTES = 16;
|
|
|
48
48
|
/** Bytes per slot: three i32 columns. */
|
|
49
49
|
export declare const ENTITY_INDEX_BYTES_PER_SLOT = 12;
|
|
50
50
|
/** Byte offsets within the region header. Locked by the
|
|
51
|
-
* `entity_index.test.ts` golden bytes
|
|
51
|
+
* `entity_index.test.ts` golden bytes. Any change here is a
|
|
52
52
|
* `SIM_ABI_VERSION` bump. */
|
|
53
53
|
export declare const ENTITY_INDEX_HEADER_OFFSETS: {
|
|
54
54
|
readonly length: 0;
|
|
55
55
|
readonly capacity: 4;
|
|
56
56
|
};
|
|
57
|
-
/** Default initial slot count when the engine creates a Store.
|
|
58
|
-
* `MAX_INDEX
|
|
59
|
-
*
|
|
60
|
-
*
|
|
61
|
-
*
|
|
62
|
-
*
|
|
63
|
-
* the
|
|
64
|
-
* virtual reservation is 12 MiB.
|
|
57
|
+
/** Default initial slot count when the engine creates a Store. It is
|
|
58
|
+
* `MAX_INDEX + 1`, the whole `EntityID` 20-bit index range (see `entity.ts`),
|
|
59
|
+
* so the region pre-sizes to the entire addressable entity space and
|
|
60
|
+
* `createEntity` can never run out under the default. That reservation is
|
|
61
|
+
* virtual memory only. Physical pages allocate lazily, through an OS page
|
|
62
|
+
* fault on first touch, so a small workload keeps a small resident footprint
|
|
63
|
+
* whatever the reservation is.
|
|
65
64
|
*
|
|
66
|
-
*
|
|
67
|
-
*
|
|
68
|
-
*
|
|
65
|
+
* A caller can pass a smaller `CreateColumnStoreOptions.entityIndexCapacity`
|
|
66
|
+
* for a tighter reservation. On-demand growth through `growColumnStore` would
|
|
67
|
+
* let the default drop. */
|
|
69
68
|
export declare const ENTITY_INDEX_DEFAULT_CAPACITY: number;
|
|
70
69
|
/** Total region bytes for `capacity` slots: header + 3 i32 columns. */
|
|
71
70
|
export declare function entityIndexRegionBytes(capacity: number): number;
|
|
@@ -81,7 +80,7 @@ export declare class EntityIndexError extends Error {
|
|
|
81
80
|
/** Initialise the region header at `regionOff`. Sets `length=0` and
|
|
82
81
|
* `capacity=<arg>`. The i32 arrays past the header are left untouched
|
|
83
82
|
* (callers normally allocate the region on a fresh, zero-initialised
|
|
84
|
-
* SAB
|
|
83
|
+
* SAB. Generation 0 is the INITIAL_GENERATION sentinel, archetype and row
|
|
85
84
|
* sentinels of 0 are caught by `length=0` so no read reaches them). */
|
|
86
85
|
export declare function initEntityIndexRegion(view: DataView, regionOff: number, capacity: number): void;
|
|
87
86
|
/** Read the region's current length (high-water index, ≤ capacity). */
|
|
@@ -94,13 +93,13 @@ export declare function entityIndexCapacity(view: DataView, regionOff: number):
|
|
|
94
93
|
export declare function setEntityIndexLength(view: DataView, regionOff: number, length: number): void;
|
|
95
94
|
/** Materialise the three Int32Array views over the region's column data
|
|
96
95
|
* for use by the engine's Store. The views live as long as the
|
|
97
|
-
* SharedArrayBuffer hasn't been reallocated
|
|
96
|
+
* SharedArrayBuffer hasn't been reallocated, refresh on `view_stamp`
|
|
98
97
|
* bump (the engine's `_onBufferResized` callback).
|
|
99
98
|
*
|
|
100
99
|
* Three separate views (not a single struct-of-arrays object) because
|
|
101
100
|
* the engine's hot paths benefit from each being a direct typed-array
|
|
102
|
-
* read
|
|
103
|
-
export declare function
|
|
101
|
+
* read. V8 specialises `arr[i] = v` aggressively for typed arrays. */
|
|
102
|
+
export declare function createEntityIndexViews(buffer: ArrayBufferLike, regionOff: number, capacity: number): {
|
|
104
103
|
readonly generations: Int32Array;
|
|
105
104
|
readonly archetypes: Int32Array;
|
|
106
105
|
readonly rows: Int32Array;
|