binary-decision-diagram 4.0.0 → 5.0.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 (185) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +211 -31
  3. package/dist/cjs/src/abstract-node.js +7 -4
  4. package/dist/cjs/src/abstract-node.js.map +1 -1
  5. package/dist/cjs/src/branches.d.ts +1 -0
  6. package/dist/cjs/src/branches.js +2 -1
  7. package/dist/cjs/src/branches.js.map +1 -1
  8. package/dist/cjs/src/create-bdd-from-truth-table.js.map +1 -1
  9. package/dist/cjs/src/index.d.ts +2 -1
  10. package/dist/cjs/src/index.es5.js +17 -7
  11. package/dist/cjs/src/index.es5.js.map +1 -1
  12. package/dist/cjs/src/index.js +2 -1
  13. package/dist/cjs/src/index.js.map +1 -1
  14. package/dist/cjs/src/internal-node.js +6 -3
  15. package/dist/cjs/src/internal-node.js.map +1 -1
  16. package/dist/cjs/src/optimize-brute-force.js +5 -7
  17. package/dist/cjs/src/optimize-brute-force.js.map +1 -1
  18. package/dist/cjs/src/ordering/build-bdd.d.ts +13 -0
  19. package/dist/cjs/src/ordering/build-bdd.js +64 -0
  20. package/dist/cjs/src/ordering/build-bdd.js.map +1 -0
  21. package/dist/cjs/src/ordering/dense-truth-table.d.ts +42 -0
  22. package/dist/cjs/src/ordering/dense-truth-table.js +125 -0
  23. package/dist/cjs/src/ordering/dense-truth-table.js.map +1 -0
  24. package/dist/cjs/src/ordering/exact-cost-ordering.d.ts +91 -0
  25. package/dist/cjs/src/ordering/exact-cost-ordering.js +351 -0
  26. package/dist/cjs/src/ordering/exact-cost-ordering.js.map +1 -0
  27. package/dist/cjs/src/ordering/exact-ordering.d.ts +89 -0
  28. package/dist/cjs/src/ordering/exact-ordering.js +260 -0
  29. package/dist/cjs/src/ordering/exact-ordering.js.map +1 -0
  30. package/dist/cjs/src/ordering/index.d.ts +22 -0
  31. package/dist/cjs/src/ordering/index.js +38 -0
  32. package/dist/cjs/src/ordering/index.js.map +1 -0
  33. package/dist/cjs/src/ordering/int-pair-map.d.ts +20 -0
  34. package/dist/cjs/src/ordering/int-pair-map.js +85 -0
  35. package/dist/cjs/src/ordering/int-pair-map.js.map +1 -0
  36. package/dist/cjs/src/ordering/local-search.d.ts +114 -0
  37. package/dist/cjs/src/ordering/local-search.js +317 -0
  38. package/dist/cjs/src/ordering/local-search.js.map +1 -0
  39. package/dist/cjs/src/ordering/optimize-ordering.d.ts +153 -0
  40. package/dist/cjs/src/ordering/optimize-ordering.js +406 -0
  41. package/dist/cjs/src/ordering/optimize-ordering.js.map +1 -0
  42. package/dist/cjs/src/ordering/ordering-evaluator.d.ts +198 -0
  43. package/dist/cjs/src/ordering/ordering-evaluator.js +384 -0
  44. package/dist/cjs/src/ordering/ordering-evaluator.js.map +1 -0
  45. package/dist/cjs/src/ordering/shared-diagram.d.ts +85 -0
  46. package/dist/cjs/src/ordering/shared-diagram.js +295 -0
  47. package/dist/cjs/src/ordering/shared-diagram.js.map +1 -0
  48. package/dist/cjs/src/packed/index.d.ts +2 -0
  49. package/dist/cjs/src/{minimal-string → packed}/index.js +2 -5
  50. package/dist/cjs/src/packed/index.js.map +1 -0
  51. package/dist/cjs/src/packed/packed-bdd-base64-string.d.ts +3 -0
  52. package/dist/cjs/src/packed/packed-bdd-base64-string.js +46 -0
  53. package/dist/cjs/src/packed/packed-bdd-base64-string.js.map +1 -0
  54. package/dist/cjs/src/packed/packed-bdd.d.ts +13 -0
  55. package/dist/cjs/src/packed/packed-bdd.js +70 -0
  56. package/dist/cjs/src/packed/packed-bdd.js.map +1 -0
  57. package/dist/cjs/src/root-node.d.ts +1 -2
  58. package/dist/cjs/src/root-node.js +1 -5
  59. package/dist/cjs/src/root-node.js.map +1 -1
  60. package/dist/cjs/src/types.d.ts +0 -12
  61. package/dist/cjs/src/util.js +14 -5
  62. package/dist/cjs/src/util.js.map +1 -1
  63. package/dist/esm/src/abstract-node.js +7 -4
  64. package/dist/esm/src/abstract-node.js.map +1 -1
  65. package/dist/esm/src/branches.d.ts +1 -0
  66. package/dist/esm/src/branches.js +1 -0
  67. package/dist/esm/src/branches.js.map +1 -1
  68. package/dist/esm/src/create-bdd-from-truth-table.js.map +1 -1
  69. package/dist/esm/src/index.d.ts +2 -1
  70. package/dist/esm/src/index.js +2 -1
  71. package/dist/esm/src/index.js.map +1 -1
  72. package/dist/esm/src/internal-node.js +7 -4
  73. package/dist/esm/src/internal-node.js.map +1 -1
  74. package/dist/esm/src/optimize-brute-force.js +5 -7
  75. package/dist/esm/src/optimize-brute-force.js.map +1 -1
  76. package/dist/esm/src/ordering/build-bdd.d.ts +13 -0
  77. package/dist/esm/src/ordering/build-bdd.js +61 -0
  78. package/dist/esm/src/ordering/build-bdd.js.map +1 -0
  79. package/dist/esm/src/ordering/dense-truth-table.d.ts +42 -0
  80. package/dist/esm/src/ordering/dense-truth-table.js +117 -0
  81. package/dist/esm/src/ordering/dense-truth-table.js.map +1 -0
  82. package/dist/esm/src/ordering/exact-cost-ordering.d.ts +91 -0
  83. package/dist/esm/src/ordering/exact-cost-ordering.js +347 -0
  84. package/dist/esm/src/ordering/exact-cost-ordering.js.map +1 -0
  85. package/dist/esm/src/ordering/exact-ordering.d.ts +89 -0
  86. package/dist/esm/src/ordering/exact-ordering.js +256 -0
  87. package/dist/esm/src/ordering/exact-ordering.js.map +1 -0
  88. package/dist/esm/src/ordering/index.d.ts +22 -0
  89. package/dist/esm/src/ordering/index.js +17 -0
  90. package/dist/esm/src/ordering/index.js.map +1 -0
  91. package/dist/esm/src/ordering/int-pair-map.d.ts +20 -0
  92. package/dist/esm/src/ordering/int-pair-map.js +81 -0
  93. package/dist/esm/src/ordering/int-pair-map.js.map +1 -0
  94. package/dist/esm/src/ordering/local-search.d.ts +114 -0
  95. package/dist/esm/src/ordering/local-search.js +308 -0
  96. package/dist/esm/src/ordering/local-search.js.map +1 -0
  97. package/dist/esm/src/ordering/optimize-ordering.d.ts +153 -0
  98. package/dist/esm/src/ordering/optimize-ordering.js +399 -0
  99. package/dist/esm/src/ordering/optimize-ordering.js.map +1 -0
  100. package/dist/esm/src/ordering/ordering-evaluator.d.ts +198 -0
  101. package/dist/esm/src/ordering/ordering-evaluator.js +377 -0
  102. package/dist/esm/src/ordering/ordering-evaluator.js.map +1 -0
  103. package/dist/esm/src/ordering/shared-diagram.d.ts +85 -0
  104. package/dist/esm/src/ordering/shared-diagram.js +289 -0
  105. package/dist/esm/src/ordering/shared-diagram.js.map +1 -0
  106. package/dist/esm/src/packed/index.d.ts +2 -0
  107. package/dist/esm/src/packed/index.js +3 -0
  108. package/dist/esm/src/packed/index.js.map +1 -0
  109. package/dist/esm/src/packed/packed-bdd-base64-string.d.ts +3 -0
  110. package/dist/esm/src/packed/packed-bdd-base64-string.js +42 -0
  111. package/dist/esm/src/packed/packed-bdd-base64-string.js.map +1 -0
  112. package/dist/esm/src/packed/packed-bdd.d.ts +13 -0
  113. package/dist/esm/src/packed/packed-bdd.js +66 -0
  114. package/dist/esm/src/packed/packed-bdd.js.map +1 -0
  115. package/dist/esm/src/root-node.d.ts +1 -2
  116. package/dist/esm/src/root-node.js +1 -5
  117. package/dist/esm/src/root-node.js.map +1 -1
  118. package/dist/esm/src/types.d.ts +0 -12
  119. package/dist/esm/src/util.js +14 -5
  120. package/dist/esm/src/util.js.map +1 -1
  121. package/docs/variable-ordering.md +306 -0
  122. package/package.json +11 -9
  123. package/src/abstract-node.ts +7 -5
  124. package/src/branches.ts +2 -0
  125. package/src/create-bdd-from-truth-table.ts +1 -1
  126. package/src/index.ts +2 -1
  127. package/src/internal-node.ts +7 -4
  128. package/src/optimize-brute-force.ts +5 -7
  129. package/src/ordering/build-bdd.ts +70 -0
  130. package/src/ordering/dense-truth-table.ts +161 -0
  131. package/src/ordering/exact-cost-ordering.ts +425 -0
  132. package/src/ordering/exact-ordering.ts +317 -0
  133. package/src/ordering/index.ts +57 -0
  134. package/src/ordering/int-pair-map.ts +85 -0
  135. package/src/ordering/local-search.ts +369 -0
  136. package/src/ordering/optimize-ordering.ts +570 -0
  137. package/src/ordering/ordering-evaluator.ts +479 -0
  138. package/src/ordering/shared-diagram.ts +310 -0
  139. package/src/packed/index.ts +2 -0
  140. package/src/packed/packed-bdd-base64-string.ts +47 -0
  141. package/src/packed/packed-bdd.ts +98 -0
  142. package/src/root-node.ts +2 -8
  143. package/src/types.ts +0 -18
  144. package/src/util.ts +15 -6
  145. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  146. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js +0 -59
  147. package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
  148. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  149. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js +0 -23
  150. package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  151. package/dist/cjs/src/minimal-string/index.d.ts +0 -5
  152. package/dist/cjs/src/minimal-string/index.js.map +0 -1
  153. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  154. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js +0 -57
  155. package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  156. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  157. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js +0 -18
  158. package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  159. package/dist/cjs/src/minimal-string/string-format.d.ts +0 -9
  160. package/dist/cjs/src/minimal-string/string-format.js +0 -61
  161. package/dist/cjs/src/minimal-string/string-format.js.map +0 -1
  162. package/dist/esm/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
  163. package/dist/esm/src/minimal-string/bdd-to-minimal-string.js +0 -55
  164. package/dist/esm/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
  165. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
  166. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js +0 -19
  167. package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
  168. package/dist/esm/src/minimal-string/index.d.ts +0 -5
  169. package/dist/esm/src/minimal-string/index.js +0 -6
  170. package/dist/esm/src/minimal-string/index.js.map +0 -1
  171. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
  172. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js +0 -54
  173. package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
  174. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
  175. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js +0 -15
  176. package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
  177. package/dist/esm/src/minimal-string/string-format.d.ts +0 -9
  178. package/dist/esm/src/minimal-string/string-format.js +0 -54
  179. package/dist/esm/src/minimal-string/string-format.js.map +0 -1
  180. package/src/minimal-string/bdd-to-minimal-string.ts +0 -72
  181. package/src/minimal-string/bdd-to-simple-bdd.ts +0 -31
  182. package/src/minimal-string/index.ts +0 -5
  183. package/src/minimal-string/minimal-string-to-simple-bdd.ts +0 -67
  184. package/src/minimal-string/resolve-with-simple-bdd.ts +0 -23
  185. package/src/minimal-string/string-format.ts +0 -67
@@ -0,0 +1,289 @@
1
+ import { naturalOrdering } from './dense-truth-table.js';
2
+ import { OrderingEvaluator } from './ordering-evaluator.js';
3
+ import { IntPairMap } from './int-pair-map.js';
4
+ /**
5
+ * thrown by SharedDiagram when more nodes than allowed would be created
6
+ */
7
+ export class DiagramBudgetExceededError extends Error {
8
+ constructor() {
9
+ super('the exact search would need more diagram nodes than allowed');
10
+ }
11
+ }
12
+ export const DEFAULT_MAX_DIAGRAM_NODES = 4000000;
13
+ /**
14
+ * A hash-consed decision diagram of a fully specified truth table in the
15
+ * natural variable order, with a restrict() operation.
16
+ *
17
+ * Because the variable order is fixed, two functions are equal if and only if
18
+ * they have the same node id. The exact searches rely on this to recognize
19
+ * equal cofactors.
20
+ */
21
+ export class SharedDiagram {
22
+ table;
23
+ variableCount;
24
+ terminalCount;
25
+ rootId;
26
+ /** the boolean functions the truth table depends on, ascending */
27
+ relevant;
28
+ /** bit index of each relevant boolean function inside support masks, -1 for irrelevant ones */
29
+ compactOf;
30
+ nodeVar;
31
+ nodeLo;
32
+ nodeHi;
33
+ nodeSupport;
34
+ nodeCount;
35
+ uniqueTables;
36
+ restrictMemo = new IntPairMap(1 << 16);
37
+ maxNodes;
38
+ constructor(table,
39
+ /**
40
+ * restrict() creates nodes for the restricted functions, which can be a lot
41
+ * on unstructured functions. More nodes than this throw a DiagramBudgetExceededError.
42
+ * Default: 4000000 (roughly 400 MB)
43
+ */
44
+ maxNodes = DEFAULT_MAX_DIAGRAM_NODES) {
45
+ this.table = table;
46
+ this.maxNodes = maxNodes;
47
+ this.variableCount = table.variableCount;
48
+ this.terminalCount = table.terminalValues.length;
49
+ const evaluator = new OrderingEvaluator(table);
50
+ const diagram = evaluator.buildDiagram(naturalOrdering(this.variableCount));
51
+ const count = diagram.nodeLevel.length;
52
+ const capacity = Math.max(1024, count * 2);
53
+ this.nodeVar = new Int32Array(capacity);
54
+ this.nodeLo = new Int32Array(capacity);
55
+ this.nodeHi = new Int32Array(capacity);
56
+ this.nodeSupport = new Int32Array(capacity);
57
+ this.nodeVar.set(diagram.nodeLevel);
58
+ this.nodeLo.set(diagram.nodeLo);
59
+ this.nodeHi.set(diagram.nodeHi);
60
+ this.nodeCount = count;
61
+ this.rootId = diagram.root;
62
+ // relevant variables and their compact bit index
63
+ this.compactOf = new Int32Array(this.variableCount).fill(-1);
64
+ this.relevant = [];
65
+ const rootSupport = this.rawSupport(diagram.root);
66
+ for (let v = 0; v < this.variableCount; v++) {
67
+ if ((rootSupport & (1 << v)) !== 0) {
68
+ this.compactOf[v] = this.relevant.length;
69
+ this.relevant.push(v);
70
+ }
71
+ }
72
+ // support masks in compact bit indexes; children always have smaller ids
73
+ for (let i = 0; i < count; i++) {
74
+ this.nodeSupport[i] = this.supportOf(this.nodeLo[i]) |
75
+ this.supportOf(this.nodeHi[i]) |
76
+ (1 << this.compactOf[this.nodeVar[i]]);
77
+ }
78
+ this.uniqueTables = [];
79
+ for (let v = 0; v < this.variableCount; v++) {
80
+ this.uniqueTables.push(new IntPairMap(256));
81
+ }
82
+ for (let id = this.terminalCount; id < this.terminalCount + count; id++) {
83
+ const i = id - this.terminalCount;
84
+ this.uniqueTables[this.nodeVar[i]].set(this.nodeLo[i], this.nodeHi[i], id);
85
+ }
86
+ }
87
+ isTerminal(id) {
88
+ return id < this.terminalCount;
89
+ }
90
+ /** amount of internal nodes created so far */
91
+ get size() {
92
+ return this.nodeCount;
93
+ }
94
+ /** true when the diagram of the natural ordering alone already exceeds the node budget */
95
+ get overBudget() {
96
+ return this.nodeCount > this.maxNodes;
97
+ }
98
+ /**
99
+ * support mask (compact bit indexes) of a node, 0 for terminals
100
+ */
101
+ supportOf(id) {
102
+ return id < this.terminalCount ? 0 : this.nodeSupport[id - this.terminalCount];
103
+ }
104
+ dependsOn(id, variable) {
105
+ return (this.supportOf(id) & (1 << this.compactOf[variable])) !== 0;
106
+ }
107
+ /**
108
+ * the function with `variable` fixed to `value`
109
+ */
110
+ restrict(g, variable, value) {
111
+ if (g < this.terminalCount) {
112
+ return g;
113
+ }
114
+ const index = g - this.terminalCount;
115
+ if ((this.nodeSupport[index] & (1 << this.compactOf[variable])) === 0) {
116
+ return g;
117
+ }
118
+ const v = this.nodeVar[index];
119
+ if (v === variable) {
120
+ return value === 0 ? this.nodeLo[index] : this.nodeHi[index];
121
+ }
122
+ const memoKey = variable * 2 + value;
123
+ const memo = this.restrictMemo.get(g, memoKey);
124
+ if (memo !== -1) {
125
+ return memo;
126
+ }
127
+ const lo = this.restrict(this.nodeLo[index], variable, value);
128
+ const hi = this.restrict(this.nodeHi[index], variable, value);
129
+ const result = this.makeNode(v, lo, hi);
130
+ this.restrictMemo.set(g, memoKey, result);
131
+ return result;
132
+ }
133
+ /**
134
+ * Moves the boolean functions the truth table does not depend on
135
+ * to the bottom, keeping the order of the others.
136
+ */
137
+ normalizeOrdering(ordering) {
138
+ const relevant = [];
139
+ const irrelevant = [];
140
+ for (let i = 0; i < ordering.length; i++) {
141
+ if (this.compactOf[ordering[i]] === -1) {
142
+ irrelevant.push(ordering[i]);
143
+ }
144
+ else {
145
+ relevant.push(ordering[i]);
146
+ }
147
+ }
148
+ return relevant.concat(irrelevant);
149
+ }
150
+ irrelevantVariables() {
151
+ return naturalOrdering(this.variableCount).filter(v => this.compactOf[v] === -1);
152
+ }
153
+ makeNode(variable, lo, hi) {
154
+ if (lo === hi) {
155
+ return lo;
156
+ }
157
+ const table = this.uniqueTables[variable];
158
+ const existing = table.get(lo, hi);
159
+ if (existing !== -1) {
160
+ return existing;
161
+ }
162
+ if (this.nodeCount >= this.maxNodes) {
163
+ throw new DiagramBudgetExceededError();
164
+ }
165
+ if (this.nodeCount === this.nodeVar.length) {
166
+ this.growNodes();
167
+ }
168
+ const index = this.nodeCount++;
169
+ const id = index + this.terminalCount;
170
+ this.nodeVar[index] = variable;
171
+ this.nodeLo[index] = lo;
172
+ this.nodeHi[index] = hi;
173
+ this.nodeSupport[index] = this.supportOf(lo) | this.supportOf(hi) | (1 << this.compactOf[variable]);
174
+ table.set(lo, hi, id);
175
+ return id;
176
+ }
177
+ /**
178
+ * support in natural variable bits, only used before the compact mapping exists
179
+ */
180
+ rawSupport(id) {
181
+ const memo = new Map();
182
+ const recurse = (node) => {
183
+ if (node < this.terminalCount) {
184
+ return 0;
185
+ }
186
+ const known = memo.get(node);
187
+ if (known !== undefined) {
188
+ return known;
189
+ }
190
+ const index = node - this.terminalCount;
191
+ const ret = recurse(this.nodeLo[index]) | recurse(this.nodeHi[index]) | (1 << this.nodeVar[index]);
192
+ memo.set(node, ret);
193
+ return ret;
194
+ };
195
+ return recurse(id);
196
+ }
197
+ growNodes() {
198
+ const capacity = this.nodeVar.length * 2;
199
+ const grow = (old) => {
200
+ const ret = new Int32Array(capacity);
201
+ ret.set(old);
202
+ return ret;
203
+ };
204
+ this.nodeVar = grow(this.nodeVar);
205
+ this.nodeLo = grow(this.nodeLo);
206
+ this.nodeHi = grow(this.nodeHi);
207
+ this.nodeSupport = grow(this.nodeSupport);
208
+ }
209
+ }
210
+ /**
211
+ * binary min-heap of search states, deterministic tie breaking:
212
+ * smaller estimate first, then larger cost (deeper states), then smaller subset
213
+ */
214
+ export class StateHeap {
215
+ estimates = [];
216
+ costs = [];
217
+ subsets = [];
218
+ get size() {
219
+ return this.estimates.length;
220
+ }
221
+ push(estimate, cost, subset) {
222
+ this.estimates.push(estimate);
223
+ this.costs.push(cost);
224
+ this.subsets.push(subset);
225
+ let i = this.estimates.length - 1;
226
+ while (i > 0) {
227
+ const parent = (i - 1) >> 1;
228
+ if (this.less(i, parent)) {
229
+ this.swap(i, parent);
230
+ i = parent;
231
+ }
232
+ else {
233
+ break;
234
+ }
235
+ }
236
+ }
237
+ pop() {
238
+ const ret = {
239
+ estimate: this.estimates[0],
240
+ cost: this.costs[0],
241
+ subset: this.subsets[0]
242
+ };
243
+ const last = this.estimates.length - 1;
244
+ this.swap(0, last);
245
+ this.estimates.pop();
246
+ this.costs.pop();
247
+ this.subsets.pop();
248
+ let i = 0;
249
+ const size = this.estimates.length;
250
+ while (true) {
251
+ const left = i * 2 + 1;
252
+ const right = left + 1;
253
+ let smallest = i;
254
+ if (left < size && this.less(left, smallest)) {
255
+ smallest = left;
256
+ }
257
+ if (right < size && this.less(right, smallest)) {
258
+ smallest = right;
259
+ }
260
+ if (smallest === i) {
261
+ break;
262
+ }
263
+ this.swap(i, smallest);
264
+ i = smallest;
265
+ }
266
+ return ret;
267
+ }
268
+ less(a, b) {
269
+ if (this.estimates[a] !== this.estimates[b]) {
270
+ return this.estimates[a] < this.estimates[b];
271
+ }
272
+ if (this.costs[a] !== this.costs[b]) {
273
+ return this.costs[a] > this.costs[b];
274
+ }
275
+ return this.subsets[a] < this.subsets[b];
276
+ }
277
+ swap(a, b) {
278
+ let tmp = this.estimates[a];
279
+ this.estimates[a] = this.estimates[b];
280
+ this.estimates[b] = tmp;
281
+ tmp = this.costs[a];
282
+ this.costs[a] = this.costs[b];
283
+ this.costs[b] = tmp;
284
+ tmp = this.subsets[a];
285
+ this.subsets[a] = this.subsets[b];
286
+ this.subsets[b] = tmp;
287
+ }
288
+ }
289
+ //# sourceMappingURL=shared-diagram.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shared-diagram.js","sourceRoot":"","sources":["../../../../src/ordering/shared-diagram.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export * from './packed-bdd.js';
2
+ export * from './packed-bdd-base64-string.js';
@@ -0,0 +1,3 @@
1
+ export * from './packed-bdd.js';
2
+ export * from './packed-bdd-base64-string.js';
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/packed/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,+BAA+B,CAAC"}
@@ -0,0 +1,3 @@
1
+ import type { PackedBdd } from './packed-bdd.js';
2
+ export declare function packedBddToBase64String(packedBdd: PackedBdd): string;
3
+ export declare function packedBddFromBase64String(str: string): PackedBdd;
@@ -0,0 +1,42 @@
1
+ /*
2
+
3
+ String transport format of a PackedBdd, to embed it into JavaScript source code.
4
+ The string only contains ASCII characters that are safe inside of quotes,
5
+ so bundlers and minifiers never have to escape anything.
6
+
7
+ - The first char is the byte width of the entries: '1', '2' or '4'
8
+ - The rest is the standard base64 of the memory of the typed array
9
+
10
+ The base64 is decoded with the native Uint8Array.fromBase64() where it exists
11
+ and with atob() everywhere else, both are faster than decoding it in JavaScript.
12
+ The typed array then directly uses the decoded memory. This assumes a little-endian
13
+ platform, which are all browsers and nearly all Node.js servers.
14
+
15
+ */
16
+ export function packedBddToBase64String(packedBdd) {
17
+ const bytes = new Uint8Array(packedBdd.buffer, packedBdd.byteOffset, packedBdd.byteLength);
18
+ let binary = '';
19
+ const chunkSize = 0x8000;
20
+ for (let i = 0; i < bytes.length; i += chunkSize) {
21
+ binary += String.fromCharCode.apply(null, bytes.subarray(i, i + chunkSize));
22
+ }
23
+ return packedBdd.BYTES_PER_ELEMENT + btoa(binary);
24
+ }
25
+ function base64ToBytes(base64) {
26
+ const fromBase64 = Uint8Array.fromBase64;
27
+ if (fromBase64) {
28
+ return fromBase64(base64);
29
+ }
30
+ const binary = atob(base64);
31
+ const bytes = new Uint8Array(binary.length);
32
+ for (let i = 0; i < binary.length; i++) {
33
+ bytes[i] = binary.charCodeAt(i);
34
+ }
35
+ return bytes;
36
+ }
37
+ export function packedBddFromBase64String(str) {
38
+ const width = str.charCodeAt(0) - 48;
39
+ const bytes = base64ToBytes(str.slice(1));
40
+ return width === 1 ? bytes : width === 2 ? new Uint16Array(bytes.buffer) : new Uint32Array(bytes.buffer);
41
+ }
42
+ //# sourceMappingURL=packed-bdd-base64-string.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packed-bdd-base64-string.js","sourceRoot":"","sources":["../../../../src/packed/packed-bdd-base64-string.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;EAcE;AAEF,MAAM,UAAU,uBAAuB,CAAC,SAAoB;IACxD,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,UAAU,EAAE,SAAS,CAAC,UAAU,CAAC,CAAC;IAE3F,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,SAAS,GAAG,MAAM,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,SAAS,EAAE,CAAC;QAC/C,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,CAAQ,CAAC,CAAC;IACvF,CAAC;IACD,OAAO,SAAS,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,aAAa,CAAC,MAAc;IACjC,MAAM,UAAU,GAAI,UAAkB,CAAC,UAAU,CAAC;IAClD,IAAI,UAAU,EAAE,CAAC;QACb,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;IAC5B,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC5C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,GAAW;IACjD,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;IACrC,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC1C,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7G,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { RootNode } from '../root-node.js';
2
+ import type { ResolverFunctions } from '../types.js';
3
+ export type PackedBdd = Uint8Array | Uint16Array | Uint32Array;
4
+ /**
5
+ * Creates a PackedBdd from a (minimized) BDD.
6
+ * The leaf values must be non-negative integers.
7
+ */
8
+ export declare function bddToPackedBdd(bdd: RootNode): PackedBdd;
9
+ /**
10
+ * Resolves a value by walking directly over the PackedBdd.
11
+ * Works with every array type (also a plain number[]).
12
+ */
13
+ export declare function resolveWithPackedBdd<T = any>(packedBdd: ArrayLike<number>, fns: ResolverFunctions<T>, input: T): number;
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Creates a PackedBdd from a (minimized) BDD.
3
+ * The leaf values must be non-negative integers.
4
+ */
5
+ export function bddToPackedBdd(bdd) {
6
+ const branchesOf = (node) => node.branches;
7
+ // breadth first, branch 0 before branch 1, so the output is deterministic
8
+ const nonLeafNodes = [bdd];
9
+ const idByNode = new Map([[bdd, 0]]);
10
+ for (let i = 0; i < nonLeafNodes.length; i++) {
11
+ const branches = branchesOf(nonLeafNodes[i]);
12
+ for (const child of [branches.getBranch('0'), branches.getBranch('1')]) {
13
+ if (!child.isLeafNode() && !idByNode.has(child)) {
14
+ idByNode.set(child, nonLeafNodes.length);
15
+ nonLeafNodes.push(child);
16
+ }
17
+ }
18
+ }
19
+ const n = nonLeafNodes.length;
20
+ const ref = (node) => {
21
+ if (!node.isLeafNode()) {
22
+ return idByNode.get(node);
23
+ }
24
+ const value = node.asLeafNode().value;
25
+ if (!Number.isInteger(value) || value < 0) {
26
+ throw new Error('PackedBdd only supports non-negative integer leaf values, got ' + value);
27
+ }
28
+ return n + value;
29
+ };
30
+ const entries = [];
31
+ let max = 0;
32
+ nonLeafNodes.forEach(node => {
33
+ const branches = branchesOf(node);
34
+ const nodeEntries = [node.level, ref(branches.getBranch('0')), ref(branches.getBranch('1'))];
35
+ nodeEntries.forEach(entry => {
36
+ entries.push(entry);
37
+ max = Math.max(max, entry);
38
+ });
39
+ });
40
+ if (max <= 0xFF) {
41
+ return Uint8Array.from(entries);
42
+ }
43
+ else if (max <= 0xFFFF) {
44
+ return Uint16Array.from(entries);
45
+ }
46
+ else if (max <= 0xFFFFFFFF) {
47
+ return Uint32Array.from(entries);
48
+ }
49
+ throw new Error('BDD too big for a PackedBdd');
50
+ }
51
+ /**
52
+ * Resolves a value by walking directly over the PackedBdd.
53
+ * Works with every array type (also a plain number[]).
54
+ */
55
+ export function resolveWithPackedBdd(packedBdd, fns, input) {
56
+ const n = packedBdd.length / 3;
57
+ let i = 0;
58
+ while (true) {
59
+ const ref = packedBdd[fns[packedBdd[i]](input) ? i + 2 : i + 1];
60
+ if (ref >= n) {
61
+ return ref - n;
62
+ }
63
+ i = ref * 3;
64
+ }
65
+ }
66
+ //# sourceMappingURL=packed-bdd.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"packed-bdd.js","sourceRoot":"","sources":["../../../../src/packed/packed-bdd.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { AbstractNode } from './abstract-node.js';
2
2
  import { Branches } from './branches.js';
3
- import type { NonRootNode, ResolverFunctions, SimpleBdd } from './types.js';
3
+ import type { NonRootNode, ResolverFunctions } from './types.js';
4
4
  import { LeafNode } from './leaf-node.js';
5
5
  export declare class RootNode extends AbstractNode {
6
6
  branches: Branches;
@@ -24,5 +24,4 @@ export declare class RootNode extends AbstractNode {
24
24
  */
25
25
  removeIrrelevantLeafNodes(leafNodeValue: number): void;
26
26
  resolve(fns: ResolverFunctions, booleanFunctionInput: any): number;
27
- toSimpleBdd(): SimpleBdd;
28
27
  }
@@ -1,7 +1,6 @@
1
1
  import { AbstractNode } from './abstract-node.js';
2
2
  import { Branches } from './branches.js';
3
3
  import { lastOfArray } from './util.js';
4
- import { bddToSimpleBdd } from './minimal-string/index.js';
5
4
  export class RootNode extends AbstractNode {
6
5
  branches = new Branches(this);
7
6
  levels = [];
@@ -62,7 +61,7 @@ export class RootNode extends AbstractNode {
62
61
  }
63
62
  let successCount = 0;
64
63
  let lastLevel = lastOfArray(this.getLevels());
65
- while (lastLevel > 0) {
64
+ while (lastLevel >= 0) {
66
65
  const nodes = this.getNodesOfLevel(lastLevel);
67
66
  if (logState) {
68
67
  console.log('minimize() run for level ' + lastLevel +
@@ -146,8 +145,5 @@ export class RootNode extends AbstractNode {
146
145
  }
147
146
  }
148
147
  }
149
- toSimpleBdd() {
150
- return bddToSimpleBdd(this);
151
- }
152
148
  }
153
149
  //# sourceMappingURL=root-node.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"root-node.js","sourceRoot":"","sources":["../../../src/root-node.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAMzC,OAAO,EACH,WAAW,EACd,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,OAAO,QAAS,SAAQ,YAAY;IAC/B,QAAQ,GAAa,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC;IAExC,MAAM,GAAa,EAAE,CAAC;IACtB,YAAY,GAAmC,IAAI,GAAG,EAAE,CAAC;IAEhE;QACI,KAAK,CACD,CAAC,EACD,IAAI,EACJ,UAAU,CACb,CAAC;QACF,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,SAAS,GAAsB,IAAI,GAAG,EAAE,CAAC;QAC/C,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACpB,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IACxC,CAAC;IAEM,OAAO,CAAC,IAAiB;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC;QAEzB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAED,UAAU,CAAC,IAAiB;QACxB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAqB,CAAC;QAClE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;QAC5D,CAAC;QACD,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACrB,CAAC;IAEO,oBAAoB,CAAC,KAAa;QACtC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;IACL,CAAC;IAEM,SAAS;QACZ,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC;IAEM,eAAe,CAAC,KAAa;QAChC,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,GAAG,CAAC,KAAK,CAAqB,CAAC;QAC7D,OAAO,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAEM,UAAU;QACb,IAAI,GAAG,GAAW,CAAC,CAAC;QACpB,IAAI,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;YACvD,GAAG,GAAG,GAAG,GAAG,WAAW,CAAC;QAC5B,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,CAAC;IACf,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,WAAoB,KAAK;QAC9B,oDAAoD;QACpD,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,QAAQ,EAAE,CAAC;gBACX,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;YAC5C,CAAC;YACD,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,IAAI,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;YAC9C,OAAO,SAAS,GAAG,CAAC,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAmB,IAAI,CAAC,eAAe,CAAC,SAAS,CAAmB,CAAC;gBAChF,IAAI,QAAQ,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CACP,2BAA2B,GAAG,SAAS;wBACvC,QAAQ,GAAG,KAAK,CAAC,MAAM,GAAG,QAAQ,CACrC,CAAC;oBACF,sBAAsB;gBAC1B,CAAC;gBAED,IAAI,SAAS,GAAG,CAAC,CAAC;gBAClB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,SAAS,EAAE,CAAC;oBAEZ,gDAAgD;oBAChD,IAAI,QAAQ,IAAI,SAAS,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;wBACrC,OAAO,CAAC,GAAG,CACP,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAChC,CAAC;oBACN,CAAC;oBACD,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;wBACpB,4CAA4C;wBAC5C,MAAM,aAAa,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,oBAAoB,EAAE,CAAC;wBAC/D,IAAI,aAAa,EAAE,CAAC;4BAChB,YAAY,EAAE,CAAC;wBACnB,CAAC;oBACL,CAAC;oBACD,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE,CAAC;wBACzC,MAAM,OAAO,GAAG,IAAoB,CAAC;wBACrC,MAAM,aAAa,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;wBACnD,IAAI,eAAe,GAAG,KAAK,CAAC;wBAC5B,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;4BACnB,+CAA+C;4BAC/C,eAAe,GAAG,OAAO,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;wBAC1D,CAAC;wBACD,IAAI,aAAa,IAAI,eAAe,EAAE,CAAC;4BACnC,YAAY,EAAE,CAAC;wBACnB,CAAC;oBACL,CAAC;gBACL,CAAC;gBACD,SAAS,EAAE,CAAC;YAChB,CAAC;YACD,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;gBACrB,iCAAiC;gBACjC,IAAI,GAAG,IAAI,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,IAAI,QAAQ,EAAE,CAAC;oBACX,OAAO,CAAC,GAAG,CACP,kCAAkC;wBAClC,YAAY,GAAG,gBAAgB,CAClC,CAAC;gBACN,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAEM,YAAY;QACf,MAAM,SAAS,GAAG,WAAW,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC;QAChD,MAAM,SAAS,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,OAAO,EAAgB,CAAC;QAC1E,OAAO,SAAS,CAAC;IACrB,CAAC;IAED;;;OAGG;IACH,yBAAyB,CAAC,aAAqB;QAC3C,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,OAAO,CAAC,IAAI,EAAE,CAAC;YACX,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,MAAM,SAAS,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;YACtC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;gBAC/B,MAAM,OAAO,GAAG,QAAQ,CAAC,mBAAmB,CAAC,aAAa,CAAC,CAAC;gBAC5D,IAAI,OAAO,EAAE,CAAC;oBACV,YAAY,EAAE,CAAC;gBACnB,CAAC;YACL,CAAC;YACD,IAAI,CAAC,QAAQ,EAAE,CAAC;YAEhB,IAAI,YAAY,KAAK,CAAC,EAAE,CAAC;gBACrB,IAAI,GAAG,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;IACL,CAAC;IAED,OAAO,CACH,GAAsB,EACtB,oBAAyB;QAEzB,IAAI,WAAW,GAAQ,IAAI,CAAC;QAC5B,OAAO,IAAI,EAAE,CAAC;YACV,MAAM,aAAa,GAAY,GAAG,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAC5E,WAAW,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACnE,IAAI,WAAW,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;gBAClC,OAAO,WAAW,CAAC,KAAK,CAAC;YAC7B,CAAC;QACL,CAAC;IACL,CAAC;IAEM,WAAW;QACd,OAAO,cAAc,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;CACJ"}
1
+ {"version":3,"file":"root-node.js","sourceRoot":"","sources":["../../../src/root-node.ts"],"names":[],"mappings":"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"}
@@ -10,15 +10,3 @@ export type ResolverFunction<T> = (i: T) => boolean;
10
10
  export type ResolverFunctions<T = any> = {
11
11
  [k: number]: ResolverFunction<T>;
12
12
  };
13
- export type SimpleBddLeafNode = number;
14
- /**
15
- * a simple bdd is a json-representation
16
- * which could be parsed from the minimal string
17
- * use this to have great performance
18
- * when resolving values
19
- */
20
- export type SimpleBdd = {
21
- 0: SimpleBdd | SimpleBddLeafNode;
22
- 1: SimpleBdd | SimpleBddLeafNode;
23
- l: number;
24
- };
@@ -48,7 +48,8 @@ export function nextNodeId() {
48
48
  * @link https://stackoverflow.com/a/16155417
49
49
  */
50
50
  export function decimalToPaddedBinary(decimal, padding) {
51
- const binary = (decimal >>> 0).toString(2);
51
+ // >>> 0 would cut off everything above 32 bits, only use it for the two's complement of negative numbers
52
+ const binary = (decimal < 0 ? decimal >>> 0 : decimal).toString(2);
52
53
  const padded = binary.padStart(padding, '0');
53
54
  return padded;
54
55
  }
@@ -73,10 +74,18 @@ export function maxBinaryWithLength(length) {
73
74
  return new Array(length).fill(0).map(() => '1').join('');
74
75
  }
75
76
  export function getNextStateSet(stateSet) {
76
- const decimal = binaryToDecimal(stateSet);
77
- const increase = decimal + 1;
78
- const binary = decimalToPaddedBinary(increase, stateSet.length);
79
- return binary;
77
+ if (stateSet.length <= 52) {
78
+ // fast path, the number stays exact
79
+ const decimal = binaryToDecimal(stateSet);
80
+ return decimalToPaddedBinary(decimal + 1, stateSet.length);
81
+ }
82
+ // longer keys would lose precision as a number, so increment the string directly
83
+ const lastZero = stateSet.lastIndexOf('0');
84
+ if (lastZero === -1) {
85
+ // overflow, the result gets one char longer
86
+ return '1' + '0'.repeat(stateSet.length);
87
+ }
88
+ return stateSet.slice(0, lastZero) + '1' + '0'.repeat(stateSet.length - lastZero - 1);
80
89
  }
81
90
  export function firstKeyOfMap(map) {
82
91
  const iterator1 = map.keys();
@@ -1 +1 @@
1
- {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"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"}