binary-decision-diagram 3.2.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.
- package/CHANGELOG.md +6 -0
- package/README.md +211 -31
- package/dist/cjs/src/abstract-node.js +7 -4
- package/dist/cjs/src/abstract-node.js.map +1 -1
- package/dist/cjs/src/branches.d.ts +4 -1
- package/dist/cjs/src/branches.js +10 -9
- package/dist/cjs/src/branches.js.map +1 -1
- package/dist/cjs/src/create-bdd-from-truth-table.js +1 -2
- package/dist/cjs/src/create-bdd-from-truth-table.js.map +1 -1
- package/dist/cjs/src/ensure-correct-bdd.js +2 -3
- package/dist/cjs/src/ensure-correct-bdd.js.map +1 -1
- package/dist/cjs/src/fill-truth-table.js +1 -2
- package/dist/cjs/src/fill-truth-table.js.map +1 -1
- package/dist/cjs/src/find-similar-node.js +1 -2
- package/dist/cjs/src/find-similar-node.js.map +1 -1
- package/dist/cjs/src/index.d.ts +2 -1
- package/dist/cjs/src/index.es5.js +17 -7
- package/dist/cjs/src/index.es5.js.map +1 -1
- package/dist/cjs/src/index.js +2 -1
- package/dist/cjs/src/index.js.map +1 -1
- package/dist/cjs/src/internal-node.js +6 -3
- package/dist/cjs/src/internal-node.js.map +1 -1
- package/dist/cjs/src/optimize-brute-force.js +10 -12
- package/dist/cjs/src/optimize-brute-force.js.map +1 -1
- package/dist/cjs/src/ordering/build-bdd.d.ts +13 -0
- package/dist/cjs/src/ordering/build-bdd.js +64 -0
- package/dist/cjs/src/ordering/build-bdd.js.map +1 -0
- package/dist/cjs/src/ordering/dense-truth-table.d.ts +42 -0
- package/dist/cjs/src/ordering/dense-truth-table.js +125 -0
- package/dist/cjs/src/ordering/dense-truth-table.js.map +1 -0
- package/dist/cjs/src/ordering/exact-cost-ordering.d.ts +91 -0
- package/dist/cjs/src/ordering/exact-cost-ordering.js +351 -0
- package/dist/cjs/src/ordering/exact-cost-ordering.js.map +1 -0
- package/dist/cjs/src/ordering/exact-ordering.d.ts +89 -0
- package/dist/cjs/src/ordering/exact-ordering.js +260 -0
- package/dist/cjs/src/ordering/exact-ordering.js.map +1 -0
- package/dist/cjs/src/ordering/index.d.ts +22 -0
- package/dist/cjs/src/ordering/index.js +38 -0
- package/dist/cjs/src/ordering/index.js.map +1 -0
- package/dist/cjs/src/ordering/int-pair-map.d.ts +20 -0
- package/dist/cjs/src/ordering/int-pair-map.js +85 -0
- package/dist/cjs/src/ordering/int-pair-map.js.map +1 -0
- package/dist/cjs/src/ordering/local-search.d.ts +114 -0
- package/dist/cjs/src/ordering/local-search.js +317 -0
- package/dist/cjs/src/ordering/local-search.js.map +1 -0
- package/dist/cjs/src/ordering/optimize-ordering.d.ts +153 -0
- package/dist/cjs/src/ordering/optimize-ordering.js +406 -0
- package/dist/cjs/src/ordering/optimize-ordering.js.map +1 -0
- package/dist/cjs/src/ordering/ordering-evaluator.d.ts +198 -0
- package/dist/cjs/src/ordering/ordering-evaluator.js +384 -0
- package/dist/cjs/src/ordering/ordering-evaluator.js.map +1 -0
- package/dist/cjs/src/ordering/shared-diagram.d.ts +85 -0
- package/dist/cjs/src/ordering/shared-diagram.js +295 -0
- package/dist/cjs/src/ordering/shared-diagram.js.map +1 -0
- package/dist/cjs/src/packed/index.d.ts +2 -0
- package/dist/cjs/src/{minimal-string → packed}/index.js +2 -5
- package/dist/cjs/src/packed/index.js.map +1 -0
- package/dist/cjs/src/packed/packed-bdd-base64-string.d.ts +3 -0
- package/dist/cjs/src/packed/packed-bdd-base64-string.js +46 -0
- package/dist/cjs/src/packed/packed-bdd-base64-string.js.map +1 -0
- package/dist/cjs/src/packed/packed-bdd.d.ts +13 -0
- package/dist/cjs/src/packed/packed-bdd.js +70 -0
- package/dist/cjs/src/packed/packed-bdd.js.map +1 -0
- package/dist/cjs/src/root-node.d.ts +1 -2
- package/dist/cjs/src/root-node.js +4 -9
- package/dist/cjs/src/root-node.js.map +1 -1
- package/dist/cjs/src/types.d.ts +0 -12
- package/dist/cjs/src/util.js +29 -21
- package/dist/cjs/src/util.js.map +1 -1
- package/dist/esm/src/abstract-node.js +7 -4
- package/dist/esm/src/abstract-node.js.map +1 -1
- package/dist/esm/src/branches.d.ts +4 -1
- package/dist/esm/src/branches.js +8 -7
- package/dist/esm/src/branches.js.map +1 -1
- package/dist/esm/src/create-bdd-from-truth-table.js.map +1 -1
- package/dist/esm/src/index.d.ts +2 -1
- package/dist/esm/src/index.js +2 -1
- package/dist/esm/src/index.js.map +1 -1
- package/dist/esm/src/internal-node.js +7 -4
- package/dist/esm/src/internal-node.js.map +1 -1
- package/dist/esm/src/optimize-brute-force.js +5 -7
- package/dist/esm/src/optimize-brute-force.js.map +1 -1
- package/dist/esm/src/ordering/build-bdd.d.ts +13 -0
- package/dist/esm/src/ordering/build-bdd.js +61 -0
- package/dist/esm/src/ordering/build-bdd.js.map +1 -0
- package/dist/esm/src/ordering/dense-truth-table.d.ts +42 -0
- package/dist/esm/src/ordering/dense-truth-table.js +117 -0
- package/dist/esm/src/ordering/dense-truth-table.js.map +1 -0
- package/dist/esm/src/ordering/exact-cost-ordering.d.ts +91 -0
- package/dist/esm/src/ordering/exact-cost-ordering.js +347 -0
- package/dist/esm/src/ordering/exact-cost-ordering.js.map +1 -0
- package/dist/esm/src/ordering/exact-ordering.d.ts +89 -0
- package/dist/esm/src/ordering/exact-ordering.js +256 -0
- package/dist/esm/src/ordering/exact-ordering.js.map +1 -0
- package/dist/esm/src/ordering/index.d.ts +22 -0
- package/dist/esm/src/ordering/index.js +17 -0
- package/dist/esm/src/ordering/index.js.map +1 -0
- package/dist/esm/src/ordering/int-pair-map.d.ts +20 -0
- package/dist/esm/src/ordering/int-pair-map.js +81 -0
- package/dist/esm/src/ordering/int-pair-map.js.map +1 -0
- package/dist/esm/src/ordering/local-search.d.ts +114 -0
- package/dist/esm/src/ordering/local-search.js +308 -0
- package/dist/esm/src/ordering/local-search.js.map +1 -0
- package/dist/esm/src/ordering/optimize-ordering.d.ts +153 -0
- package/dist/esm/src/ordering/optimize-ordering.js +399 -0
- package/dist/esm/src/ordering/optimize-ordering.js.map +1 -0
- package/dist/esm/src/ordering/ordering-evaluator.d.ts +198 -0
- package/dist/esm/src/ordering/ordering-evaluator.js +377 -0
- package/dist/esm/src/ordering/ordering-evaluator.js.map +1 -0
- package/dist/esm/src/ordering/shared-diagram.d.ts +85 -0
- package/dist/esm/src/ordering/shared-diagram.js +289 -0
- package/dist/esm/src/ordering/shared-diagram.js.map +1 -0
- package/dist/esm/src/packed/index.d.ts +2 -0
- package/dist/esm/src/packed/index.js +3 -0
- package/dist/esm/src/packed/index.js.map +1 -0
- package/dist/esm/src/packed/packed-bdd-base64-string.d.ts +3 -0
- package/dist/esm/src/packed/packed-bdd-base64-string.js +42 -0
- package/dist/esm/src/packed/packed-bdd-base64-string.js.map +1 -0
- package/dist/esm/src/packed/packed-bdd.d.ts +13 -0
- package/dist/esm/src/packed/packed-bdd.js +66 -0
- package/dist/esm/src/packed/packed-bdd.js.map +1 -0
- package/dist/esm/src/root-node.d.ts +1 -2
- package/dist/esm/src/root-node.js +5 -10
- package/dist/esm/src/root-node.js.map +1 -1
- package/dist/esm/src/types.d.ts +0 -12
- package/dist/esm/src/util.js +14 -5
- package/dist/esm/src/util.js.map +1 -1
- package/docs/variable-ordering.md +306 -0
- package/package.json +15 -12
- package/src/abstract-node.ts +7 -5
- package/src/branches.ts +9 -7
- package/src/create-bdd-from-truth-table.ts +1 -1
- package/src/index.ts +2 -1
- package/src/internal-node.ts +7 -4
- package/src/optimize-brute-force.ts +5 -7
- package/src/ordering/build-bdd.ts +70 -0
- package/src/ordering/dense-truth-table.ts +161 -0
- package/src/ordering/exact-cost-ordering.ts +425 -0
- package/src/ordering/exact-ordering.ts +317 -0
- package/src/ordering/index.ts +57 -0
- package/src/ordering/int-pair-map.ts +85 -0
- package/src/ordering/local-search.ts +369 -0
- package/src/ordering/optimize-ordering.ts +570 -0
- package/src/ordering/ordering-evaluator.ts +479 -0
- package/src/ordering/shared-diagram.ts +310 -0
- package/src/packed/index.ts +2 -0
- package/src/packed/packed-bdd-base64-string.ts +47 -0
- package/src/packed/packed-bdd.ts +98 -0
- package/src/root-node.ts +8 -17
- package/src/types.ts +0 -18
- package/src/util.ts +15 -6
- package/dist/cjs/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
- package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js +0 -60
- package/dist/cjs/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
- package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
- package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js +0 -24
- package/dist/cjs/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
- package/dist/cjs/src/minimal-string/index.d.ts +0 -5
- package/dist/cjs/src/minimal-string/index.js.map +0 -1
- package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
- package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js +0 -58
- package/dist/cjs/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
- package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
- package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js +0 -21
- package/dist/cjs/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
- package/dist/cjs/src/minimal-string/string-format.d.ts +0 -9
- package/dist/cjs/src/minimal-string/string-format.js +0 -61
- package/dist/cjs/src/minimal-string/string-format.js.map +0 -1
- package/dist/esm/src/minimal-string/bdd-to-minimal-string.d.ts +0 -8
- package/dist/esm/src/minimal-string/bdd-to-minimal-string.js +0 -55
- package/dist/esm/src/minimal-string/bdd-to-minimal-string.js.map +0 -1
- package/dist/esm/src/minimal-string/bdd-to-simple-bdd.d.ts +0 -11
- package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js +0 -19
- package/dist/esm/src/minimal-string/bdd-to-simple-bdd.js.map +0 -1
- package/dist/esm/src/minimal-string/index.d.ts +0 -5
- package/dist/esm/src/minimal-string/index.js +0 -6
- package/dist/esm/src/minimal-string/index.js.map +0 -1
- package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.d.ts +0 -2
- package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js +0 -54
- package/dist/esm/src/minimal-string/minimal-string-to-simple-bdd.js.map +0 -1
- package/dist/esm/src/minimal-string/resolve-with-simple-bdd.d.ts +0 -2
- package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js +0 -17
- package/dist/esm/src/minimal-string/resolve-with-simple-bdd.js.map +0 -1
- package/dist/esm/src/minimal-string/string-format.d.ts +0 -9
- package/dist/esm/src/minimal-string/string-format.js +0 -54
- package/dist/esm/src/minimal-string/string-format.js.map +0 -1
- package/src/minimal-string/bdd-to-minimal-string.ts +0 -72
- package/src/minimal-string/bdd-to-simple-bdd.ts +0 -31
- package/src/minimal-string/index.ts +0 -5
- package/src/minimal-string/minimal-string-to-simple-bdd.ts +0 -67
- package/src/minimal-string/resolve-with-simple-bdd.ts +0 -25
- 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 @@
|
|
|
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,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":"AA2BA;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,GAAa;IACxC,MAAM,UAAU,GAAG,CAAC,IAAkB,EAAE,EAAE,CAAE,IAAoB,CAAC,QAAQ,CAAC;IAE1E,0EAA0E;IAC1E,MAAM,YAAY,GAAmB,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAuB,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC;QAC7C,KAAK,MAAM,KAAK,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAC9C,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,CAAC;gBACzC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAC7B,CAAC;QACL,CAAC;IACL,CAAC;IAED,MAAM,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;IAC9B,MAAM,GAAG,GAAG,CAAC,IAAkB,EAAU,EAAE;QACvC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE,CAAC;YACrB,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAW,CAAC;QACxC,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;QACtC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;YACxC,MAAM,IAAI,KAAK,CAAC,gEAAgE,GAAG,KAAK,CAAC,CAAC;QAC9F,CAAC;QACD,OAAO,CAAC,GAAG,KAAK,CAAC;IACrB,CAAC,CAAC;IACF,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,GAAG,GAAG,CAAC,CAAC;IACZ,YAAY,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;QACxB,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC;QAClC,MAAM,WAAW,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC7F,WAAW,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YACxB,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACpB,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/B,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,IAAI,GAAG,IAAI,IAAI,EAAE,CAAC;QACd,OAAO,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;SAAM,IAAI,GAAG,IAAI,MAAM,EAAE,CAAC;QACvB,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,GAAG,IAAI,UAAU,EAAE,CAAC;QAC3B,OAAO,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;AACnD,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAChC,SAA4B,EAC5B,GAAyB,EACzB,KAAQ;IAER,MAAM,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;QAChE,IAAI,GAAG,IAAI,CAAC,EAAE,CAAC;YACX,OAAO,GAAG,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;IAChB,CAAC;AACL,CAAC"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { AbstractNode } from './abstract-node.js';
|
|
2
2
|
import { Branches } from './branches.js';
|
|
3
|
-
import type { NonRootNode, ResolverFunctions
|
|
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
|
-
import { lastOfArray
|
|
4
|
-
import { bddToSimpleBdd } from './minimal-string/index.js';
|
|
3
|
+
import { lastOfArray } from './util.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
|
|
64
|
+
while (lastLevel >= 0) {
|
|
66
65
|
const nodes = this.getNodesOfLevel(lastLevel);
|
|
67
66
|
if (logState) {
|
|
68
67
|
console.log('minimize() run for level ' + lastLevel +
|
|
@@ -140,15 +139,11 @@ export class RootNode extends AbstractNode {
|
|
|
140
139
|
let currentNode = this;
|
|
141
140
|
while (true) {
|
|
142
141
|
const booleanResult = fns[currentNode.level](booleanFunctionInput);
|
|
143
|
-
|
|
144
|
-
currentNode
|
|
145
|
-
|
|
146
|
-
return currentNode.asLeafNode().value;
|
|
142
|
+
currentNode = currentNode.branches.data[booleanResult ? '1' : '0'];
|
|
143
|
+
if (currentNode.type === 'LeafNode') {
|
|
144
|
+
return currentNode.value;
|
|
147
145
|
}
|
|
148
146
|
}
|
|
149
147
|
}
|
|
150
|
-
toSimpleBdd() {
|
|
151
|
-
return bddToSimpleBdd(this);
|
|
152
|
-
}
|
|
153
148
|
}
|
|
154
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;
|
|
1
|
+
{"version":3,"file":"root-node.js","sourceRoot":"","sources":["../../../src/root-node.ts"],"names":[],"mappings":"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"}
|
package/dist/esm/src/types.d.ts
CHANGED
|
@@ -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
|
-
};
|
package/dist/esm/src/util.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
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();
|
package/dist/esm/src/util.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,sBAAsB,CAAC,GAAkB;IACrD,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IAChB,CAAC;SAAM,CAAC;QACJ,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,CAAU;IAC7C,IAAI,CAAC,EAAE,CAAC;QACJ,OAAO,GAAG,CAAC;IACf,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,CAAC;IACf,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,KAAoB;IAChD,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;QAChB,OAAO,GAAG,CAAC;IACf,CAAC;SAAM,CAAC;QACJ,OAAO,GAAG,CAAC;IACf,CAAC;AACL,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAChC,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,SAAS,MAAM,CAAC,SAAiB,CAAC;IAC9B,IAAI,MAAM,GAAG,EAAE,CAAC;IAChB,MAAM,UAAU,GAAG,gEAAgE,CAAC;IACpF,MAAM,gBAAgB,GAAG,UAAU,CAAC,MAAM,CAAC;IAC3C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC9B,MAAM,IAAI,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,gBAAgB,CAAC,CAAC,CAAC;IAC9E,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC;AAED,MAAM,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AAC/B,IAAI,SAAS,GAAG,CAAC,CAAC;AAClB,MAAM,UAAU,UAAU;IACtB,MAAM,GAAG,GAAG,OAAO,GAAG,YAAY,GAAG,GAAG,GAAG,SAAS,CAAC;IACrD,SAAS,EAAE,CAAC;IACZ,OAAO,GAAG,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CACjC,OAAe,EACf,OAAe;IAEf,MAAM,MAAM,GAAG,CAAC,OAAO,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"util.js","sourceRoot":"","sources":["../../../src/util.ts"],"names":[],"mappings":"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"}
|