@bldrs-ai/conway 1.502.1421 → 1.509.1435

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.
Files changed (37) hide show
  1. package/compiled/Dist/ConwayGeomWasmNode.js +0 -0
  2. package/compiled/Dist/ConwayGeomWasmNodeMT.js +0 -0
  3. package/compiled/Dist/ConwayGeomWasmWeb.js +0 -0
  4. package/compiled/Dist/ConwayGeomWasmWebMT.js +1 -1
  5. package/compiled/Dist/ConwayGeomWasmWebMT.wasm +0 -0
  6. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmNode.js +0 -0
  7. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmNodeMT.js +0 -0
  8. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWeb.js +0 -0
  9. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWebMT.js +1 -1
  10. package/compiled/dependencies/conway-geom/Dist/ConwayGeomWasmWebMT.wasm +0 -0
  11. package/compiled/dependencies/conway-geom/interface/conway_geometry.d.ts +19 -0
  12. package/compiled/dependencies/conway-geom/interface/conway_geometry.d.ts.map +1 -1
  13. package/compiled/dependencies/conway-geom/interface/conway_geometry.js +17 -0
  14. package/compiled/examples/browser-bundled.cjs +132 -21
  15. package/compiled/examples/cli-bundled.cjs +189 -57
  16. package/compiled/examples/cli-step-bundled.cjs +156 -28
  17. package/compiled/examples/validator-bundled.cjs +132 -21
  18. package/compiled/src/compat/web-ifc/coordination_export_order.test.d.ts +2 -0
  19. package/compiled/src/compat/web-ifc/coordination_export_order.test.d.ts.map +1 -0
  20. package/compiled/src/compat/web-ifc/coordination_export_order.test.js +110 -0
  21. package/compiled/src/compat/web-ifc/coordination_f64.d.ts +60 -1
  22. package/compiled/src/compat/web-ifc/coordination_f64.d.ts.map +1 -1
  23. package/compiled/src/compat/web-ifc/coordination_f64.js +103 -8
  24. package/compiled/src/compat/web-ifc/coordination_f64.test.js +115 -30
  25. package/compiled/src/ifc/ifc_geometry_extraction.d.ts +0 -1
  26. package/compiled/src/ifc/ifc_geometry_extraction.d.ts.map +1 -1
  27. package/compiled/src/ifc/ifc_geometry_extraction.js +34 -44
  28. package/compiled/src/step/parsing/uint32_sink.d.ts +20 -0
  29. package/compiled/src/step/parsing/uint32_sink.d.ts.map +1 -1
  30. package/compiled/src/step/parsing/uint32_sink.js +95 -0
  31. package/compiled/src/step/parsing/uint32_sink.test.js +41 -1
  32. package/compiled/src/step/step_model_base.d.ts +32 -13
  33. package/compiled/src/step/step_model_base.d.ts.map +1 -1
  34. package/compiled/src/step/step_model_base.js +64 -24
  35. package/compiled/src/version/version.js +1 -1
  36. package/compiled/tsconfig.tsbuildinfo +1 -1
  37. package/package.json +1 -1
@@ -1,7 +1,7 @@
1
1
  /* eslint-disable no-magic-numbers */
2
2
  import { describe, expect, test } from "@jest/globals";
3
3
  import * as glmatrix from "gl-matrix";
4
- import { composeTransformF64, deriveCoordinationF64, mat4MultiplyF64, } from "./coordination_f64.js";
4
+ import { COORDINATION_SNAP_M, LARGE_COORDINATE_BUDGET_M, TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z, composeTransformF64, deriveCoordinationF64, mat4MultiplyF64, } from "./coordination_f64.js";
5
5
  // The Z-up -> Y-up normalize matrix the proxies pass in (column-major).
6
6
  const NORMALIZE_MAT = [
7
7
  1,
@@ -51,36 +51,121 @@ describe("coordination_f64", () => {
51
51
  }
52
52
  }
53
53
  });
54
- test("recentres a LV95-magnitude reference exactly where float32 mis-lands it", () => {
55
- // The georeferencing jitter mechanism: the recentre translation
56
- // negates a reference point at Swiss LV95 magnitude (~2.6M easting).
57
- // Stored in a Float32Array it quantizes to the ~0.31 m grid (float32
58
- // ULP at 2.6M), so the reference lands cm-to-dm off the origin — a
59
- // per-model positional error baked into every emitted transform. The
60
- // float64 recentre lands it exactly.
61
- const identity = glmatrix.mat4.create(); // placement; world via the point
54
+ test("below the budget every anchor derives model-zero (export-order independence)", () => {
55
+ // The Share#1749 shape: two exports of one object disagree about
56
+ // which element comes first, so the walk anchors on points 76m
57
+ // apart. Both must derive the same frame, or the two files render
58
+ // 76m apart and no camera permalink spans them.
59
+ const identity = glmatrix.mat4.create();
60
+ const first = deriveCoordinationF64(identity, { x: 76, y: -11.4504049888, z: 0 }, NORMALIZE_MAT, 1);
61
+ const second = deriveCoordinationF64(identity, { x: 0, y: -11.4504049888, z: 0 }, NORMALIZE_MAT, 1);
62
+ expect(second).toEqual(first);
63
+ // Model-zero (conway#87): the frame is the bare Y-up normalize and
64
+ // the model keeps the coordinates its file authored.
65
+ expect(first[TRANSLATION_X]).toBe(0);
66
+ expect(first[TRANSLATION_Y]).toBe(0);
67
+ expect(first[TRANSLATION_Z]).toBe(0);
68
+ });
69
+ test("anchors either side of a grid line below the budget still agree", () => {
70
+ // Why the recentre is staged rather than snapped everywhere: a
71
+ // straight snap turns a small anchor disagreement into a full-cell
72
+ // one. A site-grid model at x ~ 500m whose preview channel anchors
73
+ // at 480 and whose durable walk anchors at 520 would derive frames
74
+ // 1km apart — and the adopted-frame gate only re-derives past
75
+ // LARGE_COORDINATE_BUDGET_M, so it would keep the wrong one and
76
+ // render 1km off a classic open. Below the budget both are zero.
77
+ const identity = glmatrix.mat4.create();
78
+ const below = deriveCoordinationF64(identity, { x: 480, y: 0, z: 0 }, NORMALIZE_MAT, 1);
79
+ const above = deriveCoordinationF64(identity, { x: 520, y: 0, z: 0 }, NORMALIZE_MAT, 1);
80
+ expect(above).toEqual(below);
81
+ expect(below[TRANSLATION_X]).toBe(0);
82
+ });
83
+ test("recentres only once past the budget, on the same metre grid whatever the source unit", () => {
84
+ // Same object, one file in metres and one in millimetres: the
85
+ // millimetre file's anchor is 1000x larger and its scaleFactor
86
+ // 1000x smaller, so both must land on the same metre frame.
87
+ const identity = glmatrix.mat4.create();
88
+ const metres = deriveCoordinationF64(identity, { x: 2600076, y: 412, z: 0 }, NORMALIZE_MAT, 1);
89
+ const millimetres = deriveCoordinationF64(identity, { x: 2600076000, y: 412000, z: 0 }, NORMALIZE_MAT, 0.001);
90
+ for (const i of [TRANSLATION_X, TRANSLATION_Y, TRANSLATION_Z]) {
91
+ expect(millimetres[i]).toBeCloseTo(metres[i], 6);
92
+ }
93
+ expect(metres[TRANSLATION_X]).toBe(-2600000);
94
+ });
95
+ test("keeps a georeferenced model inside the recentre budget", () => {
96
+ // Above the budget the recentre engages and snapping trades
97
+ // exactness for order-independence. Once engaged every component is
98
+ // snapped, so each keeps at most half a cell and the anchor lands
99
+ // within half a cell in each axis — measured as a distance so the
100
+ // bound is a property of the anchor, like the stage decision itself.
101
+ // The outer bound that matters is LARGE_COORDINATE_BUDGET_M, the
102
+ // threshold above which a frame counts as not having recentred.
103
+ const identity = glmatrix.mat4.create();
104
+ const ref = { x: 2600000.31, y: 1200000.17, z: 412.5 };
105
+ const coord = deriveCoordinationF64(identity, ref, NORMALIZE_MAT, 1);
106
+ // NORMALIZE_MAT is Z-up -> Y-up, so the source y/z components land in
107
+ // the frame's z/y translation slots.
108
+ const residual = Math.hypot(ref.x + coord[TRANSLATION_X], ref.z + coord[TRANSLATION_Y], ref.y - coord[TRANSLATION_Z]);
109
+ // sqrt(3) half-cells is the true worst case; assert both it and the
110
+ // budget so a future edit that widens either is caught.
111
+ expect(residual).toBeLessThanOrEqual(COORDINATION_SNAP_M);
112
+ expect(residual).toBeLessThan(LARGE_COORDINATE_BUDGET_M);
113
+ });
114
+ test("recentres a model whose offset is spread across axes", () => {
115
+ // The stage decision is the anchor's distance from the origin, not
116
+ // any one component: (9km, 9km, 9km) is 15.6km out — past the budget
117
+ // — while no single component crosses it. Deciding per component
118
+ // would leave this model in file coordinates and quietly undo the
119
+ // float32 jitter fix the budget exists to enforce.
120
+ const identity = glmatrix.mat4.create();
121
+ const coord = deriveCoordinationF64(identity, { x: 9000, y: 9000, z: 9000 }, NORMALIZE_MAT, 1);
122
+ const residual = Math.hypot(9000 + coord[TRANSLATION_X], 9000 + coord[TRANSLATION_Y], 9000 - coord[TRANSLATION_Z]);
123
+ expect(coord[TRANSLATION_X]).not.toBe(0);
124
+ expect(residual).toBeLessThan(LARGE_COORDINATE_BUDGET_M);
125
+ });
126
+ test("places a LV95-magnitude element exactly where float32 mis-lands it", () => {
127
+ // The georeferencing jitter mechanism (Share#1631): an element placed
128
+ // at Swiss LV95 magnitude (~2.6M easting) is composed against the
129
+ // recentre frame, and float32 ULP at 2.6M is ~0.31m. Run through
130
+ // gl-matrix's Float32Array that composition quantizes, and the
131
+ // element lands cm-to-dm from where the frame says — a positional
132
+ // error baked into every emitted transform. The float64 path lands it
133
+ // exactly.
134
+ //
135
+ // Note the frame's own translation is now snapped to whole kilometres
136
+ // (COORDINATION_SNAP_M), which happens to be exactly representable in
137
+ // float32 — so the loss this pins is in the composition against the
138
+ // element's full-precision placement, which is where it always
139
+ // mattered: that product is what becomes the FlatMesh transform.
62
140
  const ref = { x: 2600000.31, y: 1200000.17, z: 412.5 };
63
- /**
64
- * Apply a column-major 4x4 to a point.
65
- *
66
- * @param m 16-element matrix.
67
- * @param p The point.
68
- * @return {number} The transformed point's distance from origin.
69
- */
70
- const originDist = (m) => Math.hypot(m[0] * ref.x + m[4] * ref.y + m[8] * ref.z + m[12], m[1] * ref.x + m[5] * ref.y + m[9] * ref.z + m[13], m[2] * ref.x + m[6] * ref.y + m[10] * ref.z + m[14]);
71
- // float64 recentre (the fix).
72
- const distF64 = originDist(deriveCoordinationF64(identity, ref, NORMALIZE_MAT, 1));
73
- // Old float32 gl-matrix recentre: the translation is stored in a
74
- // Float32Array, quantizing the -2.6M component.
75
- const tp = glmatrix.vec4.create();
76
- glmatrix.vec4.transformMat4(tp, [ref.x, ref.y, ref.z, 1], identity);
77
- const coordF32 = glmatrix.mat4.create();
78
- glmatrix.mat4.fromTranslation(coordF32, [-tp[0], -tp[1], -tp[2]]);
79
- glmatrix.mat4.multiply(coordF32, NORMALIZE_MAT, coordF32);
80
- const distF32 = originDist(coordF32);
81
- // float64 lands sub-micron; float32 is off by cm+.
82
- expect(distF64).toBeLessThan(0.000001);
83
- expect(distF32).toBeGreaterThan(0.01);
141
+ const frame = deriveCoordinationF64(glmatrix.mat4.create(), ref, NORMALIZE_MAT, 1);
142
+ // An element sitting on that reference point.
143
+ const placement = glmatrix.mat4.create();
144
+ glmatrix.mat4.identity(placement);
145
+ const placementF64 = Array.from(placement);
146
+ placementF64[TRANSLATION_X] = ref.x;
147
+ placementF64[TRANSLATION_Y] = ref.y;
148
+ placementF64[TRANSLATION_Z] = ref.z;
149
+ // Where it must land: the within-cell remainder of every component.
150
+ // The stage decision is made once on the whole anchor, and this one
151
+ // is far past the budget, so all three components snap — including
152
+ // z=412.5, whose nearest grid multiple is 0 and which therefore
153
+ // keeps its full value. (A per-component budget test would leave z
154
+ // untouched for a different reason and agree here by coincidence;
155
+ // this mirrors what quantizeRecentre actually does.)
156
+ const rem = (v) => v - Math.round(v / COORDINATION_SNAP_M) * COORDINATION_SNAP_M;
157
+ const expected = [rem(ref.x), rem(ref.z), -rem(ref.y)];
158
+ const f64 = composeTransformF64(frame, placementF64);
159
+ // The old path's loss: the placement crosses the wasm boundary as a
160
+ // glm::dmat4 but was rebuilt with gl-matrix `mat4.fromValues`, i.e.
161
+ // stored in a Float32Array — quantizing its 2.6M component to the
162
+ // ~0.31m float32 grid before anything is composed. Snapping the frame
163
+ // does not rescue that; only keeping the placement in float64 does.
164
+ const f32 = composeTransformF64(frame, new Float32Array(placementF64));
165
+ const errF64 = Math.max(Math.abs(f64[TRANSLATION_X] - expected[0]), Math.abs(f64[TRANSLATION_Y] - expected[1]), Math.abs(f64[TRANSLATION_Z] - expected[2]));
166
+ const errF32 = Math.max(Math.abs(f32[TRANSLATION_X] - expected[0]), Math.abs(f32[TRANSLATION_Y] - expected[1]), Math.abs(f32[TRANSLATION_Z] - expected[2]));
167
+ expect(errF64).toBeLessThan(0.000001);
168
+ expect(errF32).toBeGreaterThan(0.01);
84
169
  });
85
170
  test("near origin float64 and float32 agree (fixtures unaffected)", () => {
86
171
  const placement = pseudoMat(99);
@@ -315,7 +315,6 @@ export declare class IfcGeometryExtraction {
315
315
  * @param entity The faceset.
316
316
  * @param temporary Is this a temporary (preview//operand) extraction?
317
317
  * @param isRelVoid Is this geometry a rel-void operand?
318
- * @param indicesPerFace Index count of the last face processed.
319
318
  * @param allIndices Face indices, concatenated.
320
319
  * @param allStartIndices Per-face start indices.
321
320
  * @param polygonalFaceBufferOffsets Per-face offsets into allIndices.
@@ -1 +1 @@
1
- {"version":3,"file":"ifc_geometry_extraction.d.ts","sourceRoot":"","sources":["../../../src/ifc/ifc_geometry_extraction.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ifc_geometry_extraction.d.ts","sourceRoot":"","sources":["../../../src/ifc/ifc_geometry_extraction.ts"],"names":[],"mappings":"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"}
@@ -566,14 +566,13 @@ export class IfcGeometryExtraction {
566
566
  * @param entity The faceset.
567
567
  * @param temporary Is this a temporary (preview//operand) extraction?
568
568
  * @param isRelVoid Is this geometry a rel-void operand?
569
- * @param indicesPerFace Index count of the last face processed.
570
569
  * @param allIndices Face indices, concatenated.
571
570
  * @param allStartIndices Per-face start indices.
572
571
  * @param polygonalFaceBufferOffsets Per-face offsets into allIndices.
573
572
  * @param startIndicesBufferOffsets Per-face offsets into allStartIndices.
574
573
  * @return {ExtractResult} The extraction result.
575
574
  */
576
- finishPolygonalFaceSet_(entity, temporary, isRelVoid, indicesPerFace, allIndices, allStartIndices, polygonalFaceBufferOffsets, startIndicesBufferOffsets) {
575
+ finishPolygonalFaceSet_(entity, temporary, isRelVoid, allIndices, allStartIndices, polygonalFaceBufferOffsets, startIndicesBufferOffsets) {
577
576
  // Add the final entry
578
577
  polygonalFaceBufferOffsets.push(allIndices.length);
579
578
  startIndicesBufferOffsets.push(allStartIndices.length);
@@ -591,41 +590,29 @@ export class IfcGeometryExtraction {
591
590
  polygonalFaceBufferOffsetsArray,
592
591
  startIndicesBufferOffsetsArray,
593
592
  ]);
594
- // Each acquisition is paired with its release through withRelease, which
595
- // propagates a release failure on the success path and suppresses it only
596
- // while something is already being unwound. Per-record extraction errors
597
- // are caught upstream and expected on malformed models, so anything in
598
- // here throwing used to strand all four pointers plus the pooled parse
599
- // buffer and the two native objects, once per faceset - on a model with
600
- // 15,777 facesets, a leak large enough to cause the exhaustion it would
601
- // then be blamed on.
602
- //
603
- // Suppressing during unwinding matters as much as the release itself:
604
- // every one of these re-enters the wasm runtime, and if that runtime is
605
- // what failed, a throw here would REPLACE the in-flight error and the
606
- // catch upstream would log a generic teardown failure instead of the heap
607
- // diagnostic this change exists to produce.
593
+ // A throw here used to strand all four heap pointers plus the pooled
594
+ // parse buffer, once per faceset (15,777 on PSB — a leak large enough
595
+ // to cause the exhaustion it would then be blamed on). withRelease
596
+ // reclaims them; it suppresses a release failure only while something
597
+ // is already unwinding, so a wasm-runtime fault is not replaced by a
598
+ // generic teardown error in the per-record catch upstream.
608
599
  const geometry = withRelease(() => {
609
- const polygonalFaceVector = this.wasmModule.buildIndexedPolygonalFaceVector(indicesArrayPtr, indicesArray.length, startIndicesArrayPtr, polygonalFaceBufferOffsetsArrayPtr, polygonalFaceBufferOffsetsArray.length, startIndicesBufferOffsetsArrayPtr, startIndicesBufferOffsetsArray.length);
610
- return withRelease(() => {
611
- const pointsParseBuffer = this.conwayModel.nativeParseBuffer();
612
- // Released around parseVertexVector too, not just the extract:
613
- // it is pooled, so leaking it also loses whatever resize() grew.
614
- const pointsArrayNative = withRelease(() => {
615
- if (!entity.Coordinates.extractParseBuffer(0, 0, 0, pointsParseBuffer, this.wasmModule, true)) {
616
- pointsParseBuffer.resize(0);
617
- }
618
- return this.wasmModule.parseVertexVector(pointsParseBuffer);
619
- }, () => this.conwayModel.freeParseBuffer(pointsParseBuffer));
620
- return withRelease(() => this.conwayModel.getPolygonalFaceSetGeometry({
621
- indicesPerFace: indicesPerFace,
622
- points: pointsArrayNative,
623
- faces: polygonalFaceVector,
624
- }), () => pointsArrayNative.delete());
625
- }, () => polygonalFaceVector.delete());
600
+ const pointsParseBuffer = this.conwayModel.nativeParseBuffer();
601
+ // Packed triangulation: the four heap buffers are already the
602
+ // face index layout. Unpacking them into 9.1M IndexedPolygonalFace
603
+ // std::vectors was the rest of the PSB pump after #448, and is
604
+ // why feeding the ThreadPool lost (the pool was paying to copy
605
+ // those vectors).
606
+ const pointsArrayNative = withRelease(() => {
607
+ if (!entity.Coordinates.extractParseBuffer(0, 0, 0, pointsParseBuffer, this.wasmModule, true)) {
608
+ pointsParseBuffer.resize(0);
609
+ }
610
+ return this.wasmModule.parseVertexVector(pointsParseBuffer);
611
+ }, () => this.conwayModel.freeParseBuffer(pointsParseBuffer));
612
+ return withRelease(() => this.conwayModel.getPolygonalFaceSetGeometryPacked(pointsArrayNative, indicesArrayPtr, polygonalFaceBufferOffsetsArrayPtr, polygonalFaceBufferOffsetsArray.length, startIndicesArrayPtr, startIndicesBufferOffsetsArrayPtr), () => pointsArrayNative.delete());
626
613
  },
627
- // freeAll, not four statements in one closure: there the first failure
628
- // would abandon the other three.
614
+ // freeAll, not four statements in one closure: there the first
615
+ // failure would abandon the other three.
629
616
  () => freeAll(this.wasmModule, [
630
617
  indicesArrayPtr,
631
618
  startIndicesArrayPtr,
@@ -639,7 +626,6 @@ export class IfcGeometryExtraction {
639
626
  model: this.model,
640
627
  temporary: temporary,
641
628
  };
642
- // add mesh to the list of mesh objects
643
629
  if (!isRelVoid) {
644
630
  this.model.geometry.add(canonicalMesh);
645
631
  }
@@ -699,7 +685,6 @@ export class IfcGeometryExtraction {
699
685
  allStartIndices.reset();
700
686
  polygonalFaceBufferOffsets.reset();
701
687
  startIndicesBufferOffsets.reset();
702
- let indicesPerFace = -1;
703
688
  // Fast path: read each face's CoordIndex straight from its record,
704
689
  // never constructing the 9M+ IfcIndexedPolygonalFace entities a
705
690
  // large tessellated model would otherwise materialise (and retain,
@@ -709,24 +694,30 @@ export class IfcGeometryExtraction {
709
694
  // abandons the whole faceset back to the getter path below, so
710
695
  // correctness never depends on the fast path's coverage.
711
696
  let fastPathOk = true;
697
+ let hintLocalID;
712
698
  const facesWalked = entity.forEachReferenceInField(FACES_FIELD_OFFSET, FACES_FIELD_BASE_OFFSET, FACES_FIELD_DEPTH, (expressID) => {
713
699
  if (expressID === void 0) {
714
700
  fastPathOk = false;
715
701
  return false;
716
702
  }
717
- const count = this.model.extractIntegerArrayByExpressIDInto(expressID, COORD_INDEX_FIELD_OFFSET, EntityTypesIfc.IFCINDEXEDPOLYGONALFACE, allIndices);
703
+ const localID = this.model.resolveExpressID(expressID, hintLocalID);
704
+ if (localID === void 0) {
705
+ fastPathOk = false;
706
+ return false;
707
+ }
708
+ const count = this.model.extractIntegerArrayByLocalIDInto(localID, COORD_INDEX_FIELD_OFFSET, EntityTypesIfc.IFCINDEXEDPOLYGONALFACE, allIndices);
718
709
  if (count === void 0) {
719
710
  fastPathOk = false;
720
711
  return false;
721
712
  }
713
+ hintLocalID = localID;
722
714
  polygonalFaceBufferOffsets.push(allIndices.length - count);
723
715
  startIndicesBufferOffsets.push(allStartIndices.length);
724
716
  allStartIndices.push(0);
725
- indicesPerFace = count;
726
717
  return true;
727
718
  });
728
719
  if (fastPathOk && facesWalked) {
729
- this.finishPolygonalFaceSet_(entity, temporary, isRelVoid, indicesPerFace, allIndices, allStartIndices, polygonalFaceBufferOffsets, startIndicesBufferOffsets);
720
+ this.finishPolygonalFaceSet_(entity, temporary, isRelVoid, allIndices, allStartIndices, polygonalFaceBufferOffsets, startIndicesBufferOffsets);
730
721
  return result;
731
722
  }
732
723
  // Fallback: something in this faceset needs the generated getters.
@@ -734,7 +725,6 @@ export class IfcGeometryExtraction {
734
725
  allStartIndices.reset();
735
726
  polygonalFaceBufferOffsets.reset();
736
727
  startIndicesBufferOffsets.reset();
737
- indicesPerFace = -1;
738
728
  // Prepare indices and start indices for all faces
739
729
  entity.Faces.forEach((polygonalFace) => {
740
730
  // set the offets for the memory buffers so we can rebuild the
@@ -744,7 +734,7 @@ export class IfcGeometryExtraction {
744
734
  let coordIndex = 0;
745
735
  if (polygonalFace instanceof IfcIndexedPolygonalFaceWithVoids) {
746
736
  // Voided faces are rare; keep the straightforward getter path.
747
- indicesPerFace = polygonalFace.CoordIndex.length;
737
+ const indicesPerFace = polygonalFace.CoordIndex.length;
748
738
  allStartIndices.push(0);
749
739
  coordIndex += indicesPerFace;
750
740
  for (const index of polygonalFace.CoordIndex) {
@@ -761,11 +751,11 @@ export class IfcGeometryExtraction {
761
751
  else {
762
752
  // CoordIndex is vtable offset 0 on IfcIndexedPolygonalFace (see
763
753
  // its generated getter) — parsed in place, never allocated or cached.
764
- indicesPerFace = polygonalFace.extractIntegerArrayInto(0, 0, 3, allIndices);
754
+ polygonalFace.extractIntegerArrayInto(0, 0, 3, allIndices);
765
755
  allStartIndices.push(0);
766
756
  }
767
757
  });
768
- this.finishPolygonalFaceSet_(entity, temporary, isRelVoid, indicesPerFace, allIndices, allStartIndices, polygonalFaceBufferOffsets, startIndicesBufferOffsets);
758
+ this.finishPolygonalFaceSet_(entity, temporary, isRelVoid, allIndices, allStartIndices, polygonalFaceBufferOffsets, startIndicesBufferOffsets);
769
759
  return result;
770
760
  }
771
761
  /**
@@ -27,6 +27,12 @@ export declare class Uint32Sink {
27
27
  get view(): Uint32Array;
28
28
  /** Drop all appended elements, keeping the allocated capacity. */
29
29
  reset(): void;
30
+ /**
31
+ * Keep the first `length` elements. Used to unwind a failed fast path.
32
+ *
33
+ * @param length New length, ≤ current length.
34
+ */
35
+ truncate(length: number): void;
30
36
  /**
31
37
  * Append one value, growing geometrically when full.
32
38
  *
@@ -49,4 +55,18 @@ export declare class Uint32Sink {
49
55
  * @return {number} How many values were appended (0 when unset/optional-null).
50
56
  */
51
57
  export declare function extractIntegerArrayAt(buffer: Uint8Array, cursor: number, endCursor: number, sink: Uint32Sink): number;
58
+ /**
59
+ * Fast path for `(1,2,3,4)` / `(1, 2, 3, 4)` — the CoordIndex shape.
60
+ * Digits only, no comments, no reals. Returns undefined when the field
61
+ * is not that shape so the caller can use the general parser. A failed
62
+ * parse does not leave partial values in `sink`.
63
+ *
64
+ * @param buffer Record window.
65
+ * @param cursor Start of the field.
66
+ * @param endCursor End bound.
67
+ * @param sink Receives values.
68
+ * @return {number | undefined} Count appended, or undefined if this
69
+ * is not an unsigned-integer list.
70
+ */
71
+ export declare function extractUnsignedIntegerListAt(buffer: Uint8Array, cursor: number, endCursor: number, sink: Uint32Sink): number | undefined;
52
72
  //# sourceMappingURL=uint32_sink.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"uint32_sink.d.ts","sourceRoot":"","sources":["../../../../src/step/parsing/uint32_sink.ts"],"names":[],"mappings":"AAQA;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IAErB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAY;IAE3B;;OAEG;gBACU,eAAe,GAAE,MAAa;IAI3C,oEAAoE;IACpE,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;;;;OAKG;IACH,IAAW,IAAI,IAAI,WAAW,CAE7B;IAED,kEAAkE;IAC3D,KAAK,IAAI,IAAI;IAIpB;;;;OAIG;IACI,IAAI,CAAE,KAAK,EAAE,MAAM,GAAI,IAAI;CAanC;AAGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,GAAI,MAAM,CA4B7B"}
1
+ {"version":3,"file":"uint32_sink.d.ts","sourceRoot":"","sources":["../../../../src/step/parsing/uint32_sink.ts"],"names":[],"mappings":"AAgBA;;;;;;;;;;GAUG;AACH,qBAAa,UAAU;IAErB,OAAO,CAAC,KAAK,CAAa;IAC1B,OAAO,CAAC,OAAO,CAAY;IAE3B;;OAEG;gBACU,eAAe,GAAE,MAAa;IAI3C,oEAAoE;IACpE,IAAW,MAAM,IAAI,MAAM,CAE1B;IAED;;;;;OAKG;IACH,IAAW,IAAI,IAAI,WAAW,CAE7B;IAED,kEAAkE;IAC3D,KAAK,IAAI,IAAI;IAIpB;;;;OAIG;IACI,QAAQ,CAAE,MAAM,EAAE,MAAM,GAAI,IAAI;IAIvC;;;;OAIG;IACI,IAAI,CAAE,KAAK,EAAE,MAAM,GAAI,IAAI;CAanC;AAGD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CACjC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,GAAI,MAAM,CAqC7B;AAGD;;;;;;;;;;;;GAYG;AACH,wBAAgB,4BAA4B,CACxC,MAAM,EAAE,UAAU,EAClB,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,IAAI,EAAE,UAAU,GAAI,MAAM,GAAG,SAAS,CAsFzC"}
@@ -1,4 +1,10 @@
1
1
  import { skipValue, stepExtractArrayBegin, stepExtractArrayToken, stepExtractNumber, stepExtractOptional, } from "./step_deserialization_functions.js";
2
+ import ParsingConstants from "../../parsing/parsing_constants.js";
3
+ const OPEN_PAREN = ParsingConstants.OPEN_PAREN;
4
+ const CLOSE_PAREN = ParsingConstants.CLOSE_PAREN;
5
+ const COMMA = ParsingConstants.COMMA;
6
+ const ZERO = ParsingConstants.ZERO;
7
+ const WHITESPACE = ParsingConstants.WHITE_SPACE_SET;
2
8
  /**
3
9
  * Growable Uint32Array append sink.
4
10
  *
@@ -35,6 +41,14 @@ export class Uint32Sink {
35
41
  reset() {
36
42
  this.length_ = 0;
37
43
  }
44
+ /**
45
+ * Keep the first `length` elements. Used to unwind a failed fast path.
46
+ *
47
+ * @param length New length, ≤ current length.
48
+ */
49
+ truncate(length) {
50
+ this.length_ = length;
51
+ }
38
52
  /**
39
53
  * Append one value, growing geometrically when full.
40
54
  *
@@ -64,6 +78,12 @@ export class Uint32Sink {
64
78
  * @return {number} How many values were appended (0 when unset/optional-null).
65
79
  */
66
80
  export function extractIntegerArrayAt(buffer, cursor, endCursor, sink) {
81
+ const marked = sink.length;
82
+ const fast = extractUnsignedIntegerListAt(buffer, cursor, endCursor, sink);
83
+ if (fast !== void 0) {
84
+ return fast;
85
+ }
86
+ sink.truncate(marked);
67
87
  if (stepExtractOptional(buffer, cursor, endCursor) === null) {
68
88
  return 0;
69
89
  }
@@ -83,3 +103,78 @@ export function extractIntegerArrayAt(buffer, cursor, endCursor, sink) {
83
103
  }
84
104
  return count;
85
105
  }
106
+ /**
107
+ * Fast path for `(1,2,3,4)` / `(1, 2, 3, 4)` — the CoordIndex shape.
108
+ * Digits only, no comments, no reals. Returns undefined when the field
109
+ * is not that shape so the caller can use the general parser. A failed
110
+ * parse does not leave partial values in `sink`.
111
+ *
112
+ * @param buffer Record window.
113
+ * @param cursor Start of the field.
114
+ * @param endCursor End bound.
115
+ * @param sink Receives values.
116
+ * @return {number | undefined} Count appended, or undefined if this
117
+ * is not an unsigned-integer list.
118
+ */
119
+ export function extractUnsignedIntegerListAt(buffer, cursor, endCursor, sink) {
120
+ const marked = sink.length;
121
+ while (cursor < endCursor && WHITESPACE.has(buffer[cursor])) {
122
+ ++cursor;
123
+ }
124
+ if (cursor >= endCursor) {
125
+ return void 0;
126
+ }
127
+ if (buffer[cursor] === ParsingConstants.DOLLAR) {
128
+ return 0;
129
+ }
130
+ if (buffer[cursor] !== OPEN_PAREN) {
131
+ return void 0;
132
+ }
133
+ ++cursor;
134
+ let count = 0;
135
+ while (cursor < endCursor) {
136
+ while (cursor < endCursor && WHITESPACE.has(buffer[cursor])) {
137
+ ++cursor;
138
+ }
139
+ if (cursor >= endCursor) {
140
+ sink.truncate(marked);
141
+ return void 0;
142
+ }
143
+ if (buffer[cursor] === CLOSE_PAREN) {
144
+ return count;
145
+ }
146
+ if (count > 0) {
147
+ if (buffer[cursor] !== COMMA) {
148
+ sink.truncate(marked);
149
+ return void 0;
150
+ }
151
+ ++cursor;
152
+ while (cursor < endCursor && WHITESPACE.has(buffer[cursor])) {
153
+ ++cursor;
154
+ }
155
+ if (cursor >= endCursor) {
156
+ sink.truncate(marked);
157
+ return void 0;
158
+ }
159
+ }
160
+ const digit = buffer[cursor] - ZERO;
161
+ if (digit < 0 || digit > 9) {
162
+ sink.truncate(marked);
163
+ return void 0;
164
+ }
165
+ let value = digit;
166
+ ++cursor;
167
+ while (cursor < endCursor) {
168
+ const next = buffer[cursor] - ZERO;
169
+ if (next < 0 || next > 9) {
170
+ break;
171
+ }
172
+ value = value * 10 + next;
173
+ ++cursor;
174
+ }
175
+ sink.push(value);
176
+ ++count;
177
+ }
178
+ sink.truncate(marked);
179
+ return void 0;
180
+ }
@@ -7,7 +7,7 @@ import { beforeAll, describe, expect, test } from "@jest/globals";
7
7
  import { IfcAPI } from "../../compat/web-ifc/ifc_api.js";
8
8
  import EntityTypesIfc from "../../ifc/ifc4_gen/entity_types_ifc.gen.js";
9
9
  import { IfcIndexedPolygonalFace, IfcIndexedPolygonalFaceWithVoids, IfcPolygonalFaceSet, } from "../../ifc/ifc4_gen/index.js";
10
- import { Uint32Sink } from "./uint32_sink.js";
10
+ import { Uint32Sink, extractUnsignedIntegerListAt } from "./uint32_sink.js";
11
11
  describe("Uint32Sink", () => {
12
12
  test("appends, grows past its initial capacity, and views exactly its length", () => {
13
13
  const sink = new Uint32Sink(2);
@@ -19,6 +19,20 @@ describe("Uint32Sink", () => {
19
19
  expect(sink.length).toBe(10);
20
20
  expect(Array.from(sink.view)).toEqual([0, 3, 6, 9, 12, 15, 18, 21, 24, 27]);
21
21
  });
22
+ test("extractUnsignedIntegerListAt parses a plain CoordIndex list", () => {
23
+ const sink = new Uint32Sink(4);
24
+ const bytes = new TextEncoder().encode("(1,2,3,4)");
25
+ expect(extractUnsignedIntegerListAt(bytes, 0, bytes.length, sink)).toBe(4);
26
+ expect(Array.from(sink.view)).toEqual([1, 2, 3, 4]);
27
+ });
28
+ test("extractUnsignedIntegerListAt refuses a real and leaves the sink clean", () => {
29
+ const sink = new Uint32Sink(4);
30
+ const bytes = new TextEncoder().encode("(1,2.5,3)");
31
+ sink.push(9);
32
+ expect(extractUnsignedIntegerListAt(bytes, 0, bytes.length, sink))
33
+ .toBeUndefined();
34
+ expect(Array.from(sink.view)).toEqual([9]);
35
+ });
22
36
  test("reset drops elements but keeps capacity for reuse", () => {
23
37
  const sink = new Uint32Sink(4);
24
38
  sink.push(11);
@@ -144,6 +158,32 @@ describe("reference-level faceset fast path", () => {
144
158
  }
145
159
  }
146
160
  }, 120000);
161
+ test("column path matches CoordIndex without materialising the face first", () => {
162
+ const model = stepModel();
163
+ const sink = new Uint32Sink(4);
164
+ for (const faceSet of faceSets()) {
165
+ const expressIDs = [];
166
+ faceSet.forEachReferenceInField(FACES_OFFSET, FACES_BASE_OFFSET, FACES_DEPTH, (expressID) => {
167
+ if (expressID !== void 0) {
168
+ expressIDs.push(expressID);
169
+ }
170
+ return true;
171
+ });
172
+ const fromColumns = [];
173
+ for (const expressID of expressIDs) {
174
+ sink.reset();
175
+ const count = model.extractIntegerArrayByExpressIDInto(expressID, COORD_INDEX_OFFSET, EntityTypesIfc.IFCINDEXEDPOLYGONALFACE, sink);
176
+ if (count === void 0) {
177
+ continue;
178
+ }
179
+ fromColumns.push(Array.from(sink.view));
180
+ }
181
+ const fromGetter = faceSet.Faces
182
+ .filter((face) => !(face instanceof IfcIndexedPolygonalFaceWithVoids))
183
+ .map((face) => face.CoordIndex);
184
+ expect(fromColumns).toEqual(fromGetter);
185
+ }
186
+ }, 120000);
147
187
  test("reports failure for an unknown express ID and for a type mismatch", () => {
148
188
  const model = stepModel();
149
189
  const sink = new Uint32Sink(4);