@adobe/data 0.9.75 → 0.9.77
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/dist/ecs/database/create-plugin.type-test.js +5 -5
- package/dist/ecs/database/create-plugin.type-test.js.map +1 -1
- package/dist/ecs/database/database.reset.test.js +2 -2
- package/dist/ecs/database/database.reset.test.js.map +1 -1
- package/dist/ecs/database/observed/create-observed-database.js +1 -1
- package/dist/ecs/database/observed/create-observed-database.js.map +1 -1
- package/dist/ecs/database/transactional-store/apply-operations.d.ts +8 -0
- package/dist/ecs/database/transactional-store/apply-operations.js +23 -3
- package/dist/ecs/database/transactional-store/apply-operations.js.map +1 -1
- package/dist/ecs/database/transactional-store/create-transactional-store.js +12 -29
- package/dist/ecs/database/transactional-store/create-transactional-store.js.map +1 -1
- package/dist/ecs/database/transactional-store/create-transactional-store.test.js +65 -0
- package/dist/ecs/database/transactional-store/create-transactional-store.test.js.map +1 -1
- package/dist/ecs/entity/is-non-persistent.d.ts +3 -0
- package/dist/ecs/entity/is-non-persistent.js +3 -0
- package/dist/ecs/entity/is-non-persistent.js.map +1 -0
- package/dist/ecs/entity/is-non-persistent.test.d.ts +1 -0
- package/dist/ecs/entity/is-non-persistent.test.js +26 -0
- package/dist/ecs/entity/is-non-persistent.test.js.map +1 -0
- package/dist/ecs/entity/public.d.ts +1 -1
- package/dist/ecs/entity/public.js +1 -1
- package/dist/ecs/entity/public.js.map +1 -1
- package/dist/ecs/entity-location-table/create-entity-location-table.d.ts +1 -1
- package/dist/ecs/entity-location-table/create-entity-location-table.js +2 -2
- package/dist/ecs/entity-location-table/create-entity-location-table.js.map +1 -1
- package/dist/ecs/entity-location-table/create-entity-location-table.test.js +1 -1
- package/dist/ecs/entity-location-table/create-entity-location-table.test.js.map +1 -1
- package/dist/ecs/optional-components.d.ts +0 -2
- package/dist/ecs/store/core/create-core.d.ts +11 -0
- package/dist/ecs/store/core/create-core.js +35 -10
- package/dist/ecs/store/core/create-core.js.map +1 -1
- package/dist/ecs/store/core/create-core.test.js +21 -21
- package/dist/ecs/store/core/create-core.test.js.map +1 -1
- package/dist/ecs/store/index.d.ts +1 -0
- package/dist/ecs/store/index.js +1 -0
- package/dist/ecs/store/index.js.map +1 -1
- package/dist/ecs/store/public/create-store.js +1 -1
- package/dist/ecs/store/public/create-store.js.map +1 -1
- package/dist/ecs/store/public/create-store.test.js +107 -1
- package/dist/ecs/store/public/create-store.test.js.map +1 -1
- package/dist/ecs/undo-redo-service/create-undo-redo-service.test.js +21 -0
- package/dist/ecs/undo-redo-service/create-undo-redo-service.test.js.map +1 -1
- package/dist/functions/serialization/codec.js +4 -0
- package/dist/functions/serialization/codec.js.map +1 -1
- package/dist/functions/serialization/serialization.test.js +16 -6
- package/dist/functions/serialization/serialization.test.js.map +1 -1
- package/dist/math/i32/public.d.ts +2 -1
- package/dist/math/i32/public.js +2 -1
- package/dist/math/i32/public.js.map +1 -1
- package/dist/math/i32/shift-right.d.ts +2 -0
- package/dist/math/i32/shift-right.js +3 -0
- package/dist/math/i32/shift-right.js.map +1 -0
- package/dist/math/u32/count-leading-zeros.d.ts +2 -0
- package/dist/math/u32/count-leading-zeros.js +3 -0
- package/dist/math/u32/count-leading-zeros.js.map +1 -0
- package/dist/math/u32/count-one-bits.d.ts +2 -0
- package/dist/math/u32/count-one-bits.js +11 -0
- package/dist/math/u32/count-one-bits.js.map +1 -0
- package/dist/math/u32/count-trailing-zeros.d.ts +2 -0
- package/dist/math/u32/count-trailing-zeros.js +14 -0
- package/dist/math/u32/count-trailing-zeros.js.map +1 -0
- package/dist/math/u32/public.d.ts +6 -1
- package/dist/math/u32/public.js +6 -1
- package/dist/math/u32/public.js.map +1 -1
- package/dist/math/u32/reverse-bits.d.ts +2 -0
- package/dist/math/u32/reverse-bits.js +11 -0
- package/dist/math/u32/reverse-bits.js.map +1 -0
- package/dist/math/u32/shift-right.d.ts +2 -0
- package/dist/math/u32/shift-right.js +3 -0
- package/dist/math/u32/shift-right.js.map +1 -0
- package/dist/math/vec2/f32/f32.d.ts +4 -0
- package/dist/math/vec2/f32/f32.js +3 -0
- package/dist/math/vec2/f32/f32.js.map +1 -0
- package/dist/math/vec2/f32/functions.d.ts +50 -0
- package/dist/math/vec2/f32/functions.js +87 -0
- package/dist/math/vec2/f32/functions.js.map +1 -0
- package/dist/math/vec2/f32/layout.d.ts +1 -0
- package/dist/math/vec2/f32/layout.js +5 -0
- package/dist/math/vec2/f32/layout.js.map +1 -0
- package/dist/math/vec2/f32/public.d.ts +3 -0
- package/dist/math/vec2/f32/public.js +5 -0
- package/dist/math/vec2/f32/public.js.map +1 -0
- package/dist/math/vec2/f32/schema.d.ts +11 -0
- package/dist/math/vec2/f32/schema.js +10 -0
- package/dist/math/vec2/f32/schema.js.map +1 -0
- package/dist/math/vec2/i32/functions.d.ts +21 -0
- package/dist/math/vec2/i32/functions.js +39 -0
- package/dist/math/vec2/i32/functions.js.map +1 -0
- package/dist/math/vec2/i32/i32.d.ts +4 -0
- package/dist/math/vec2/i32/i32.js +3 -0
- package/dist/math/vec2/i32/i32.js.map +1 -0
- package/dist/math/vec2/i32/layout.d.ts +1 -0
- package/dist/math/vec2/i32/layout.js +5 -0
- package/dist/math/vec2/i32/layout.js.map +1 -0
- package/dist/math/vec2/i32/public.d.ts +3 -0
- package/dist/math/vec2/i32/public.js +5 -0
- package/dist/math/vec2/i32/public.js.map +1 -0
- package/dist/math/vec2/i32/schema.d.ts +12 -0
- package/dist/math/vec2/i32/schema.js +10 -0
- package/dist/math/vec2/i32/schema.js.map +1 -0
- package/dist/math/vec2/index.d.ts +61 -4
- package/dist/math/vec2/index.js +56 -1
- package/dist/math/vec2/index.js.map +1 -1
- package/dist/math/vec2/public.d.ts +5 -3
- package/dist/math/vec2/public.js +6 -3
- package/dist/math/vec2/public.js.map +1 -1
- package/dist/math/vec2/u32/functions.d.ts +20 -0
- package/dist/math/vec2/u32/functions.js +58 -0
- package/dist/math/vec2/u32/functions.js.map +1 -0
- package/dist/math/vec2/u32/layout.d.ts +1 -0
- package/dist/math/vec2/u32/layout.js +5 -0
- package/dist/math/vec2/u32/layout.js.map +1 -0
- package/dist/math/vec2/u32/public.d.ts +3 -0
- package/dist/math/vec2/u32/public.js +5 -0
- package/dist/math/vec2/u32/public.js.map +1 -0
- package/dist/math/vec2/u32/schema.d.ts +12 -0
- package/dist/math/vec2/u32/schema.js +10 -0
- package/dist/math/vec2/u32/schema.js.map +1 -0
- package/dist/math/vec2/u32/u32.d.ts +4 -0
- package/dist/math/vec2/u32/u32.js +3 -0
- package/dist/math/vec2/u32/u32.js.map +1 -0
- package/dist/math/vec3/f32/f32.d.ts +4 -0
- package/dist/math/vec3/f32/f32.js +3 -0
- package/dist/math/vec3/f32/f32.js.map +1 -0
- package/dist/math/vec3/f32/functions.d.ts +59 -0
- package/dist/math/vec3/f32/functions.js +139 -0
- package/dist/math/vec3/f32/functions.js.map +1 -0
- package/dist/math/vec3/f32/layout.d.ts +1 -0
- package/dist/math/vec3/f32/layout.js +5 -0
- package/dist/math/vec3/f32/layout.js.map +1 -0
- package/dist/math/vec3/f32/public.d.ts +3 -0
- package/dist/math/vec3/f32/public.js +5 -0
- package/dist/math/vec3/f32/public.js.map +1 -0
- package/dist/math/vec3/f32/schema.d.ts +11 -0
- package/dist/math/vec3/f32/schema.js +10 -0
- package/dist/math/vec3/f32/schema.js.map +1 -0
- package/dist/math/vec3/i32/functions.d.ts +23 -0
- package/dist/math/vec3/i32/functions.js +78 -0
- package/dist/math/vec3/i32/functions.js.map +1 -0
- package/dist/math/vec3/i32/i32.d.ts +4 -0
- package/dist/math/vec3/i32/i32.js +3 -0
- package/dist/math/vec3/i32/i32.js.map +1 -0
- package/dist/math/vec3/i32/layout.d.ts +1 -0
- package/dist/math/vec3/i32/layout.js +5 -0
- package/dist/math/vec3/i32/layout.js.map +1 -0
- package/dist/math/vec3/i32/public.d.ts +3 -0
- package/dist/math/vec3/i32/public.js +5 -0
- package/dist/math/vec3/i32/public.js.map +1 -0
- package/dist/math/vec3/i32/schema.d.ts +12 -0
- package/dist/math/vec3/i32/schema.js +10 -0
- package/dist/math/vec3/i32/schema.js.map +1 -0
- package/dist/math/vec3/index.d.ts +67 -4
- package/dist/math/vec3/index.js +62 -1
- package/dist/math/vec3/index.js.map +1 -1
- package/dist/math/vec3/public.d.ts +5 -3
- package/dist/math/vec3/public.js +6 -3
- package/dist/math/vec3/public.js.map +1 -1
- package/dist/math/vec3/u32/functions.d.ts +23 -0
- package/dist/math/vec3/u32/functions.js +85 -0
- package/dist/math/vec3/u32/functions.js.map +1 -0
- package/dist/math/vec3/u32/layout.d.ts +1 -0
- package/dist/math/vec3/u32/layout.js +5 -0
- package/dist/math/vec3/u32/layout.js.map +1 -0
- package/dist/math/vec3/u32/public.d.ts +3 -0
- package/dist/math/vec3/u32/public.js +5 -0
- package/dist/math/vec3/u32/public.js.map +1 -0
- package/dist/math/vec3/u32/schema.d.ts +12 -0
- package/dist/math/vec3/u32/schema.js +10 -0
- package/dist/math/vec3/u32/schema.js.map +1 -0
- package/dist/math/vec3/u32/u32.d.ts +4 -0
- package/dist/math/vec3/u32/u32.js +3 -0
- package/dist/math/vec3/u32/u32.js.map +1 -0
- package/dist/math/vec4/f32/f32.d.ts +4 -0
- package/dist/math/vec4/f32/f32.js +3 -0
- package/dist/math/vec4/f32/f32.js.map +1 -0
- package/dist/math/vec4/f32/functions.d.ts +49 -0
- package/dist/math/vec4/f32/functions.js +130 -0
- package/dist/math/vec4/f32/functions.js.map +1 -0
- package/dist/math/vec4/f32/layout.d.ts +1 -0
- package/dist/math/vec4/f32/layout.js +5 -0
- package/dist/math/vec4/f32/layout.js.map +1 -0
- package/dist/math/vec4/f32/public.d.ts +3 -0
- package/dist/math/vec4/f32/public.js +5 -0
- package/dist/math/vec4/f32/public.js.map +1 -0
- package/dist/math/vec4/f32/schema.d.ts +11 -0
- package/dist/math/vec4/f32/schema.js +10 -0
- package/dist/math/vec4/f32/schema.js.map +1 -0
- package/dist/math/vec4/i32/functions.d.ts +23 -0
- package/dist/math/vec4/i32/functions.js +91 -0
- package/dist/math/vec4/i32/functions.js.map +1 -0
- package/dist/math/vec4/i32/i32.d.ts +4 -0
- package/dist/math/vec4/i32/i32.js +3 -0
- package/dist/math/vec4/i32/i32.js.map +1 -0
- package/dist/math/vec4/i32/layout.d.ts +1 -0
- package/dist/math/vec4/i32/layout.js +5 -0
- package/dist/math/vec4/i32/layout.js.map +1 -0
- package/dist/math/vec4/i32/public.d.ts +3 -0
- package/dist/math/vec4/i32/public.js +5 -0
- package/dist/math/vec4/i32/public.js.map +1 -0
- package/dist/math/vec4/i32/schema.d.ts +12 -0
- package/dist/math/vec4/i32/schema.js +10 -0
- package/dist/math/vec4/i32/schema.js.map +1 -0
- package/dist/math/vec4/index.d.ts +60 -4
- package/dist/math/vec4/index.js +55 -1
- package/dist/math/vec4/index.js.map +1 -1
- package/dist/math/vec4/public.d.ts +5 -3
- package/dist/math/vec4/public.js +6 -3
- package/dist/math/vec4/public.js.map +1 -1
- package/dist/math/vec4/u32/functions.d.ts +22 -0
- package/dist/math/vec4/u32/functions.js +99 -0
- package/dist/math/vec4/u32/functions.js.map +1 -0
- package/dist/math/vec4/u32/layout.d.ts +1 -0
- package/dist/math/vec4/u32/layout.js +5 -0
- package/dist/math/vec4/u32/layout.js.map +1 -0
- package/dist/math/vec4/u32/public.d.ts +3 -0
- package/dist/math/vec4/u32/public.js +5 -0
- package/dist/math/vec4/u32/public.js.map +1 -0
- package/dist/math/vec4/u32/schema.d.ts +12 -0
- package/dist/math/vec4/u32/schema.js +10 -0
- package/dist/math/vec4/u32/schema.js.map +1 -0
- package/dist/math/vec4/u32/u32.d.ts +4 -0
- package/dist/math/vec4/u32/u32.js +3 -0
- package/dist/math/vec4/u32/u32.js.map +1 -0
- package/dist/schema/boolean/schema.d.ts +1 -0
- package/dist/schema/boolean/schema.js +2 -1
- package/dist/schema/boolean/schema.js.map +1 -1
- package/dist/schema/dynamic/enumerate-patches.test.d.ts +4 -4
- package/dist/schema/dynamic/enumerate-patches.test.js +8 -8
- package/dist/schema/dynamic/enumerate-patches.test.js.map +1 -1
- package/dist/schema/dynamic/get-dynamic-schema.test.js +4 -4
- package/dist/schema/dynamic/get-dynamic-schema.test.js.map +1 -1
- package/dist/schema/from-archetype.d.ts +14 -0
- package/dist/schema/from-archetype.js +9 -0
- package/dist/schema/from-archetype.js.map +1 -0
- package/dist/schema/from-components.d.ts +14 -0
- package/dist/schema/from-components.js +9 -0
- package/dist/schema/from-components.js.map +1 -0
- package/dist/schema/from-components.test.d.ts +1 -0
- package/dist/schema/from-components.test.js +49 -0
- package/dist/schema/from-components.test.js.map +1 -0
- package/dist/schema/from-components.type-test.d.ts +1 -0
- package/dist/schema/from-components.type-test.js +40 -0
- package/dist/schema/from-components.type-test.js.map +1 -0
- package/dist/schema/public.d.ts +2 -0
- package/dist/schema/public.js +2 -0
- package/dist/schema/public.js.map +1 -1
- package/dist/schema/schema.d.ts +0 -2
- package/dist/schema/to-type.d.ts +2 -0
- package/dist/schema/to-type.js.map +1 -1
- package/dist/table/copy-column-to-gpu-buffer.js +10 -2
- package/dist/table/copy-column-to-gpu-buffer.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/typed-buffer/create-boolean-buffer.d.ts +6 -0
- package/dist/typed-buffer/create-boolean-buffer.js +83 -0
- package/dist/typed-buffer/create-boolean-buffer.js.map +1 -0
- package/dist/typed-buffer/create-boolean-buffer.test.d.ts +1 -0
- package/dist/typed-buffer/create-boolean-buffer.test.js +159 -0
- package/dist/typed-buffer/create-boolean-buffer.test.js.map +1 -0
- package/dist/typed-buffer/create-typed-buffer.js +4 -0
- package/dist/typed-buffer/create-typed-buffer.js.map +1 -1
- package/dist/typed-buffer/index.d.ts +1 -0
- package/dist/typed-buffer/index.js +1 -0
- package/dist/typed-buffer/index.js.map +1 -1
- package/dist/typed-buffer/register-typed-buffer-codecs.js +24 -6
- package/dist/typed-buffer/register-typed-buffer-codecs.js.map +1 -1
- package/dist/typed-buffer/typed-buffer.d.ts +4 -1
- package/dist/typed-buffer/typed-buffer.js +1 -0
- package/dist/typed-buffer/typed-buffer.js.map +1 -1
- package/dist/types/volume/axis-line-callback.d.ts +14 -0
- package/dist/types/volume/axis-line-callback.js +3 -0
- package/dist/types/volume/axis-line-callback.js.map +1 -0
- package/dist/types/volume/block-callback.d.ts +9 -0
- package/dist/types/volume/block-callback.js +3 -0
- package/dist/types/volume/block-callback.js.map +1 -0
- package/dist/types/volume/block-span.d.ts +9 -0
- package/dist/types/volume/block-span.js +3 -0
- package/dist/types/volume/block-span.js.map +1 -0
- package/dist/types/volume/create-dense/create-dense.d.ts +6 -0
- package/dist/types/volume/create-dense/create-dense.js +9 -0
- package/dist/types/volume/create-dense/create-dense.js.map +1 -0
- package/dist/types/volume/create-dense/create-dense.test.d.ts +1 -0
- package/dist/types/volume/create-dense/create-dense.test.js +121 -0
- package/dist/types/volume/create-dense/create-dense.test.js.map +1 -0
- package/dist/types/volume/create-dense/dense-volume.d.ts +17 -0
- package/dist/types/volume/create-dense/dense-volume.js +51 -0
- package/dist/types/volume/create-dense/dense-volume.js.map +1 -0
- package/dist/types/volume/create-dense/is-dense-volume.d.ts +2 -0
- package/dist/types/volume/create-dense/is-dense-volume.js +4 -0
- package/dist/types/volume/create-dense/is-dense-volume.js.map +1 -0
- package/dist/types/volume/create-dense/register-dense-volume-codecs.d.ts +1 -0
- package/dist/types/volume/create-dense/register-dense-volume-codecs.js +33 -0
- package/dist/types/volume/create-dense/register-dense-volume-codecs.js.map +1 -0
- package/dist/types/volume/create-sparse-block/block-dims.d.ts +35 -0
- package/dist/types/volume/create-sparse-block/block-dims.js +93 -0
- package/dist/types/volume/create-sparse-block/block-dims.js.map +1 -0
- package/dist/types/volume/create-sparse-block/block-key.d.ts +9 -0
- package/dist/types/volume/create-sparse-block/block-key.js +23 -0
- package/dist/types/volume/create-sparse-block/block-key.js.map +1 -0
- package/dist/types/volume/create-sparse-block/create-sparse-block.d.ts +6 -0
- package/dist/types/volume/create-sparse-block/create-sparse-block.js +9 -0
- package/dist/types/volume/create-sparse-block/create-sparse-block.js.map +1 -0
- package/dist/types/volume/create-sparse-block/create-sparse-block.test.d.ts +1 -0
- package/dist/types/volume/create-sparse-block/create-sparse-block.test.js +287 -0
- package/dist/types/volume/create-sparse-block/create-sparse-block.test.js.map +1 -0
- package/dist/types/volume/create-sparse-block/is-sparse-block-volume.d.ts +2 -0
- package/dist/types/volume/create-sparse-block/is-sparse-block-volume.js +4 -0
- package/dist/types/volume/create-sparse-block/is-sparse-block-volume.js.map +1 -0
- package/dist/types/volume/create-sparse-block/iterate-sparse-block-axis.d.ts +19 -0
- package/dist/types/volume/create-sparse-block/iterate-sparse-block-axis.js +160 -0
- package/dist/types/volume/create-sparse-block/iterate-sparse-block-axis.js.map +1 -0
- package/dist/types/volume/create-sparse-block/pack-block-key.d.ts +1 -0
- package/dist/types/volume/create-sparse-block/pack-block-key.js +3 -0
- package/dist/types/volume/create-sparse-block/pack-block-key.js.map +1 -0
- package/dist/types/volume/create-sparse-block/register-sparse-block-volume-codecs.d.ts +1 -0
- package/dist/types/volume/create-sparse-block/register-sparse-block-volume-codecs.js +37 -0
- package/dist/types/volume/create-sparse-block/register-sparse-block-volume-codecs.js.map +1 -0
- package/dist/types/volume/create-sparse-block/sparse-block-volume.d.ts +29 -0
- package/dist/types/volume/create-sparse-block/sparse-block-volume.js +133 -0
- package/dist/types/volume/create-sparse-block/sparse-block-volume.js.map +1 -0
- package/dist/types/volume/create-sparse-block/unpack-block-key.d.ts +5 -0
- package/dist/types/volume/create-sparse-block/unpack-block-key.js +7 -0
- package/dist/types/volume/create-sparse-block/unpack-block-key.js.map +1 -0
- package/dist/types/volume/get-dense-index.d.ts +2 -0
- package/dist/types/volume/get-dense-index.js +6 -0
- package/dist/types/volume/get-dense-index.js.map +1 -0
- package/dist/types/volume/get-dense-index.test.d.ts +1 -0
- package/dist/types/volume/get-dense-index.test.js +17 -0
- package/dist/types/volume/get-dense-index.test.js.map +1 -0
- package/dist/types/volume/is-in-bounds.d.ts +2 -0
- package/dist/types/volume/is-in-bounds.js +6 -0
- package/dist/types/volume/is-in-bounds.js.map +1 -0
- package/dist/types/volume/is-in-bounds.test.d.ts +1 -0
- package/dist/types/volume/is-in-bounds.test.js +12 -0
- package/dist/types/volume/is-in-bounds.test.js.map +1 -0
- package/dist/types/volume/iterate-axis.d.ts +7 -0
- package/dist/types/volume/iterate-axis.js +58 -0
- package/dist/types/volume/iterate-axis.js.map +1 -0
- package/dist/types/volume/iterate-sparse-block-axis.test.d.ts +1 -0
- package/dist/types/volume/iterate-sparse-block-axis.test.js +11 -0
- package/dist/types/volume/iterate-sparse-block-axis.test.js.map +1 -0
- package/dist/types/volume/iterate-sparse-block.benchmark.test.d.ts +1 -0
- package/dist/types/volume/iterate-sparse-block.benchmark.test.js +80 -0
- package/dist/types/volume/iterate-sparse-block.benchmark.test.js.map +1 -0
- package/dist/types/volume/iterate-test-helpers.d.ts +14 -0
- package/dist/types/volume/iterate-test-helpers.js +41 -0
- package/dist/types/volume/iterate-test-helpers.js.map +1 -0
- package/dist/types/volume/public.d.ts +7 -0
- package/dist/types/volume/public.js +6 -0
- package/dist/types/volume/public.js.map +1 -0
- package/dist/types/volume/sparse-block-iterate-benchmark.d.ts +49 -0
- package/dist/types/volume/sparse-block-iterate-benchmark.js +131 -0
- package/dist/types/volume/sparse-block-iterate-benchmark.js.map +1 -0
- package/dist/types/volume/volume.d.ts +13 -0
- package/dist/types/volume/volume.js +3 -0
- package/dist/types/volume/volume.js.map +1 -0
- package/package.json +1 -1
- package/references/data-lit/package.json +1 -1
- package/references/data-lit-tictactoe/package.json +1 -1
- package/references/data-react/package.json +1 -1
- package/references/data-react-hello/package.json +1 -1
- package/references/data-react-pixie/package.json +1 -1
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { packBlockKeyInline } from "./block-key.js";
|
|
3
|
+
import { createBlockDims, normalizeBlockSize } from "./block-dims.js";
|
|
4
|
+
import { buildSparseBlockAxisPlan, runSparseBlockAxisPlan, } from "./iterate-sparse-block-axis.js";
|
|
5
|
+
const defaultFromSchema = (schema) => {
|
|
6
|
+
if (!("default" in schema)) {
|
|
7
|
+
throw new Error("SparseBlockVolume schema must include a default value");
|
|
8
|
+
}
|
|
9
|
+
return schema.default;
|
|
10
|
+
};
|
|
11
|
+
export class SparseBlockVolume {
|
|
12
|
+
#dims;
|
|
13
|
+
#data;
|
|
14
|
+
#blocks = new Map();
|
|
15
|
+
#defaultValue;
|
|
16
|
+
#keyFromWorld;
|
|
17
|
+
#indexFromWorld;
|
|
18
|
+
#volume;
|
|
19
|
+
#size = [0, 0, 0];
|
|
20
|
+
#axisPlans;
|
|
21
|
+
constructor(blockSize, data) {
|
|
22
|
+
this.#dims = createBlockDims(blockSize);
|
|
23
|
+
this.blockSize = this.#dims.size;
|
|
24
|
+
this.#data = data;
|
|
25
|
+
this.#defaultValue = defaultFromSchema(data.schema);
|
|
26
|
+
this.#keyFromWorld = this.#dims.keyFromWorld;
|
|
27
|
+
this.#indexFromWorld = this.#dims.indexFromWorld;
|
|
28
|
+
this.#volume = this.#dims.volume;
|
|
29
|
+
}
|
|
30
|
+
get dims() {
|
|
31
|
+
return this.#dims;
|
|
32
|
+
}
|
|
33
|
+
get size() {
|
|
34
|
+
return this.#size;
|
|
35
|
+
}
|
|
36
|
+
toSerialized() {
|
|
37
|
+
return {
|
|
38
|
+
blockSize: this.blockSize,
|
|
39
|
+
size: this.#size,
|
|
40
|
+
blocks: [...this.#blocks.entries()],
|
|
41
|
+
data: this.#data,
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
static fromSerialized(blockSize, data, size, blocks) {
|
|
45
|
+
const volume = new SparseBlockVolume(normalizeBlockSize(blockSize), data);
|
|
46
|
+
volume.#size = size;
|
|
47
|
+
for (const [key, offset] of blocks) {
|
|
48
|
+
volume.#blocks.set(key, offset);
|
|
49
|
+
}
|
|
50
|
+
volume.#axisPlans = undefined;
|
|
51
|
+
return volume;
|
|
52
|
+
}
|
|
53
|
+
get(x, y, z) {
|
|
54
|
+
const offset = this.#blocks.get(this.#keyFromWorld(x, y, z));
|
|
55
|
+
if (offset === undefined) {
|
|
56
|
+
return this.#defaultValue;
|
|
57
|
+
}
|
|
58
|
+
return this.#data.get(this.#indexFromWorld(x, y, z, offset));
|
|
59
|
+
}
|
|
60
|
+
set(x, y, z, value) {
|
|
61
|
+
const offset = this.#ensureBlock(x, y, z);
|
|
62
|
+
this.#data.set(this.#indexFromWorld(x, y, z, offset), value);
|
|
63
|
+
this.#expandSize(x, y, z);
|
|
64
|
+
}
|
|
65
|
+
iterateX(callback) {
|
|
66
|
+
this.#iterateAxis("x", callback);
|
|
67
|
+
}
|
|
68
|
+
iterateY(callback) {
|
|
69
|
+
this.#iterateAxis("y", callback);
|
|
70
|
+
}
|
|
71
|
+
iterateZ(callback) {
|
|
72
|
+
this.#iterateAxis("z", callback);
|
|
73
|
+
}
|
|
74
|
+
iterateBlocks(callback) {
|
|
75
|
+
const entries = [...this.#blocks.entries()].sort((a, b) => a[0] - b[0]);
|
|
76
|
+
const last = entries.length - 1;
|
|
77
|
+
const { shiftX, shiftY, shiftZ, decodeKey } = this.#dims;
|
|
78
|
+
for (let i = 0; i < entries.length; i++) {
|
|
79
|
+
const [key, offset] = entries[i];
|
|
80
|
+
const [bx, by, bz] = decodeKey(key);
|
|
81
|
+
callback(this.#data, {
|
|
82
|
+
origin: [bx << shiftX, by << shiftY, bz << shiftZ],
|
|
83
|
+
size: this.blockSize,
|
|
84
|
+
offset,
|
|
85
|
+
}, i === last);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
#iterateAxis(axis, callback) {
|
|
89
|
+
let plan = this.#axisPlans?.[axis];
|
|
90
|
+
if (plan === undefined) {
|
|
91
|
+
plan = buildSparseBlockAxisPlan(this.#blocks, this.#dims, axis);
|
|
92
|
+
if (plan === undefined) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
if (this.#axisPlans === undefined) {
|
|
96
|
+
this.#axisPlans = {};
|
|
97
|
+
}
|
|
98
|
+
this.#axisPlans[axis] = plan;
|
|
99
|
+
}
|
|
100
|
+
runSparseBlockAxisPlan(plan, this.#data, callback);
|
|
101
|
+
}
|
|
102
|
+
#invalidateAxisPlans() {
|
|
103
|
+
this.#axisPlans = undefined;
|
|
104
|
+
}
|
|
105
|
+
#ensureBlock(x, y, z) {
|
|
106
|
+
const key = this.#keyFromWorld(x, y, z);
|
|
107
|
+
let offset = this.#blocks.get(key);
|
|
108
|
+
if (offset === undefined) {
|
|
109
|
+
offset = this.#data.capacity;
|
|
110
|
+
this.#data.capacity = offset + this.#volume;
|
|
111
|
+
for (let i = 0; i < this.#volume; i++) {
|
|
112
|
+
this.#data.set(offset + i, this.#defaultValue);
|
|
113
|
+
}
|
|
114
|
+
this.#blocks.set(key, offset);
|
|
115
|
+
this.#invalidateAxisPlans();
|
|
116
|
+
}
|
|
117
|
+
return offset;
|
|
118
|
+
}
|
|
119
|
+
#expandSize(x, y, z) {
|
|
120
|
+
if (x >= 0) {
|
|
121
|
+
this.#size = [Math.max(this.#size[0], x + 1), this.#size[1], this.#size[2]];
|
|
122
|
+
}
|
|
123
|
+
if (y >= 0) {
|
|
124
|
+
this.#size = [this.#size[0], Math.max(this.#size[1], y + 1), this.#size[2]];
|
|
125
|
+
}
|
|
126
|
+
if (z >= 0) {
|
|
127
|
+
this.#size = [this.#size[0], this.#size[1], Math.max(this.#size[2], z + 1)];
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/** Used when allocating blocks by unpacked coordinates (tests/serialization). */
|
|
132
|
+
export const packBlockKey = packBlockKeyInline;
|
|
133
|
+
//# sourceMappingURL=sparse-block-volume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sparse-block-volume.js","sourceRoot":"","sources":["../../../../src/types/volume/create-sparse-block/sparse-block-volume.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { decodeBlockKeyInline } from "./block-key.js";
|
|
3
|
+
export const unpackBlockKey = (key) => {
|
|
4
|
+
const [bx, by, bz] = decodeBlockKeyInline(key);
|
|
5
|
+
return { bx, by, bz };
|
|
6
|
+
};
|
|
7
|
+
//# sourceMappingURL=unpack-block-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpack-block-key.js","sourceRoot":"","sources":["../../../../src/types/volume/create-sparse-block/unpack-block-key.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAEtD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAqE,EAAE;IAC7G,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IAC/C,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC;AAC1B,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-dense-index.js","sourceRoot":"","sources":["../../../src/types/volume/get-dense-index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAIvD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,IAAU,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAU,EAAE;IACjF,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;AACxC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { getDenseIndex } from "./get-dense-index.js";
|
|
4
|
+
describe("getDenseIndex", () => {
|
|
5
|
+
it("maps coordinates to row-major dense indices", () => {
|
|
6
|
+
const size = [3, 2, 2];
|
|
7
|
+
expect(getDenseIndex(size, 0, 0, 0)).toBe(0);
|
|
8
|
+
expect(getDenseIndex(size, 2, 0, 0)).toBe(2);
|
|
9
|
+
expect(getDenseIndex(size, 0, 1, 0)).toBe(3);
|
|
10
|
+
expect(getDenseIndex(size, 1, 0, 1)).toBe(7);
|
|
11
|
+
});
|
|
12
|
+
it("matches standard layout for non-cubic block sizes", () => {
|
|
13
|
+
const size = [8, 4, 4];
|
|
14
|
+
expect(getDenseIndex(size, 1, 2, 3)).toBe(1 + 8 * (2 + 4 * 3));
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
//# sourceMappingURL=get-dense-index.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"get-dense-index.test.js","sourceRoot":"","sources":["../../../src/types/volume/get-dense-index.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACnD,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAC;QAChC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACjD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;QACzD,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAC;QAChC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-in-bounds.js","sourceRoot":"","sources":["../../../src/types/volume/is-in-bounds.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAIvD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,IAAU,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAW,EAAE;IAC/E,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC;IACpC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;AAC9E,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { isInBounds } from "./is-in-bounds.js";
|
|
4
|
+
describe("isInBounds", () => {
|
|
5
|
+
it("checks bounds", () => {
|
|
6
|
+
const size = [2, 2, 2];
|
|
7
|
+
expect(isInBounds(size, 0, 0, 0)).toBe(true);
|
|
8
|
+
expect(isInBounds(size, 2, 0, 0)).toBe(false);
|
|
9
|
+
expect(isInBounds(size, -1, 0, 0)).toBe(false);
|
|
10
|
+
});
|
|
11
|
+
});
|
|
12
|
+
//# sourceMappingURL=is-in-bounds.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-in-bounds.test.js","sourceRoot":"","sources":["../../../src/types/volume/is-in-bounds.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE/C,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IACxB,EAAE,CAAC,eAAe,EAAE,GAAG,EAAE;QACrB,MAAM,IAAI,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAU,CAAC;QAChC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC9C,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Vec3 } from "../../math/index.js";
|
|
2
|
+
import type { TypedBuffer } from "../../typed-buffer/typed-buffer.js";
|
|
3
|
+
import type { AxisLineCallback } from "./axis-line-callback.js";
|
|
4
|
+
export { iterateSparseBlockAxis, buildSparseBlockAxisPlan, runSparseBlockAxisPlan, type SparseBlockAxisPlan, } from "./create-sparse-block/iterate-sparse-block-axis.js";
|
|
5
|
+
export type { BlockDims } from "./create-sparse-block/block-dims.js";
|
|
6
|
+
export type IterateAxis = "x" | "y" | "z";
|
|
7
|
+
export declare const iterateDenseAxis: <T>(size: Vec3, data: TypedBuffer<T>, callback: AxisLineCallback<T>, axis: IterateAxis) => void;
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { getDenseIndex } from "./get-dense-index.js";
|
|
3
|
+
export { iterateSparseBlockAxis, buildSparseBlockAxisPlan, runSparseBlockAxisPlan, } from "./create-sparse-block/iterate-sparse-block-axis.js";
|
|
4
|
+
const denseAxisSpecs = {
|
|
5
|
+
x: (size) => {
|
|
6
|
+
const [width, height, depth] = size;
|
|
7
|
+
return {
|
|
8
|
+
length: width,
|
|
9
|
+
step: 1,
|
|
10
|
+
outer: [depth, height],
|
|
11
|
+
segmentStart: (s, y, z) => getDenseIndex(s, 0, y, z),
|
|
12
|
+
origin: (y, z) => [0, y, z],
|
|
13
|
+
isLast: (y, z, lastY, lastZ) => y === lastY && z === lastZ,
|
|
14
|
+
};
|
|
15
|
+
},
|
|
16
|
+
y: (size) => {
|
|
17
|
+
const [width, height, depth] = size;
|
|
18
|
+
return {
|
|
19
|
+
length: height,
|
|
20
|
+
step: width,
|
|
21
|
+
outer: [depth, width],
|
|
22
|
+
segmentStart: (s, x, z) => getDenseIndex(s, x, 0, z),
|
|
23
|
+
origin: (x, z) => [x, 0, z],
|
|
24
|
+
isLast: (x, z, lastX, lastZ) => x === lastX && z === lastZ,
|
|
25
|
+
};
|
|
26
|
+
},
|
|
27
|
+
z: (size) => {
|
|
28
|
+
const [width, height, depth] = size;
|
|
29
|
+
const plane = width * height;
|
|
30
|
+
return {
|
|
31
|
+
length: depth,
|
|
32
|
+
step: plane,
|
|
33
|
+
outer: [height, width],
|
|
34
|
+
segmentStart: (s, x, y) => getDenseIndex(s, x, y, 0),
|
|
35
|
+
origin: (x, y) => [x, y, 0],
|
|
36
|
+
isLast: (x, y, lastX, lastY) => x === lastX && y === lastY,
|
|
37
|
+
};
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
export const iterateDenseAxis = (size, data, callback, axis) => {
|
|
41
|
+
const [width, height, depth] = size;
|
|
42
|
+
if (width === 0 || height === 0 || depth === 0) {
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
const spec = denseAxisSpecs[axis](size);
|
|
46
|
+
const [outerCount, innerCount] = spec.outer;
|
|
47
|
+
const segments = [0, spec.length];
|
|
48
|
+
const lastOuter = outerCount - 1;
|
|
49
|
+
const lastInner = innerCount - 1;
|
|
50
|
+
for (let outer = 0; outer < outerCount; outer++) {
|
|
51
|
+
for (let inner = 0; inner < innerCount; inner++) {
|
|
52
|
+
segments[0] = spec.segmentStart(size, inner, outer);
|
|
53
|
+
const [x, y, z] = spec.origin(inner, outer);
|
|
54
|
+
callback(data, segments, spec.step, x, y, z, spec.isLast(inner, outer, lastInner, lastOuter));
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
//# sourceMappingURL=iterate-axis.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterate-axis.js","sourceRoot":"","sources":["../../../src/types/volume/iterate-axis.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { packPlaneKey } from "./create-sparse-block/pack-block-key.js";
|
|
4
|
+
describe("packPlaneKey", () => {
|
|
5
|
+
it("round-trips two slice coordinates in sort order", () => {
|
|
6
|
+
const a = packPlaneKey(-1, 2);
|
|
7
|
+
const b = packPlaneKey(-1, 3);
|
|
8
|
+
expect(a).toBeLessThan(b);
|
|
9
|
+
});
|
|
10
|
+
});
|
|
11
|
+
//# sourceMappingURL=iterate-sparse-block-axis.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterate-sparse-block-axis.test.js","sourceRoot":"","sources":["../../../src/types/volume/iterate-sparse-block-axis.test.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,YAAY,EAAE,MAAM,yCAAyC,CAAC;AAEvE,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;QACvD,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC9B,MAAM,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, it } from "vitest";
|
|
3
|
+
import { buildSparseBlockIterateScene, formatSparseBlockIterateBenchmark, measureIterateOnce, runSparseBlockIterateBenchmark, } from "./sparse-block-iterate-benchmark.js";
|
|
4
|
+
// Informational only — logs throughput for manual/regression review, never fails CI.
|
|
5
|
+
// pnpm test -- src/types/volume/iterate-sparse-block.benchmark.test.ts
|
|
6
|
+
const BLOCK_SIZE = 16;
|
|
7
|
+
const AXES = ["x", "y", "z"];
|
|
8
|
+
const LAYOUTS = ["adjacent", "fragmented"];
|
|
9
|
+
describe("sparse block iterate benchmarks", () => {
|
|
10
|
+
it.each(AXES)("merge stats adjacent vs fragmented (%s)", (axis) => {
|
|
11
|
+
const adjacent = buildSparseBlockIterateScene({
|
|
12
|
+
layout: "adjacent",
|
|
13
|
+
blocks: 32,
|
|
14
|
+
blockSize: BLOCK_SIZE,
|
|
15
|
+
axis,
|
|
16
|
+
});
|
|
17
|
+
const fragmented = buildSparseBlockIterateScene({
|
|
18
|
+
layout: "fragmented",
|
|
19
|
+
blocks: 32,
|
|
20
|
+
blockSize: BLOCK_SIZE,
|
|
21
|
+
axis,
|
|
22
|
+
});
|
|
23
|
+
const adj = measureIterateOnce(adjacent, axis);
|
|
24
|
+
const frag = measureIterateOnce(fragmented, axis);
|
|
25
|
+
// eslint-disable-next-line no-console
|
|
26
|
+
console.log(`\n${axis} merge stats · adjacent ${adj.callbacks} callbacks / ${adj.segmentPairs} pairs`
|
|
27
|
+
+ ` · fragmented ${frag.callbacks} callbacks / ${frag.segmentPairs} pairs`
|
|
28
|
+
+ ` · ${adj.voxelsAlongAxis} voxels each\n`);
|
|
29
|
+
});
|
|
30
|
+
it.each(AXES)("throughput adjacent vs fragmented on %s", (axis) => {
|
|
31
|
+
const scene = {
|
|
32
|
+
blocks: 64,
|
|
33
|
+
blockSize: BLOCK_SIZE,
|
|
34
|
+
axis,
|
|
35
|
+
};
|
|
36
|
+
const adjacent = buildSparseBlockIterateScene({ ...scene, layout: "adjacent" });
|
|
37
|
+
const fragmented = buildSparseBlockIterateScene({ ...scene, layout: "fragmented" });
|
|
38
|
+
const adjacentResult = runSparseBlockIterateBenchmark(adjacent, { ...scene, layout: "adjacent" }, {
|
|
39
|
+
warmupIterations: 100,
|
|
40
|
+
timedIterations: 600,
|
|
41
|
+
});
|
|
42
|
+
const fragmentedResult = runSparseBlockIterateBenchmark(fragmented, { ...scene, layout: "fragmented" }, {
|
|
43
|
+
warmupIterations: 100,
|
|
44
|
+
timedIterations: 600,
|
|
45
|
+
});
|
|
46
|
+
// eslint-disable-next-line no-console
|
|
47
|
+
console.log(`\n${axis} throughput (${BLOCK_SIZE}³ blocks)\n`
|
|
48
|
+
+ `${formatSparseBlockIterateBenchmark(adjacentResult)}\n\n`
|
|
49
|
+
+ `${formatSparseBlockIterateBenchmark(fragmentedResult)}\n`);
|
|
50
|
+
}, 60_000);
|
|
51
|
+
it("reports iterateX/Y/Z throughput for adjacent and fragmented layouts", () => {
|
|
52
|
+
const scenes = AXES.flatMap(axis => LAYOUTS.map(layout => ({ layout, blocks: 64, axis })));
|
|
53
|
+
const lines = [];
|
|
54
|
+
for (const scene of scenes) {
|
|
55
|
+
const volume = buildSparseBlockIterateScene({ ...scene, blockSize: BLOCK_SIZE });
|
|
56
|
+
const result = runSparseBlockIterateBenchmark(volume, scene, {
|
|
57
|
+
warmupIterations: 60,
|
|
58
|
+
timedIterations: 300,
|
|
59
|
+
});
|
|
60
|
+
lines.push(formatSparseBlockIterateBenchmark(result));
|
|
61
|
+
}
|
|
62
|
+
// eslint-disable-next-line no-console
|
|
63
|
+
console.log(`\nsparse block iterate (${BLOCK_SIZE}³ blocks)\n${lines.join("\n\n")}\n`);
|
|
64
|
+
}, 60_000);
|
|
65
|
+
it.each([
|
|
66
|
+
{ label: "16³", blockSize: [16, 16, 16] },
|
|
67
|
+
{ label: "32×16×8", blockSize: [32, 16, 8] },
|
|
68
|
+
])("reports adjacent throughput for non-cubic $label", ({ blockSize, label }) => {
|
|
69
|
+
const blocks = 64;
|
|
70
|
+
const layout = "adjacent";
|
|
71
|
+
const lines = [];
|
|
72
|
+
for (const axis of AXES) {
|
|
73
|
+
const volume = buildSparseBlockIterateScene({ blockSize, layout, blocks, axis });
|
|
74
|
+
lines.push(formatSparseBlockIterateBenchmark(runSparseBlockIterateBenchmark(volume, { blockSize, layout, blocks, axis }, { warmupIterations: 80, timedIterations: 400 })));
|
|
75
|
+
}
|
|
76
|
+
// eslint-disable-next-line no-console
|
|
77
|
+
console.log(`\nsparse block iterate (${label}, 64 adjacent blocks)\n${lines.join("\n\n")}\n`);
|
|
78
|
+
}, 120_000);
|
|
79
|
+
});
|
|
80
|
+
//# sourceMappingURL=iterate-sparse-block.benchmark.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterate-sparse-block.benchmark.test.js","sourceRoot":"","sources":["../../../src/types/volume/iterate-sparse-block.benchmark.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { TypedBuffer } from "../../typed-buffer/index.js";
|
|
2
|
+
import type { IterateAxis } from "./iterate-axis.js";
|
|
3
|
+
import type { Volume } from "./volume.js";
|
|
4
|
+
export interface SegmentRow {
|
|
5
|
+
readonly x: number;
|
|
6
|
+
readonly y: number;
|
|
7
|
+
readonly z: number;
|
|
8
|
+
readonly values: boolean[];
|
|
9
|
+
readonly step: number;
|
|
10
|
+
readonly pairCount: number;
|
|
11
|
+
readonly done: boolean;
|
|
12
|
+
}
|
|
13
|
+
export declare const readAllSegmentValues: <T>(buffer: TypedBuffer<T>, segments: readonly number[], step: number) => T[];
|
|
14
|
+
export declare const collectAxisSegments: <T>(volume: Volume<T>, axis: IterateAxis) => SegmentRow[];
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { expect } from "vitest";
|
|
3
|
+
export const readAllSegmentValues = (buffer, segments, step) => {
|
|
4
|
+
const values = [];
|
|
5
|
+
for (let i = 0; i < segments.length; i += 2) {
|
|
6
|
+
const offset = segments[i];
|
|
7
|
+
const length = segments[i + 1];
|
|
8
|
+
for (let j = 0; j < length; j++) {
|
|
9
|
+
values.push(buffer.get(offset + j * step));
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return values;
|
|
13
|
+
};
|
|
14
|
+
export const collectAxisSegments = (volume, axis) => {
|
|
15
|
+
const iterate = axis === "x" ? volume.iterateX.bind(volume)
|
|
16
|
+
: axis === "y" ? volume.iterateY.bind(volume)
|
|
17
|
+
: volume.iterateZ.bind(volume);
|
|
18
|
+
const rows = [];
|
|
19
|
+
let segmentsRef;
|
|
20
|
+
iterate((buffer, segments, step, x, y, z, done) => {
|
|
21
|
+
if (segmentsRef === undefined) {
|
|
22
|
+
segmentsRef = segments;
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
expect(segments).toBe(segmentsRef);
|
|
26
|
+
}
|
|
27
|
+
expect(segments.length % 2).toBe(0);
|
|
28
|
+
expect(segments.length).toBeGreaterThan(0);
|
|
29
|
+
rows.push({
|
|
30
|
+
x,
|
|
31
|
+
y,
|
|
32
|
+
z,
|
|
33
|
+
values: readAllSegmentValues(buffer, segments, step),
|
|
34
|
+
step,
|
|
35
|
+
pairCount: segments.length / 2,
|
|
36
|
+
done,
|
|
37
|
+
});
|
|
38
|
+
});
|
|
39
|
+
return rows;
|
|
40
|
+
};
|
|
41
|
+
//# sourceMappingURL=iterate-test-helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"iterate-test-helpers.js","sourceRoot":"","sources":["../../../src/types/volume/iterate-test-helpers.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAehC,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,MAAsB,EACtB,QAA2B,EAC3B,IAAY,EACT,EAAE;IACL,MAAM,MAAM,GAAQ,EAAE,CAAC;IACvB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC;QAC/C,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAC/B,MAAiB,EACjB,IAAiB,EACL,EAAE;IACd,MAAM,OAAO,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;QACvD,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC;YACzC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAEvC,MAAM,IAAI,GAAiB,EAAE,CAAC;IAC9B,IAAI,WAAiC,CAAC;IAEtC,OAAO,CAAC,CAAC,MAAsB,EAAE,QAAkB,EAAE,IAAY,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,IAAa,EAAE,EAAE;QACjH,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC5B,WAAW,GAAG,QAAQ,CAAC;QAC3B,CAAC;aAAM,CAAC;YACJ,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QACvC,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;QAE3C,IAAI,CAAC,IAAI,CAAC;YACN,CAAC;YACD,CAAC;YACD,CAAC;YACD,MAAM,EAAE,oBAAoB,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAc;YACjE,IAAI;YACJ,SAAS,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC;YAC9B,IAAI;SACP,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export { createDense } from "./create-dense/create-dense.js";
|
|
2
|
+
export { createSparseBlock } from "./create-sparse-block/create-sparse-block.js";
|
|
3
|
+
export type { AxisLineCallback } from "./axis-line-callback.js";
|
|
4
|
+
export type { BlockCallback } from "./block-callback.js";
|
|
5
|
+
export type { BlockSpan } from "./block-span.js";
|
|
6
|
+
export { getDenseIndex } from "./get-dense-index.js";
|
|
7
|
+
export { isInBounds } from "./is-in-bounds.js";
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
export { createDense } from "./create-dense/create-dense.js";
|
|
3
|
+
export { createSparseBlock } from "./create-sparse-block/create-sparse-block.js";
|
|
4
|
+
export { getDenseIndex } from "./get-dense-index.js";
|
|
5
|
+
export { isInBounds } from "./is-in-bounds.js";
|
|
6
|
+
//# sourceMappingURL=public.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"public.js","sourceRoot":"","sources":["../../../src/types/volume/public.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAIjF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { Vec3 } from "../../math/index.js";
|
|
2
|
+
import type { AxisLineCallback } from "./axis-line-callback.js";
|
|
3
|
+
import type { IterateAxis } from "./iterate-axis.js";
|
|
4
|
+
import type { Volume } from "./volume.js";
|
|
5
|
+
export type SparseBlockIterateLayout = "adjacent" | "fragmented" | "scattered";
|
|
6
|
+
export interface SparseBlockIterateSceneOptions {
|
|
7
|
+
readonly layout: SparseBlockIterateLayout;
|
|
8
|
+
/** Blocks to allocate (along the axis for adjacent/fragmented). */
|
|
9
|
+
readonly blocks: number;
|
|
10
|
+
readonly blockSize?: number | Vec3;
|
|
11
|
+
readonly axis?: IterateAxis;
|
|
12
|
+
}
|
|
13
|
+
export interface IterateInvocationStats {
|
|
14
|
+
readonly callbacks: number;
|
|
15
|
+
readonly segmentPairs: number;
|
|
16
|
+
readonly voxelsAlongAxis: number;
|
|
17
|
+
}
|
|
18
|
+
interface MutableIterateInvocationStats {
|
|
19
|
+
callbacks: number;
|
|
20
|
+
segmentPairs: number;
|
|
21
|
+
voxelsAlongAxis: number;
|
|
22
|
+
}
|
|
23
|
+
export interface SparseBlockIterateBenchmarkOptions {
|
|
24
|
+
readonly axis?: IterateAxis;
|
|
25
|
+
readonly warmupIterations?: number;
|
|
26
|
+
readonly timedIterations?: number;
|
|
27
|
+
}
|
|
28
|
+
export interface SparseBlockIterateBenchmarkResult extends IterateInvocationStats {
|
|
29
|
+
readonly axis: IterateAxis;
|
|
30
|
+
readonly blockCount: number;
|
|
31
|
+
readonly blockSize: string;
|
|
32
|
+
readonly layout: SparseBlockIterateSceneOptions["layout"];
|
|
33
|
+
readonly warmupIterations: number;
|
|
34
|
+
readonly timedIterations: number;
|
|
35
|
+
readonly totalMs: number;
|
|
36
|
+
readonly msPerIteration: number;
|
|
37
|
+
readonly iterationsPerSecond: number;
|
|
38
|
+
readonly voxelsPerSecond: number;
|
|
39
|
+
}
|
|
40
|
+
export declare const createIterateStatsCollector: () => {
|
|
41
|
+
stats: MutableIterateInvocationStats;
|
|
42
|
+
readonly callback: AxisLineCallback<boolean>;
|
|
43
|
+
};
|
|
44
|
+
export declare const buildSparseBlockIterateScene: (options: SparseBlockIterateSceneOptions) => Volume<boolean>;
|
|
45
|
+
export declare const blockCountOf: (volume: Volume<boolean>) => number;
|
|
46
|
+
export declare const measureIterateOnce: (volume: Volume<boolean>, axis: IterateAxis) => IterateInvocationStats;
|
|
47
|
+
export declare const runSparseBlockIterateBenchmark: (volume: Volume<boolean>, scene: SparseBlockIterateSceneOptions, opts?: SparseBlockIterateBenchmarkOptions) => SparseBlockIterateBenchmarkResult;
|
|
48
|
+
export declare const formatSparseBlockIterateBenchmark: (result: SparseBlockIterateBenchmarkResult) => string;
|
|
49
|
+
export {};
|