@pilates/core 1.0.0 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/dist/algorithm/index.d.ts +31 -0
  2. package/dist/algorithm/index.d.ts.map +1 -1
  3. package/dist/algorithm/index.js +85 -1
  4. package/dist/algorithm/index.js.map +1 -1
  5. package/dist/algorithm/round.d.ts +13 -0
  6. package/dist/algorithm/round.d.ts.map +1 -1
  7. package/dist/algorithm/round.js +17 -0
  8. package/dist/algorithm/round.js.map +1 -1
  9. package/dist/algorithm/spineless/flex-grammar.d.ts +394 -0
  10. package/dist/algorithm/spineless/flex-grammar.d.ts.map +1 -0
  11. package/dist/algorithm/spineless/flex-grammar.js +2373 -0
  12. package/dist/algorithm/spineless/flex-grammar.js.map +1 -0
  13. package/dist/algorithm/spineless/grammar.d.ts +150 -0
  14. package/dist/algorithm/spineless/grammar.d.ts.map +1 -0
  15. package/dist/algorithm/spineless/grammar.js +144 -0
  16. package/dist/algorithm/spineless/grammar.js.map +1 -0
  17. package/dist/algorithm/spineless/layout.d.ts +130 -0
  18. package/dist/algorithm/spineless/layout.d.ts.map +1 -0
  19. package/dist/algorithm/spineless/layout.js +755 -0
  20. package/dist/algorithm/spineless/layout.js.map +1 -0
  21. package/dist/algorithm/spineless/order-maintenance.bench.d.ts +25 -0
  22. package/dist/algorithm/spineless/order-maintenance.bench.d.ts.map +1 -0
  23. package/dist/algorithm/spineless/order-maintenance.bench.js +78 -0
  24. package/dist/algorithm/spineless/order-maintenance.bench.js.map +1 -0
  25. package/dist/algorithm/spineless/order-maintenance.d.ts +192 -0
  26. package/dist/algorithm/spineless/order-maintenance.d.ts.map +1 -0
  27. package/dist/algorithm/spineless/order-maintenance.js +294 -0
  28. package/dist/algorithm/spineless/order-maintenance.js.map +1 -0
  29. package/dist/algorithm/spineless/priority-queue.bench.d.ts +17 -0
  30. package/dist/algorithm/spineless/priority-queue.bench.d.ts.map +1 -0
  31. package/dist/algorithm/spineless/priority-queue.bench.js +57 -0
  32. package/dist/algorithm/spineless/priority-queue.bench.js.map +1 -0
  33. package/dist/algorithm/spineless/priority-queue.d.ts +73 -0
  34. package/dist/algorithm/spineless/priority-queue.d.ts.map +1 -0
  35. package/dist/algorithm/spineless/priority-queue.js +149 -0
  36. package/dist/algorithm/spineless/priority-queue.js.map +1 -0
  37. package/dist/algorithm/spineless/runtime.d.ts +239 -0
  38. package/dist/algorithm/spineless/runtime.d.ts.map +1 -0
  39. package/dist/algorithm/spineless/runtime.js +458 -0
  40. package/dist/algorithm/spineless/runtime.js.map +1 -0
  41. package/dist/algorithm/spineless/style-dirty.d.ts +65 -0
  42. package/dist/algorithm/spineless/style-dirty.d.ts.map +1 -0
  43. package/dist/algorithm/spineless/style-dirty.js +75 -0
  44. package/dist/algorithm/spineless/style-dirty.js.map +1 -0
  45. package/dist/index.d.ts +3 -1
  46. package/dist/index.d.ts.map +1 -1
  47. package/dist/index.js +6 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/inspect.d.ts +27 -0
  50. package/dist/inspect.d.ts.map +1 -0
  51. package/dist/inspect.js +61 -0
  52. package/dist/inspect.js.map +1 -0
  53. package/package.json +1 -1
@@ -0,0 +1 @@
1
+ {"version":3,"file":"layout.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/layout.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Microbenchmark for the Order Maintenance data structure.
3
+ *
4
+ * This is the **kill switch** for Phase 5 (Spineless Traversal): if OM
5
+ * operations cost more than a small constant per op at 1k-10k node scale,
6
+ * the algorithmic novelty of Spineless Traversal won't pay off in pure JS.
7
+ *
8
+ * Targets (Phase 5 viability criteria):
9
+ * - `compare`: < 200ns per op at 10k nodes (it's the hot path; the
10
+ * Spineless priority queue calls it on every insert/extract).
11
+ * - `insertAfter`: < 5µs amortized at 10k nodes (rarer, called when
12
+ * the dependency graph adds nodes — typically only during tree
13
+ * construction or large mutations).
14
+ *
15
+ * The naive impl is O(N) per insert, so it will exceed the insertAfter
16
+ * target at scale. That's expected — the Bender et al. amortized O(1)
17
+ * impl is what hits the target. We measure naive here as a baseline so
18
+ * we can show the speedup when Bender lands.
19
+ *
20
+ * Run with: `tsx packages/core/src/algorithm/spineless/order-maintenance.bench.ts`
21
+ *
22
+ * @internal
23
+ */
24
+ export {};
25
+ //# sourceMappingURL=order-maintenance.bench.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-maintenance.bench.d.ts","sourceRoot":"","sources":["../../../src/algorithm/spineless/order-maintenance.bench.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG"}
@@ -0,0 +1,78 @@
1
+ /**
2
+ * Microbenchmark for the Order Maintenance data structure.
3
+ *
4
+ * This is the **kill switch** for Phase 5 (Spineless Traversal): if OM
5
+ * operations cost more than a small constant per op at 1k-10k node scale,
6
+ * the algorithmic novelty of Spineless Traversal won't pay off in pure JS.
7
+ *
8
+ * Targets (Phase 5 viability criteria):
9
+ * - `compare`: < 200ns per op at 10k nodes (it's the hot path; the
10
+ * Spineless priority queue calls it on every insert/extract).
11
+ * - `insertAfter`: < 5µs amortized at 10k nodes (rarer, called when
12
+ * the dependency graph adds nodes — typically only during tree
13
+ * construction or large mutations).
14
+ *
15
+ * The naive impl is O(N) per insert, so it will exceed the insertAfter
16
+ * target at scale. That's expected — the Bender et al. amortized O(1)
17
+ * impl is what hits the target. We measure naive here as a baseline so
18
+ * we can show the speedup when Bender lands.
19
+ *
20
+ * Run with: `tsx packages/core/src/algorithm/spineless/order-maintenance.bench.ts`
21
+ *
22
+ * @internal
23
+ */
24
+ import { BenderOrderMaintenance, NaiveOrderMaintenance, } from './order-maintenance.js';
25
+ function median(xs) {
26
+ const sorted = [...xs].sort((a, b) => a - b);
27
+ return sorted[Math.floor(sorted.length / 2)];
28
+ }
29
+ function bench(label, make, sizes, opsPerTrial, trials, op) {
30
+ console.log(`\n## ${label} — ${op}`);
31
+ for (const N of sizes) {
32
+ const trialMs = [];
33
+ for (let t = 0; t < trials; t++) {
34
+ const om = make();
35
+ const nodes = [om.init()];
36
+ // Pre-build N-1 more nodes
37
+ for (let i = 1; i < N; i++)
38
+ nodes.push(om.insertAfter(nodes[i - 1]));
39
+ const start = performance.now();
40
+ if (op === 'compare') {
41
+ // Fixed-pattern compares to avoid letting V8 optimize away
42
+ let acc = 0;
43
+ for (let k = 0; k < opsPerTrial; k++) {
44
+ // Pick two pseudo-random nodes (deterministic, no Math.random cost)
45
+ const i = (k * 2654435761) % N;
46
+ const j = (k * 1597334677) % N;
47
+ acc += om.compare(nodes[i], nodes[j]);
48
+ }
49
+ if (acc === 12345.6789)
50
+ console.log('!!!');
51
+ }
52
+ else {
53
+ // Insert opsPerTrial new nodes; insert position cycles through
54
+ // existing nodes so we hit middle-of-list (worst case for naive
55
+ // renumber).
56
+ for (let k = 0; k < opsPerTrial; k++) {
57
+ const after = nodes[(k * 2654435761) % nodes.length];
58
+ nodes.push(om.insertAfter(after));
59
+ }
60
+ }
61
+ const end = performance.now();
62
+ trialMs.push(end - start);
63
+ }
64
+ const ms = median(trialMs);
65
+ const usPerOp = (ms * 1000) / opsPerTrial;
66
+ const opsPerSec = (opsPerTrial / ms) * 1000;
67
+ console.log(` N=${N.toString().padStart(6)} ${usPerOp.toFixed(3).padStart(8)} µs/op ${(opsPerSec / 1000).toFixed(1).padStart(8)} kops/s`);
68
+ }
69
+ }
70
+ console.log('Order Maintenance microbench (single-threaded JS, Node.js)');
71
+ console.log('Targets: compare < 0.2µs, insertAfter amortized < 5µs at N=10k');
72
+ const naive = () => new NaiveOrderMaintenance();
73
+ const bender = () => new BenderOrderMaintenance();
74
+ bench('Naive compare', naive, [100, 1000, 10000], 100_000, 5, 'compare');
75
+ bench('Bender compare', bender, [100, 1000, 10000], 100_000, 5, 'compare');
76
+ bench('Naive insertAfter (O(N) renumber)', naive, [100, 1000, 10000], 1_000, 5, 'insertAfter');
77
+ bench('Bender insertAfter (amortized O(log N))', bender, [100, 1000, 10000], 1_000, 5, 'insertAfter');
78
+ //# sourceMappingURL=order-maintenance.bench.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-maintenance.bench.js","sourceRoot":"","sources":["../../../src/algorithm/spineless/order-maintenance.bench.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,192 @@
1
+ /**
2
+ * Order Maintenance (OM) data structure.
3
+ *
4
+ * Maintains a totally-ordered set of items under insertions, deletions,
5
+ * and `compare(a, b)` queries that return the relative order in O(1) (or
6
+ * O(1) amortized). Foundational primitive for Spineless Traversal
7
+ * (Kirisame, Wang, Panchekha — PLDI 2025): the priority queue that
8
+ * drives incremental layout invalidation is keyed on OM timestamps,
9
+ * so a fast OM comparator dominates per-operation cost.
10
+ *
11
+ * Reference: Bender, Cole, Demaine, Farach-Colton, Zito. "Two
12
+ * simplified algorithms for maintaining order in a list." ESA 2002.
13
+ *
14
+ * ## What this file ships
15
+ *
16
+ * **The interface** — `OMNode`, `OrderMaintenance` — is the surface the
17
+ * Spineless runtime will consume. We design it so the implementation
18
+ * can be swapped (naive ↔ Bender amortized O(1)) without ripple.
19
+ *
20
+ * **The naive implementation** — `NaiveOrderMaintenance` — uses a single
21
+ * doubly-linked list with sequential integer tags assigned on insert.
22
+ * Inserts trigger O(N) renumbering of trailing nodes. Compare is O(1).
23
+ *
24
+ * This is the **scaffolding implementation**: correct, simple, lets us
25
+ * write all the consumer code (priority queue, runtime, attribute grammar
26
+ * interpreter) without waiting for the optimized impl. The Bender et al.
27
+ * amortized-O(1) implementation lands as a drop-in replacement once the
28
+ * Spineless runtime is wired and we can benchmark end-to-end. The naive
29
+ * impl stays in tree forever as a reference oracle: every Bender op is
30
+ * differentially compared against naive in the property-based test.
31
+ *
32
+ * ## Why JS and not WASM
33
+ *
34
+ * The paper's reference (Megatron) emits C++ and uses inline `cmov` for
35
+ * branchless compare. We can't use inline assembly in JS, but we don't
36
+ * have to: V8 already lowers `a < b` on 32-bit-integer hidden classes
37
+ * to a branchless `cmp` + `setb` sequence on x86-64. The TS-side cost is
38
+ * predominantly in the `lookup` (Map.get) and the unboxed compare itself.
39
+ *
40
+ * @internal
41
+ */
42
+ /**
43
+ * A node in the order. The user holds these directly; comparisons happen
44
+ * via {@link OrderMaintenance.compare}. Implementations are free to use
45
+ * different node-internal representations; the interface only commits to
46
+ * identity (`===`) being the way to look a node up.
47
+ *
48
+ * @internal
49
+ */
50
+ export interface OMNode {
51
+ /**
52
+ * Implementation-defined opaque tag. Consumers must NOT read this
53
+ * directly. Treated as an internal invariant that survives compares
54
+ * but may shift after inserts/deletes (renumbering, rebalance).
55
+ *
56
+ * @internal
57
+ */
58
+ readonly _omTag: number;
59
+ }
60
+ /**
61
+ * @internal
62
+ */
63
+ export interface OrderMaintenance {
64
+ /**
65
+ * The current count of live nodes in the order. Exposed for tests
66
+ * and microbenchmarks; consumers should not depend on the value.
67
+ */
68
+ readonly size: number;
69
+ /**
70
+ * Create the very first node in an empty order, or assert that an
71
+ * order is non-empty by looking up an existing first/last anchor.
72
+ * Returns a node identity that can be used as the `after` argument
73
+ * to subsequent `insertAfter` calls.
74
+ *
75
+ * Calling `init` on an already-initialised order replaces all
76
+ * existing nodes; this is provided for `reset()` semantics.
77
+ */
78
+ init(): OMNode;
79
+ /**
80
+ * Insert a fresh node immediately after `after` in the order.
81
+ * Returns the new node identity. The returned node compares >
82
+ * `after` and < whatever was at `after.next` previously.
83
+ *
84
+ * Amortized O(1) in the Bender impl; O(N) worst case here in the
85
+ * naive impl due to trailing-node renumbering.
86
+ */
87
+ insertAfter(after: OMNode): OMNode;
88
+ /**
89
+ * Remove `node` from the order. Subsequent compares involving
90
+ * `node` are undefined behaviour. Other nodes' relative order is
91
+ * preserved.
92
+ */
93
+ delete(node: OMNode): void;
94
+ /**
95
+ * Compare the relative order of `a` and `b`. Returns:
96
+ * - a negative integer if `a` precedes `b` (was inserted earlier
97
+ * or recipient-of-`insertAfter` chain),
98
+ * - zero if `a === b`,
99
+ * - a positive integer if `a` follows `b`.
100
+ *
101
+ * O(1) amortized in both naive and Bender impls. This is the
102
+ * hot path — the Spineless priority queue calls compare per
103
+ * insert/extract.
104
+ */
105
+ compare(a: OMNode, b: OMNode): number;
106
+ }
107
+ /**
108
+ * Naive O(N)-per-insert Order Maintenance. Correctness-only impl
109
+ * for scaffolding and as a fuzzer oracle for the future Bender impl.
110
+ *
111
+ * Invariants:
112
+ * - `_omTag` is strictly increasing along the `next` chain.
113
+ * - `_omTag` values are arbitrary integers but always orderable.
114
+ * - Insert renumbers all trailing nodes to maintain monotonicity.
115
+ *
116
+ * @internal
117
+ */
118
+ export declare class NaiveOrderMaintenance implements OrderMaintenance {
119
+ private firstNode;
120
+ private nodeCount;
121
+ get size(): number;
122
+ /**
123
+ * Returns the first node in the order, or `null` if empty. Exposed
124
+ * for tests and for the priority queue's extract-min operation.
125
+ *
126
+ * @internal
127
+ */
128
+ first(): OMNode | null;
129
+ init(): OMNode;
130
+ insertAfter(after: OMNode): OMNode;
131
+ delete(node: OMNode): void;
132
+ compare(a: OMNode, b: OMNode): number;
133
+ }
134
+ /**
135
+ * Bender, Cole, Demaine, Farach-Colton, Zito (2002): "Two simplified
136
+ * algorithms for maintaining order in a list." Algorithm 1 — list-
137
+ * labeling with exponentially-growing window relabel.
138
+ *
139
+ * Operations:
140
+ * - `compare`: O(1) integer subtract.
141
+ * - `insertAfter`: amortized O(log N) per operation (looser than the
142
+ * paper's O(1) amortized when using density bound (3/2)^d at depth d;
143
+ * we trade a log factor for simpler integer arithmetic and avoid
144
+ * BigInt).
145
+ * - `delete`: O(1).
146
+ *
147
+ * Cross-validated against `NaiveOrderMaintenance` via property fuzzer.
148
+ *
149
+ * @internal
150
+ */
151
+ export declare class BenderOrderMaintenance implements OrderMaintenance {
152
+ private firstNode;
153
+ private nodeCount;
154
+ get size(): number;
155
+ first(): OMNode | null;
156
+ init(): OMNode;
157
+ insertAfter(after: OMNode): OMNode;
158
+ delete(node: OMNode): void;
159
+ compare(a: OMNode, b: OMNode): number;
160
+ /**
161
+ * Walk exponentially-growing windows around `pivot` until a window
162
+ * with low enough density to redistribute is found. Redistribute
163
+ * labels uniformly across that window.
164
+ *
165
+ * Density bound: `count * 2 ≤ span`. This guarantees:
166
+ * - Every node gets a distinct integer label (count ≤ span).
167
+ * - Each interval between consecutive labels has at least 2 units
168
+ * of room, so subsequent midpoint inserts succeed without
169
+ * triggering relabel again at the same depth.
170
+ *
171
+ * Window definition at depth d:
172
+ * span = 2^d
173
+ * tagLow = pivot._omTag aligned down to multiple of span
174
+ * tagHigh = tagLow + span
175
+ *
176
+ * Amortized cost: O(log N) per insert. (Tighter than the paper's
177
+ * O(1) amortized with density bound (3/2)^d, but the bound here uses
178
+ * pure integer arithmetic for V8-friendly speed.)
179
+ *
180
+ * @internal
181
+ */
182
+ private relabel;
183
+ /**
184
+ * Fallback when the windowed relabel walks all the way up to the
185
+ * full label space without finding a sparse-enough window. Spreads
186
+ * every node uniformly across [0, LABEL_MAX).
187
+ *
188
+ * @internal
189
+ */
190
+ private globalRelabel;
191
+ }
192
+ //# sourceMappingURL=order-maintenance.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"order-maintenance.d.ts","sourceRoot":"","sources":["../../../src/algorithm/spineless/order-maintenance.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAwCG;AAEH;;;;;;;GAOG;AACH,MAAM,WAAW,MAAM;IACrB;;;;;;OAMG;IACH,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB;;;;;;;;OAQG;IACH,IAAI,IAAI,MAAM,CAAC;IAEf;;;;;;;OAOG;IACH,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IAEnC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAE3B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACvC;AAkBD;;;;;;;;;;GAUG;AACH,qBAAa,qBAAsB,YAAW,gBAAgB;IAC5D,OAAO,CAAC,SAAS,CAA0B;IAC3C,OAAO,CAAC,SAAS,CAAK;IAEtB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;OAKG;IACH,KAAK,IAAI,MAAM,GAAG,IAAI;IAItB,IAAI,IAAI,MAAM;IAOd,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAyBlC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAkB1B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;CAKtC;AA0BD;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,sBAAuB,YAAW,gBAAgB;IAC7D,OAAO,CAAC,SAAS,CAA2B;IAC5C,OAAO,CAAC,SAAS,CAAK;IAEtB,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,KAAK,IAAI,MAAM,GAAG,IAAI;IAItB,IAAI,IAAI,MAAM;IASd,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAwBlC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAc1B,OAAO,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;;;;;;;;;;;;;;;;;OAqBG;IACH,OAAO,CAAC,OAAO;IAqDf;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;CActB"}
@@ -0,0 +1,294 @@
1
+ /**
2
+ * Order Maintenance (OM) data structure.
3
+ *
4
+ * Maintains a totally-ordered set of items under insertions, deletions,
5
+ * and `compare(a, b)` queries that return the relative order in O(1) (or
6
+ * O(1) amortized). Foundational primitive for Spineless Traversal
7
+ * (Kirisame, Wang, Panchekha — PLDI 2025): the priority queue that
8
+ * drives incremental layout invalidation is keyed on OM timestamps,
9
+ * so a fast OM comparator dominates per-operation cost.
10
+ *
11
+ * Reference: Bender, Cole, Demaine, Farach-Colton, Zito. "Two
12
+ * simplified algorithms for maintaining order in a list." ESA 2002.
13
+ *
14
+ * ## What this file ships
15
+ *
16
+ * **The interface** — `OMNode`, `OrderMaintenance` — is the surface the
17
+ * Spineless runtime will consume. We design it so the implementation
18
+ * can be swapped (naive ↔ Bender amortized O(1)) without ripple.
19
+ *
20
+ * **The naive implementation** — `NaiveOrderMaintenance` — uses a single
21
+ * doubly-linked list with sequential integer tags assigned on insert.
22
+ * Inserts trigger O(N) renumbering of trailing nodes. Compare is O(1).
23
+ *
24
+ * This is the **scaffolding implementation**: correct, simple, lets us
25
+ * write all the consumer code (priority queue, runtime, attribute grammar
26
+ * interpreter) without waiting for the optimized impl. The Bender et al.
27
+ * amortized-O(1) implementation lands as a drop-in replacement once the
28
+ * Spineless runtime is wired and we can benchmark end-to-end. The naive
29
+ * impl stays in tree forever as a reference oracle: every Bender op is
30
+ * differentially compared against naive in the property-based test.
31
+ *
32
+ * ## Why JS and not WASM
33
+ *
34
+ * The paper's reference (Megatron) emits C++ and uses inline `cmov` for
35
+ * branchless compare. We can't use inline assembly in JS, but we don't
36
+ * have to: V8 already lowers `a < b` on 32-bit-integer hidden classes
37
+ * to a branchless `cmp` + `setb` sequence on x86-64. The TS-side cost is
38
+ * predominantly in the `lookup` (Map.get) and the unboxed compare itself.
39
+ *
40
+ * @internal
41
+ */
42
+ /**
43
+ * Naive O(N)-per-insert Order Maintenance. Correctness-only impl
44
+ * for scaffolding and as a fuzzer oracle for the future Bender impl.
45
+ *
46
+ * Invariants:
47
+ * - `_omTag` is strictly increasing along the `next` chain.
48
+ * - `_omTag` values are arbitrary integers but always orderable.
49
+ * - Insert renumbers all trailing nodes to maintain monotonicity.
50
+ *
51
+ * @internal
52
+ */
53
+ export class NaiveOrderMaintenance {
54
+ firstNode = null;
55
+ nodeCount = 0;
56
+ get size() {
57
+ return this.nodeCount;
58
+ }
59
+ /**
60
+ * Returns the first node in the order, or `null` if empty. Exposed
61
+ * for tests and for the priority queue's extract-min operation.
62
+ *
63
+ * @internal
64
+ */
65
+ first() {
66
+ return this.firstNode;
67
+ }
68
+ init() {
69
+ const first = { _omTag: 0, prev: null, next: null };
70
+ this.firstNode = first;
71
+ this.nodeCount = 1;
72
+ return first;
73
+ }
74
+ insertAfter(after) {
75
+ const afterNode = after;
76
+ const newNode = {
77
+ _omTag: afterNode._omTag + 1,
78
+ prev: afterNode,
79
+ next: afterNode.next,
80
+ };
81
+ if (afterNode.next !== null) {
82
+ afterNode.next.prev = newNode;
83
+ }
84
+ afterNode.next = newNode;
85
+ // Renumber trailing nodes to maintain strict monotonicity.
86
+ // O(N) worst case; this is the scaffolding-only cost the Bender
87
+ // impl removes.
88
+ let cursor = newNode.next;
89
+ let nextTag = newNode._omTag + 1;
90
+ while (cursor !== null) {
91
+ cursor._omTag = nextTag;
92
+ nextTag++;
93
+ cursor = cursor.next;
94
+ }
95
+ this.nodeCount++;
96
+ return newNode;
97
+ }
98
+ delete(node) {
99
+ const n = node;
100
+ if (n.prev !== null) {
101
+ n.prev.next = n.next;
102
+ }
103
+ else {
104
+ this.firstNode = n.next;
105
+ }
106
+ if (n.next !== null) {
107
+ n.next.prev = n.prev;
108
+ }
109
+ // Renumbering is not strictly required after delete (gaps in tags
110
+ // are harmless), but consistency with insertAfter's invariant
111
+ // (consecutive tags) simplifies reasoning. Skipped for now to
112
+ // avoid an extra O(N) walk; tests should not rely on consecutive
113
+ // tags after deletes.
114
+ this.nodeCount--;
115
+ }
116
+ compare(a, b) {
117
+ const ta = a._omTag;
118
+ const tb = b._omTag;
119
+ return ta - tb;
120
+ }
121
+ }
122
+ // --- Bender et al. 2002 Algorithm 1 (list-labeling with windowed relabel) ---
123
+ /**
124
+ * Label space. Labels live in `[0, LABEL_MAX)`. Using 2^30 keeps every
125
+ * arithmetic op (midpoint, double, mask) in V8's 31-bit SMI range, so
126
+ * the JIT lowers everything to native int instructions. At 2^30 we can
127
+ * host ~50M items before any global rebalance is forced — far above
128
+ * typical TUI scale.
129
+ *
130
+ * @internal
131
+ */
132
+ const LABEL_MAX = 1 << 30;
133
+ /**
134
+ * Bender, Cole, Demaine, Farach-Colton, Zito (2002): "Two simplified
135
+ * algorithms for maintaining order in a list." Algorithm 1 — list-
136
+ * labeling with exponentially-growing window relabel.
137
+ *
138
+ * Operations:
139
+ * - `compare`: O(1) integer subtract.
140
+ * - `insertAfter`: amortized O(log N) per operation (looser than the
141
+ * paper's O(1) amortized when using density bound (3/2)^d at depth d;
142
+ * we trade a log factor for simpler integer arithmetic and avoid
143
+ * BigInt).
144
+ * - `delete`: O(1).
145
+ *
146
+ * Cross-validated against `NaiveOrderMaintenance` via property fuzzer.
147
+ *
148
+ * @internal
149
+ */
150
+ export class BenderOrderMaintenance {
151
+ firstNode = null;
152
+ nodeCount = 0;
153
+ get size() {
154
+ return this.nodeCount;
155
+ }
156
+ first() {
157
+ return this.firstNode;
158
+ }
159
+ init() {
160
+ // Start label at the middle of the space so first inserts have room
161
+ // both before (via the global rebalance path) and after.
162
+ const first = { _omTag: LABEL_MAX >> 1, prev: null, next: null };
163
+ this.firstNode = first;
164
+ this.nodeCount = 1;
165
+ return first;
166
+ }
167
+ insertAfter(after) {
168
+ const pred = after;
169
+ const succ = pred.next;
170
+ const succLabel = succ === null ? LABEL_MAX : succ._omTag;
171
+ const predLabel = pred._omTag;
172
+ // Midpoint between predecessor and successor labels. Integer-only.
173
+ const newLabel = (predLabel + succLabel) >> 1;
174
+ const newNode = { _omTag: newLabel, prev: pred, next: succ };
175
+ pred.next = newNode;
176
+ if (succ !== null)
177
+ succ.prev = newNode;
178
+ this.nodeCount++;
179
+ if (newLabel === predLabel) {
180
+ // No room between pred and succ — trigger a windowed relabel.
181
+ // Relabel updates newNode._omTag (and others in the window) to
182
+ // spread out across available label space.
183
+ this.relabel(newNode);
184
+ }
185
+ return newNode;
186
+ }
187
+ delete(node) {
188
+ const n = node;
189
+ if (n.prev !== null) {
190
+ n.prev.next = n.next;
191
+ }
192
+ else {
193
+ this.firstNode = n.next;
194
+ }
195
+ if (n.next !== null) {
196
+ n.next.prev = n.prev;
197
+ }
198
+ this.nodeCount--;
199
+ // Delete only creates extra label room; no rebalance needed.
200
+ }
201
+ compare(a, b) {
202
+ return a._omTag - b._omTag;
203
+ }
204
+ /**
205
+ * Walk exponentially-growing windows around `pivot` until a window
206
+ * with low enough density to redistribute is found. Redistribute
207
+ * labels uniformly across that window.
208
+ *
209
+ * Density bound: `count * 2 ≤ span`. This guarantees:
210
+ * - Every node gets a distinct integer label (count ≤ span).
211
+ * - Each interval between consecutive labels has at least 2 units
212
+ * of room, so subsequent midpoint inserts succeed without
213
+ * triggering relabel again at the same depth.
214
+ *
215
+ * Window definition at depth d:
216
+ * span = 2^d
217
+ * tagLow = pivot._omTag aligned down to multiple of span
218
+ * tagHigh = tagLow + span
219
+ *
220
+ * Amortized cost: O(log N) per insert. (Tighter than the paper's
221
+ * O(1) amortized with density bound (3/2)^d, but the bound here uses
222
+ * pure integer arithmetic for V8-friendly speed.)
223
+ *
224
+ * @internal
225
+ */
226
+ relabel(pivot) {
227
+ let depth = 1;
228
+ let span = 2;
229
+ while (true) {
230
+ // Find aligned window boundaries around the pivot's current label.
231
+ const mask = (LABEL_MAX - 1) ^ (span - 1);
232
+ const tagLow = pivot._omTag & mask;
233
+ const tagHigh = tagLow + span;
234
+ // Find leftmost node in the window by walking back from pivot.
235
+ let firstInWindow = pivot;
236
+ while (firstInWindow.prev !== null && firstInWindow.prev._omTag >= tagLow) {
237
+ firstInWindow = firstInWindow.prev;
238
+ }
239
+ // Count nodes in the window and collect them in-order.
240
+ const inWindow = [];
241
+ let cursor = firstInWindow;
242
+ while (cursor !== null && cursor._omTag < tagHigh) {
243
+ inWindow.push(cursor);
244
+ cursor = cursor.next;
245
+ }
246
+ const count = inWindow.length;
247
+ // Density bound: redistribute only when there's at least 2x
248
+ // headroom in the window. This guarantees distinct labels +
249
+ // future-insert room without immediate re-relabel.
250
+ if (count * 2 <= span) {
251
+ const step = Math.max(1, (span / count) | 0);
252
+ // Center the assigned range: leave equal padding at both ends.
253
+ const used = (count - 1) * step + 1;
254
+ const startPad = Math.max(0, (span - used) >> 1);
255
+ let label = tagLow + startPad;
256
+ for (const node of inWindow) {
257
+ node._omTag = label;
258
+ label += step;
259
+ }
260
+ return;
261
+ }
262
+ // Window overcrowded — expand. Doubling depth doubles span.
263
+ // If span exceeds the label space, fall back to a global relabel.
264
+ depth++;
265
+ span <<= 1;
266
+ if (span >= LABEL_MAX) {
267
+ this.globalRelabel();
268
+ return;
269
+ }
270
+ }
271
+ }
272
+ /**
273
+ * Fallback when the windowed relabel walks all the way up to the
274
+ * full label space without finding a sparse-enough window. Spreads
275
+ * every node uniformly across [0, LABEL_MAX).
276
+ *
277
+ * @internal
278
+ */
279
+ globalRelabel() {
280
+ const all = [];
281
+ let cursor = this.firstNode;
282
+ while (cursor !== null) {
283
+ all.push(cursor);
284
+ cursor = cursor.next;
285
+ }
286
+ const stride = Math.max(1, (LABEL_MAX / (all.length + 1)) | 0);
287
+ let label = stride;
288
+ for (const node of all) {
289
+ node._omTag = label;
290
+ label += stride;
291
+ }
292
+ }
293
+ }
294
+ //# sourceMappingURL=order-maintenance.js.map