@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,121 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { describe, expect, it } from "vitest";
|
|
3
|
+
import { Boolean } from "../../../schema/boolean/index.js";
|
|
4
|
+
import { equals } from "../../../equals.js";
|
|
5
|
+
import { deserialize, serialize } from "../../../functions/serialization/serialize.js";
|
|
6
|
+
import { collectAxisSegments } from "../iterate-test-helpers.js";
|
|
7
|
+
import { getDenseIndex } from "../get-dense-index.js";
|
|
8
|
+
import { createDense } from "./create-dense.js";
|
|
9
|
+
import { DenseVolume } from "./dense-volume.js";
|
|
10
|
+
import { isDenseVolume } from "./is-dense-volume.js";
|
|
11
|
+
describe("createDense", () => {
|
|
12
|
+
it("creates a dense volume with typed buffer capacity matching size", () => {
|
|
13
|
+
const volume = createDense([2, 3, 4], Boolean.schema);
|
|
14
|
+
expect(volume).toBeInstanceOf(DenseVolume);
|
|
15
|
+
expect(isDenseVolume(volume)).toBe(true);
|
|
16
|
+
expect(volume.size).toEqual([2, 3, 4]);
|
|
17
|
+
if (isDenseVolume(volume)) {
|
|
18
|
+
expect(volume.data.capacity).toBe(24);
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
it("reads and writes voxels by coordinate", () => {
|
|
22
|
+
const volume = createDense([2, 2, 2], Boolean.schema);
|
|
23
|
+
volume.set(1, 0, 1, true);
|
|
24
|
+
expect(volume.get(1, 0, 1)).toBe(true);
|
|
25
|
+
expect(volume.get(0, 0, 0)).toBe(false);
|
|
26
|
+
});
|
|
27
|
+
it("returns schema default for out-of-bounds get and ignores out-of-bounds set", () => {
|
|
28
|
+
const volume = createDense([1, 1, 1], Boolean.schema);
|
|
29
|
+
volume.set(0, 0, 0, true);
|
|
30
|
+
expect(volume.get(1, 0, 0)).toBe(false);
|
|
31
|
+
volume.set(0, 1, 0, true);
|
|
32
|
+
expect(volume.get(0, 0, 0)).toBe(true);
|
|
33
|
+
});
|
|
34
|
+
it("requires schema default at creation", () => {
|
|
35
|
+
expect(() => createDense([1, 1, 1], { type: "boolean" })).toThrow("DenseVolume schema must include a default value");
|
|
36
|
+
});
|
|
37
|
+
it("iterateX walks each x row with reused segments", () => {
|
|
38
|
+
const volume = createDense([3, 2, 2], Boolean.schema);
|
|
39
|
+
volume.set(0, 0, 0, true);
|
|
40
|
+
volume.set(1, 0, 0, true);
|
|
41
|
+
volume.set(2, 1, 1, true);
|
|
42
|
+
const rows = collectAxisSegments(volume, "x");
|
|
43
|
+
expect(rows).toHaveLength(4);
|
|
44
|
+
expect(rows.every(row => row.step === 1 && row.x === 0)).toBe(true);
|
|
45
|
+
expect(rows[0]).toEqual({ x: 0, y: 0, z: 0, values: [true, true, false], step: 1, pairCount: 1, done: false });
|
|
46
|
+
expect(rows[1]).toEqual({ x: 0, y: 1, z: 0, values: [false, false, false], step: 1, pairCount: 1, done: false });
|
|
47
|
+
expect(rows[2]).toEqual({ x: 0, y: 0, z: 1, values: [false, false, false], step: 1, pairCount: 1, done: false });
|
|
48
|
+
expect(rows[3]).toEqual({ x: 0, y: 1, z: 1, values: [false, false, true], step: 1, pairCount: 1, done: true });
|
|
49
|
+
});
|
|
50
|
+
it("iterateY walks each y column with width stride", () => {
|
|
51
|
+
const volume = createDense([3, 2, 2], Boolean.schema);
|
|
52
|
+
volume.set(0, 0, 0, true);
|
|
53
|
+
volume.set(0, 1, 0, true);
|
|
54
|
+
volume.set(2, 1, 1, true);
|
|
55
|
+
const rows = collectAxisSegments(volume, "y");
|
|
56
|
+
expect(rows).toHaveLength(6);
|
|
57
|
+
expect(rows.every(row => row.step === 3 && row.y === 0)).toBe(true);
|
|
58
|
+
expect(rows[0]).toEqual({ x: 0, y: 0, z: 0, values: [true, true], step: 3, pairCount: 1, done: false });
|
|
59
|
+
expect(rows[1]).toEqual({ x: 1, y: 0, z: 0, values: [false, false], step: 3, pairCount: 1, done: false });
|
|
60
|
+
expect(rows.find(row => row.x === 2 && row.z === 1)).toEqual({
|
|
61
|
+
x: 2, y: 0, z: 1, values: [false, true], step: 3, pairCount: 1, done: true,
|
|
62
|
+
});
|
|
63
|
+
});
|
|
64
|
+
it("iterateZ walks each z column with plane stride", () => {
|
|
65
|
+
const volume = createDense([3, 2, 2], Boolean.schema);
|
|
66
|
+
volume.set(0, 0, 0, true);
|
|
67
|
+
volume.set(0, 0, 1, true);
|
|
68
|
+
volume.set(2, 1, 1, true);
|
|
69
|
+
const rows = collectAxisSegments(volume, "z");
|
|
70
|
+
expect(rows).toHaveLength(6);
|
|
71
|
+
expect(rows.every(row => row.step === 6 && row.z === 0)).toBe(true);
|
|
72
|
+
expect(rows[0]).toEqual({ x: 0, y: 0, z: 0, values: [true, true], step: 6, pairCount: 1, done: false });
|
|
73
|
+
expect(rows.find(row => row.x === 2 && row.y === 1)).toEqual({
|
|
74
|
+
x: 2, y: 1, z: 0, values: [false, true], step: 6, pairCount: 1, done: true,
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
it("axis iterators no-op on empty dimensions", () => {
|
|
78
|
+
const volume = createDense([0, 2, 2], Boolean.schema);
|
|
79
|
+
expect(collectAxisSegments(volume, "x")).toEqual([]);
|
|
80
|
+
expect(collectAxisSegments(volume, "y")).toEqual([]);
|
|
81
|
+
expect(collectAxisSegments(volume, "z")).toEqual([]);
|
|
82
|
+
});
|
|
83
|
+
it("iterateBlocks emits one block in standard dense layout", () => {
|
|
84
|
+
const volume = createDense([2, 3, 1], Boolean.schema);
|
|
85
|
+
volume.set(1, 2, 0, true);
|
|
86
|
+
const blocks = [];
|
|
87
|
+
volume.iterateBlocks((buffer, block, done) => {
|
|
88
|
+
blocks.push({ ...block, done });
|
|
89
|
+
expect(buffer.get(block.offset + getDenseIndex(block.size, 1, 2, 0))).toBe(true);
|
|
90
|
+
});
|
|
91
|
+
expect(blocks).toEqual([{
|
|
92
|
+
origin: [0, 0, 0],
|
|
93
|
+
size: [2, 3, 1],
|
|
94
|
+
offset: 0,
|
|
95
|
+
done: true,
|
|
96
|
+
}]);
|
|
97
|
+
});
|
|
98
|
+
it("iterateBlocks no-ops on empty dimensions", () => {
|
|
99
|
+
const volume = createDense([0, 2, 2], Boolean.schema);
|
|
100
|
+
let count = 0;
|
|
101
|
+
volume.iterateBlocks(() => { count++; });
|
|
102
|
+
expect(count).toBe(0);
|
|
103
|
+
});
|
|
104
|
+
it("round-trips through ECS serialization", () => {
|
|
105
|
+
const original = createDense([3, 2, 2], Boolean.schema);
|
|
106
|
+
original.set(0, 0, 0, true);
|
|
107
|
+
original.set(2, 1, 1, true);
|
|
108
|
+
const payload = serialize({ volume: original });
|
|
109
|
+
const roundTrip = deserialize(payload);
|
|
110
|
+
expect(isDenseVolume(roundTrip.volume)).toBe(true);
|
|
111
|
+
expect(roundTrip.volume.size).toEqual([3, 2, 2]);
|
|
112
|
+
if (isDenseVolume(original) && isDenseVolume(roundTrip.volume)) {
|
|
113
|
+
expect(roundTrip.volume.data.capacity).toBe(12);
|
|
114
|
+
expect(equals(roundTrip.volume.data, original.data)).toBe(true);
|
|
115
|
+
}
|
|
116
|
+
expect(roundTrip.volume.get(0, 0, 0)).toBe(true);
|
|
117
|
+
expect(roundTrip.volume.get(2, 1, 1)).toBe(true);
|
|
118
|
+
expect(roundTrip.volume.get(1, 0, 0)).toBe(false);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
//# sourceMappingURL=create-dense.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-dense.test.js","sourceRoot":"","sources":["../../../../src/types/volume/create-dense/create-dense.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Vec3 } from "../../../math/index.js";
|
|
2
|
+
import type { TypedBuffer } from "../../../typed-buffer/typed-buffer.js";
|
|
3
|
+
import type { Volume } from "../volume.js";
|
|
4
|
+
import type { AxisLineCallback } from "../axis-line-callback.js";
|
|
5
|
+
import type { BlockCallback } from "../block-callback.js";
|
|
6
|
+
export declare class DenseVolume<T> implements Volume<T> {
|
|
7
|
+
#private;
|
|
8
|
+
readonly size: Vec3;
|
|
9
|
+
readonly data: TypedBuffer<T>;
|
|
10
|
+
constructor(size: Vec3, data: TypedBuffer<T>);
|
|
11
|
+
get(x: number, y: number, z: number): T;
|
|
12
|
+
set(x: number, y: number, z: number, value: T): void;
|
|
13
|
+
iterateX(callback: AxisLineCallback<T>): void;
|
|
14
|
+
iterateY(callback: AxisLineCallback<T>): void;
|
|
15
|
+
iterateZ(callback: AxisLineCallback<T>): void;
|
|
16
|
+
iterateBlocks(callback: BlockCallback<T>): void;
|
|
17
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { iterateDenseAxis } from "../iterate-axis.js";
|
|
3
|
+
import { getDenseIndex } from "../get-dense-index.js";
|
|
4
|
+
import { isInBounds } from "../is-in-bounds.js";
|
|
5
|
+
const defaultFromSchema = (schema) => {
|
|
6
|
+
if (!("default" in schema)) {
|
|
7
|
+
throw new Error("DenseVolume schema must include a default value");
|
|
8
|
+
}
|
|
9
|
+
return schema.default;
|
|
10
|
+
};
|
|
11
|
+
export class DenseVolume {
|
|
12
|
+
#defaultValue;
|
|
13
|
+
constructor(size, data) {
|
|
14
|
+
this.#defaultValue = defaultFromSchema(data.schema);
|
|
15
|
+
this.size = size;
|
|
16
|
+
this.data = data;
|
|
17
|
+
}
|
|
18
|
+
get(x, y, z) {
|
|
19
|
+
if (!isInBounds(this.size, x, y, z)) {
|
|
20
|
+
return this.#defaultValue;
|
|
21
|
+
}
|
|
22
|
+
return this.data.get(getDenseIndex(this.size, x, y, z));
|
|
23
|
+
}
|
|
24
|
+
set(x, y, z, value) {
|
|
25
|
+
if (!isInBounds(this.size, x, y, z)) {
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
this.data.set(getDenseIndex(this.size, x, y, z), value);
|
|
29
|
+
}
|
|
30
|
+
iterateX(callback) {
|
|
31
|
+
iterateDenseAxis(this.size, this.data, callback, "x");
|
|
32
|
+
}
|
|
33
|
+
iterateY(callback) {
|
|
34
|
+
iterateDenseAxis(this.size, this.data, callback, "y");
|
|
35
|
+
}
|
|
36
|
+
iterateZ(callback) {
|
|
37
|
+
iterateDenseAxis(this.size, this.data, callback, "z");
|
|
38
|
+
}
|
|
39
|
+
iterateBlocks(callback) {
|
|
40
|
+
const [width, height, depth] = this.size;
|
|
41
|
+
if (width === 0 || height === 0 || depth === 0) {
|
|
42
|
+
return;
|
|
43
|
+
}
|
|
44
|
+
callback(this.data, {
|
|
45
|
+
origin: [0, 0, 0],
|
|
46
|
+
size: this.size,
|
|
47
|
+
offset: 0,
|
|
48
|
+
}, true);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=dense-volume.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dense-volume.js","sourceRoot":"","sources":["../../../../src/types/volume/create-dense/dense-volume.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAQvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AACtD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,iBAAiB,GAAG,CAAI,MAAc,EAAK,EAAE;IAC/C,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,MAAM,CAAC,OAAY,CAAC;AAC/B,CAAC,CAAC;AAEF,MAAM,OAAO,WAAW;IAGX,aAAa,CAAI;IAE1B,YAAY,IAAU,EAAE,IAAoB;QACxC,IAAI,CAAC,aAAa,GAAG,iBAAiB,CAAI,IAAI,CAAC,MAAM,CAAC,CAAC;QACvD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS;QAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAClC,OAAO,IAAI,CAAC,aAAa,CAAC;QAC9B,CAAC;QACD,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED,GAAG,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,KAAQ;QACzC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAClC,OAAO;QACX,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,QAAQ,CAAC,QAA6B;QAClC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAC,QAA6B;QAClC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,QAAQ,CAAC,QAA6B;QAClC,gBAAgB,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;IAC1D,CAAC;IAED,aAAa,CAAC,QAA0B;QACpC,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC;QACzC,IAAI,KAAK,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC,EAAE,CAAC;YAC7C,OAAO;QACX,CAAC;QACD,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE;YAChB,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YACjB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,CAAC;SACZ,EAAE,IAAI,CAAC,CAAC;IACb,CAAC;CACJ"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"is-dense-volume.js","sourceRoot":"","sources":["../../../../src/types/volume/create-dense/is-dense-volume.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,KAAc,EAAiC,EAAE,CAC3E,KAAK,YAAY,WAAW,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const registerDenseVolumeCodecs: () => void;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { getCodec, registerCodec } from "../../../functions/serialization/codec.js";
|
|
3
|
+
import { DenseVolume } from "./dense-volume.js";
|
|
4
|
+
import { isDenseVolume } from "./is-dense-volume.js";
|
|
5
|
+
export const registerDenseVolumeCodecs = () => {
|
|
6
|
+
registerCodec({
|
|
7
|
+
name: "dense-volume",
|
|
8
|
+
predicate: isDenseVolume,
|
|
9
|
+
serialize: (volume) => {
|
|
10
|
+
const bufferCodec = getCodec("typed-buffer");
|
|
11
|
+
if (!bufferCodec) {
|
|
12
|
+
throw new Error("typed-buffer codec is not registered");
|
|
13
|
+
}
|
|
14
|
+
const bufferPayload = bufferCodec.serialize(volume.data);
|
|
15
|
+
return {
|
|
16
|
+
json: {
|
|
17
|
+
size: volume.size,
|
|
18
|
+
data: bufferPayload.json,
|
|
19
|
+
},
|
|
20
|
+
binary: bufferPayload.binary,
|
|
21
|
+
};
|
|
22
|
+
},
|
|
23
|
+
deserialize: ({ json, binary }) => {
|
|
24
|
+
const bufferCodec = getCodec("typed-buffer");
|
|
25
|
+
if (!bufferCodec) {
|
|
26
|
+
throw new Error("typed-buffer codec is not registered");
|
|
27
|
+
}
|
|
28
|
+
const data = bufferCodec.deserialize({ json: json.data, binary });
|
|
29
|
+
return new DenseVolume(json.size, data);
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
};
|
|
33
|
+
//# sourceMappingURL=register-dense-volume-codecs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register-dense-volume-codecs.js","sourceRoot":"","sources":["../../../../src/types/volume/create-dense/register-dense-volume-codecs.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,2CAA2C,CAAC;AACpF,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,MAAM,CAAC,MAAM,yBAAyB,GAAG,GAAS,EAAE;IAChD,aAAa,CAAuB;QAChC,IAAI,EAAE,cAAc;QACpB,SAAS,EAAE,aAAa;QACxB,SAAS,EAAE,CAAC,MAAM,EAAE,EAAE;YAClB,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,aAAa,GAAG,WAAW,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACzD,OAAO;gBACH,IAAI,EAAE;oBACF,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,IAAI,EAAE,aAAa,CAAC,IAAI;iBAC3B;gBACD,MAAM,EAAE,aAAa,CAAC,MAAM;aAC/B,CAAC;QACN,CAAC;QACD,WAAW,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE;YAC9B,MAAM,WAAW,GAAG,QAAQ,CAAC,cAAc,CAAC,CAAC;YAC7C,IAAI,CAAC,WAAW,EAAE,CAAC;gBACf,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;YAC5D,CAAC;YACD,MAAM,IAAI,GAAG,WAAW,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;YAClE,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,CAAC;KACJ,CAAC,CAAC;AACP,CAAC,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { Vec3 } from "../../../math/index.js";
|
|
2
|
+
import type { IterateAxis } from "../iterate-axis.js";
|
|
3
|
+
export interface AxisIterateLayout {
|
|
4
|
+
readonly step: number;
|
|
5
|
+
readonly blockPlane: number;
|
|
6
|
+
readonly segmentLength: number;
|
|
7
|
+
readonly innerA: number;
|
|
8
|
+
readonly groupKey: (bx: number, by: number, bz: number) => number;
|
|
9
|
+
readonly vary: (bx: number, by: number, bz: number) => number;
|
|
10
|
+
readonly segmentOffset: (offset: number, la: number, lb: number) => number;
|
|
11
|
+
readonly writeOrigin: (bx: number, by: number, bz: number, la: number, lb: number, origins: number[], stepIndex: number) => void;
|
|
12
|
+
}
|
|
13
|
+
export interface BlockDims {
|
|
14
|
+
readonly size: Vec3;
|
|
15
|
+
readonly sx: number;
|
|
16
|
+
readonly sy: number;
|
|
17
|
+
readonly sz: number;
|
|
18
|
+
readonly shiftX: number;
|
|
19
|
+
readonly shiftY: number;
|
|
20
|
+
readonly shiftZ: number;
|
|
21
|
+
readonly volume: number;
|
|
22
|
+
readonly planeYZ: number;
|
|
23
|
+
readonly planeXZ: number;
|
|
24
|
+
readonly planeXY: number;
|
|
25
|
+
readonly strideY: number;
|
|
26
|
+
readonly strideZ: number;
|
|
27
|
+
readonly keyFromWorld: (x: number, y: number, z: number) => number;
|
|
28
|
+
readonly indexFromWorld: (x: number, y: number, z: number, blockOffset: number) => number;
|
|
29
|
+
readonly decodeKey: (key: number) => readonly [bx: number, by: number, bz: number];
|
|
30
|
+
readonly iterate: Record<IterateAxis, AxisIterateLayout>;
|
|
31
|
+
}
|
|
32
|
+
export declare const normalizeBlockSize: (blockSize: number | Vec3) => Vec3;
|
|
33
|
+
export declare const createBlockDims: (size: number | Vec3) => BlockDims;
|
|
34
|
+
export declare const blockCoord: (coordinate: number, shift: number) => number;
|
|
35
|
+
export declare const localCoord: (coordinate: number, blockSize: number, shift: number) => number;
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { createIndexFromWorld, createKeyFromWorld, decodeBlockKeyInline, packPlaneKeyInline, } from "./block-key.js";
|
|
3
|
+
export const normalizeBlockSize = (blockSize) => typeof blockSize === "number" ? [blockSize, blockSize, blockSize] : blockSize;
|
|
4
|
+
const axisShift = (size, axis) => {
|
|
5
|
+
const shift = Math.log2(size);
|
|
6
|
+
if (!Number.isInteger(shift) || shift < 0) {
|
|
7
|
+
throw new Error(`SparseBlockVolume block size ${axis} must be a power of two`);
|
|
8
|
+
}
|
|
9
|
+
return shift;
|
|
10
|
+
};
|
|
11
|
+
const createIterateLayouts = (sx, sy, sz, shiftX, shiftY, shiftZ, strideY, strideZ, planeYZ, planeXZ, planeXY) => ({
|
|
12
|
+
x: {
|
|
13
|
+
step: 1,
|
|
14
|
+
blockPlane: planeYZ,
|
|
15
|
+
segmentLength: sx,
|
|
16
|
+
innerA: sy,
|
|
17
|
+
groupKey: (_bx, by, bz) => packPlaneKeyInline(bz, by),
|
|
18
|
+
vary: (bx) => bx,
|
|
19
|
+
segmentOffset: (offset, ly, lz) => offset + ly * sx + lz * strideZ,
|
|
20
|
+
writeOrigin: (bx, by, bz, la, lb, origins, stepIndex) => {
|
|
21
|
+
const base = stepIndex * 3;
|
|
22
|
+
origins[base] = bx << shiftX;
|
|
23
|
+
origins[base + 1] = (by << shiftY) + la;
|
|
24
|
+
origins[base + 2] = (bz << shiftZ) + lb;
|
|
25
|
+
},
|
|
26
|
+
},
|
|
27
|
+
y: {
|
|
28
|
+
step: sx,
|
|
29
|
+
blockPlane: planeXZ,
|
|
30
|
+
segmentLength: sy,
|
|
31
|
+
innerA: sx,
|
|
32
|
+
groupKey: (bx, _by, bz) => packPlaneKeyInline(bz, bx),
|
|
33
|
+
vary: (_bx, by) => by,
|
|
34
|
+
segmentOffset: (offset, lx, lz) => offset + lx + lz * strideZ,
|
|
35
|
+
writeOrigin: (bx, by, bz, la, lb, origins, stepIndex) => {
|
|
36
|
+
const base = stepIndex * 3;
|
|
37
|
+
origins[base] = (bx << shiftX) + la;
|
|
38
|
+
origins[base + 1] = by << shiftY;
|
|
39
|
+
origins[base + 2] = (bz << shiftZ) + lb;
|
|
40
|
+
},
|
|
41
|
+
},
|
|
42
|
+
z: {
|
|
43
|
+
step: strideZ,
|
|
44
|
+
blockPlane: planeXY,
|
|
45
|
+
segmentLength: sz,
|
|
46
|
+
innerA: sx,
|
|
47
|
+
groupKey: (bx, by) => packPlaneKeyInline(by, bx),
|
|
48
|
+
vary: (_bx, _by, bz) => bz,
|
|
49
|
+
segmentOffset: (offset, lx, ly) => offset + lx + ly * sx,
|
|
50
|
+
writeOrigin: (bx, by, bz, la, lb, origins, stepIndex) => {
|
|
51
|
+
const base = stepIndex * 3;
|
|
52
|
+
origins[base] = (bx << shiftX) + la;
|
|
53
|
+
origins[base + 1] = (by << shiftY) + lb;
|
|
54
|
+
origins[base + 2] = bz << shiftZ;
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
export const createBlockDims = (size) => {
|
|
59
|
+
const [sx, sy, sz] = normalizeBlockSize(size);
|
|
60
|
+
if (sx < 1 || sy < 1 || sz < 1) {
|
|
61
|
+
throw new Error("SparseBlockVolume block sizes must be positive");
|
|
62
|
+
}
|
|
63
|
+
const shiftX = axisShift(sx, "x");
|
|
64
|
+
const shiftY = axisShift(sy, "y");
|
|
65
|
+
const shiftZ = axisShift(sz, "z");
|
|
66
|
+
const strideY = sx;
|
|
67
|
+
const strideZ = sx * sy;
|
|
68
|
+
const planeYZ = sy * sz;
|
|
69
|
+
const planeXZ = sx * sz;
|
|
70
|
+
const planeXY = sx * sy;
|
|
71
|
+
return {
|
|
72
|
+
size: [sx, sy, sz],
|
|
73
|
+
sx,
|
|
74
|
+
sy,
|
|
75
|
+
sz,
|
|
76
|
+
shiftX,
|
|
77
|
+
shiftY,
|
|
78
|
+
shiftZ,
|
|
79
|
+
volume: sx * sy * sz,
|
|
80
|
+
planeYZ,
|
|
81
|
+
planeXZ,
|
|
82
|
+
planeXY,
|
|
83
|
+
strideY,
|
|
84
|
+
strideZ,
|
|
85
|
+
keyFromWorld: createKeyFromWorld(shiftX, shiftY, shiftZ),
|
|
86
|
+
indexFromWorld: createIndexFromWorld(sx, sy, sz, shiftX, shiftY, shiftZ, strideY),
|
|
87
|
+
decodeKey: decodeBlockKeyInline,
|
|
88
|
+
iterate: createIterateLayouts(sx, sy, sz, shiftX, shiftY, shiftZ, strideY, strideZ, planeYZ, planeXZ, planeXY),
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
export const blockCoord = (coordinate, shift) => coordinate >> shift;
|
|
92
|
+
export const localCoord = (coordinate, blockSize, shift) => coordinate - (coordinate >> shift) * blockSize;
|
|
93
|
+
//# sourceMappingURL=block-dims.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-dims.js","sourceRoot":"","sources":["../../../../src/types/volume/create-sparse-block/block-dims.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const axisRange: number;
|
|
2
|
+
export declare const axisBias: number;
|
|
3
|
+
export declare const encodeAxis: (coordinate: number) => number;
|
|
4
|
+
export declare const decodeAxis: (encoded: number) => number;
|
|
5
|
+
export declare const packBlockKeyInline: (bx: number, by: number, bz: number) => number;
|
|
6
|
+
export declare const packPlaneKeyInline: (outer: number, inner: number) => number;
|
|
7
|
+
export declare const decodeBlockKeyInline: (key: number) => readonly [bx: number, by: number, bz: number];
|
|
8
|
+
export declare const createKeyFromWorld: (shiftX: number, shiftY: number, shiftZ: number) => (x: number, y: number, z: number) => number;
|
|
9
|
+
export declare const createIndexFromWorld: (sx: number, sy: number, sz: number, shiftX: number, shiftY: number, shiftZ: number, strideY: number) => (x: number, y: number, z: number, blockOffset: number) => number;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
const bitsPerAxis = Math.floor(Math.log2(Number.MAX_SAFE_INTEGER + 1) / 3);
|
|
3
|
+
export const axisRange = 2 ** bitsPerAxis;
|
|
4
|
+
const axisRangeSq = axisRange * axisRange;
|
|
5
|
+
export const axisBias = 2 ** (bitsPerAxis - 1);
|
|
6
|
+
export const encodeAxis = (coordinate) => coordinate + axisBias;
|
|
7
|
+
export const decodeAxis = (encoded) => encoded - axisBias;
|
|
8
|
+
export const packBlockKeyInline = (bx, by, bz) => encodeAxis(bx) + encodeAxis(by) * axisRange + encodeAxis(bz) * axisRangeSq;
|
|
9
|
+
export const packPlaneKeyInline = (outer, inner) => encodeAxis(outer) * axisRange + encodeAxis(inner);
|
|
10
|
+
export const decodeBlockKeyInline = (key) => {
|
|
11
|
+
const bx = decodeAxis(key % axisRange);
|
|
12
|
+
const by = decodeAxis(((key / axisRange) | 0) % axisRange);
|
|
13
|
+
const bz = decodeAxis(((key / axisRangeSq) | 0) % axisRange);
|
|
14
|
+
return [bx, by, bz];
|
|
15
|
+
};
|
|
16
|
+
export const createKeyFromWorld = (shiftX, shiftY, shiftZ) => (x, y, z) => packBlockKeyInline(x >> shiftX, y >> shiftY, z >> shiftZ);
|
|
17
|
+
export const createIndexFromWorld = (sx, sy, sz, shiftX, shiftY, shiftZ, strideY) => (x, y, z, blockOffset) => {
|
|
18
|
+
const lx = x - (x >> shiftX) * sx;
|
|
19
|
+
const ly = y - (y >> shiftY) * sy;
|
|
20
|
+
const lz = z - (z >> shiftZ) * sz;
|
|
21
|
+
return blockOffset + lx + strideY * (ly + sy * lz);
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=block-key.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"block-key.js","sourceRoot":"","sources":["../../../../src/types/volume/create-sparse-block/block-key.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,gBAAgB,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AAC3E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,IAAI,WAAW,CAAC;AAC1C,MAAM,WAAW,GAAG,SAAS,GAAG,SAAS,CAAC;AAC1C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;AAE/C,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,UAAkB,EAAU,EAAE,CAAC,UAAU,GAAG,QAAQ,CAAC;AAEhF,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,OAAe,EAAU,EAAE,CAAC,OAAO,GAAG,QAAQ,CAAC;AAE1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAU,EAAE,CAC7E,UAAU,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC;AAE/E,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,KAAa,EAAE,KAAa,EAAU,EAAE,CACvE,UAAU,CAAC,KAAK,CAAC,GAAG,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAEtD,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,GAAW,EACkC,EAAE;IAC/C,MAAM,EAAE,GAAG,UAAU,CAAC,GAAG,GAAG,SAAS,CAAC,CAAC;IACvC,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC3D,MAAM,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,GAAG,SAAS,CAAC,CAAC;IAC7D,OAAO,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAU,CAAC;AACjC,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAC9B,MAAc,EACd,MAAc,EACd,MAAc,EAC6B,EAAE,CAC7C,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,MAAM,EAAE,CAAC,IAAI,MAAM,CAAC,CAAC;AAE3E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAChC,EAAU,EACV,EAAU,EACV,EAAU,EACV,MAAc,EACd,MAAc,EACd,MAAc,EACd,OAAe,EACiD,EAAE,CAClE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,EAAE,EAAE;IACrB,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;IAClC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;IAClC,OAAO,WAAW,GAAG,EAAE,GAAG,OAAO,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACvD,CAAC,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { Vec3 } from "../../../math/index.js";
|
|
2
|
+
import type { Schema } from "../../../schema/index.js";
|
|
3
|
+
import type { Volume } from "../volume.js";
|
|
4
|
+
export declare const createSparseBlock: <S extends Schema & {
|
|
5
|
+
default: Schema.ToType<S>;
|
|
6
|
+
}>(schema: S, blockSize?: number | Vec3) => Volume<Schema.ToType<S>>;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// © 2026 Adobe. MIT License. See /LICENSE for details.
|
|
2
|
+
import { createTypedBuffer } from "../../../typed-buffer/create-typed-buffer.js";
|
|
3
|
+
import { normalizeBlockSize } from "./block-dims.js";
|
|
4
|
+
import { SparseBlockVolume } from "./sparse-block-volume.js";
|
|
5
|
+
export const createSparseBlock = (schema, blockSize = 16) => {
|
|
6
|
+
const data = createTypedBuffer(schema, 0);
|
|
7
|
+
return new SparseBlockVolume(normalizeBlockSize(blockSize), data);
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=create-sparse-block.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-sparse-block.js","sourceRoot":"","sources":["../../../../src/types/volume/create-sparse-block/create-sparse-block.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAIvD,OAAO,EAAE,iBAAiB,EAAE,MAAM,8CAA8C,CAAC;AAEjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAE7D,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAC7B,MAAS,EACT,YAA2B,EAAE,EACL,EAAE;IAC1B,MAAM,IAAI,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAC1C,OAAO,IAAI,iBAAiB,CAAC,kBAAkB,CAAC,SAAS,CAAC,EAAE,IAAI,CAAC,CAAC;AACtE,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|