binary-decision-diagram 1.4.0 → 2.0.1
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/.github/workflows/main.yml +2 -2
- package/dist/es/abstract-node.js +45 -51
- package/dist/es/abstract-node.js.map +1 -1
- package/dist/es/branches.js +20 -22
- package/dist/es/branches.js.map +1 -1
- package/dist/es/create-bdd-from-truth-table.js +19 -57
- package/dist/es/create-bdd-from-truth-table.js.map +1 -1
- package/dist/es/ensure-correct-bdd.js +26 -27
- package/dist/es/ensure-correct-bdd.js.map +1 -1
- package/dist/es/fill-truth-table.js +3 -3
- package/dist/es/fill-truth-table.js.map +1 -1
- package/dist/es/find-similar-node.js +3 -3
- package/dist/es/find-similar-node.js.map +1 -1
- package/dist/es/internal-node.js +15 -35
- package/dist/es/internal-node.js.map +1 -1
- package/dist/es/leaf-node.js +14 -34
- package/dist/es/leaf-node.js.map +1 -1
- package/dist/es/minimal-string/bdd-to-minimal-string.js +15 -15
- package/dist/es/minimal-string/bdd-to-minimal-string.js.map +1 -1
- package/dist/es/minimal-string/bdd-to-simple-bdd.js +2 -2
- package/dist/es/minimal-string/bdd-to-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/minimal-string-to-simple-bdd.js +27 -27
- package/dist/es/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/resolve-with-simple-bdd.js +4 -4
- package/dist/es/minimal-string/resolve-with-simple-bdd.js.map +1 -1
- package/dist/es/minimal-string/string-format.js +7 -7
- package/dist/es/minimal-string/string-format.js.map +1 -1
- package/dist/es/optimize-brute-force.d.ts +4 -4
- package/dist/es/optimize-brute-force.js +88 -186
- package/dist/es/optimize-brute-force.js.map +1 -1
- package/dist/es/parents.js +19 -47
- package/dist/es/parents.js.map +1 -1
- package/dist/es/root-node.js +79 -133
- package/dist/es/root-node.js.map +1 -1
- package/dist/es/types.d.ts +9 -9
- package/dist/es/util.js +21 -39
- package/dist/es/util.js.map +1 -1
- package/dist/lib/abstract-node.js +47 -52
- package/dist/lib/abstract-node.js.map +1 -1
- package/dist/lib/branches.js +20 -21
- package/dist/lib/branches.js.map +1 -1
- package/dist/lib/create-bdd-from-truth-table.js +23 -61
- package/dist/lib/create-bdd-from-truth-table.js.map +1 -1
- package/dist/lib/ensure-correct-bdd.js +26 -27
- package/dist/lib/ensure-correct-bdd.js.map +1 -1
- package/dist/lib/fill-truth-table.js +4 -4
- package/dist/lib/fill-truth-table.js.map +1 -1
- package/dist/lib/find-similar-node.js +3 -3
- package/dist/lib/find-similar-node.js.map +1 -1
- package/dist/lib/index.js +5 -1
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/internal-node.js +18 -37
- package/dist/lib/internal-node.js.map +1 -1
- package/dist/lib/leaf-node.js +17 -36
- package/dist/lib/leaf-node.js.map +1 -1
- package/dist/lib/minimal-string/bdd-to-minimal-string.js +17 -17
- package/dist/lib/minimal-string/bdd-to-minimal-string.js.map +1 -1
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js +2 -2
- package/dist/lib/minimal-string/bdd-to-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/index.js +5 -1
- package/dist/lib/minimal-string/index.js.map +1 -1
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js +29 -29
- package/dist/lib/minimal-string/minimal-string-to-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js +5 -5
- package/dist/lib/minimal-string/resolve-with-simple-bdd.js.map +1 -1
- package/dist/lib/minimal-string/string-format.js +5 -5
- package/dist/lib/minimal-string/string-format.js.map +1 -1
- package/dist/lib/optimize-brute-force.d.ts +4 -4
- package/dist/lib/optimize-brute-force.js +90 -188
- package/dist/lib/optimize-brute-force.js.map +1 -1
- package/dist/lib/parents.js +19 -46
- package/dist/lib/parents.js.map +1 -1
- package/dist/lib/root-node.js +83 -136
- package/dist/lib/root-node.js.map +1 -1
- package/dist/lib/types.d.ts +9 -9
- package/dist/lib/util.js +21 -39
- package/dist/lib/util.js.map +1 -1
- package/package.json +9 -9
- package/tsconfig.json +2 -2
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.AbstractNode = void 0;
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
4
|
+
const util_1 = require("./util");
|
|
5
|
+
const find_similar_node_1 = require("./find-similar-node");
|
|
6
|
+
class AbstractNode {
|
|
7
|
+
constructor(level, rootNode, type) {
|
|
8
8
|
this.level = level;
|
|
9
9
|
this.id = (0, util_1.nextNodeId)();
|
|
10
10
|
this.deleted = false;
|
|
@@ -14,26 +14,25 @@ var AbstractNode = /** @class */ (function () {
|
|
|
14
14
|
this.rootNode.addNode(this);
|
|
15
15
|
}
|
|
16
16
|
}
|
|
17
|
-
|
|
17
|
+
isEqualToOtherNode(otherNode,
|
|
18
18
|
// optimisation shortcut, is faster if own string already known
|
|
19
|
-
ownString) {
|
|
20
|
-
|
|
21
|
-
var ret = ownString === otherNode.toString();
|
|
19
|
+
ownString = this.toString()) {
|
|
20
|
+
const ret = ownString === otherNode.toString();
|
|
22
21
|
return ret;
|
|
23
|
-
}
|
|
22
|
+
}
|
|
24
23
|
// deletes the whole node
|
|
25
|
-
|
|
24
|
+
remove() {
|
|
26
25
|
this.ensureNotDeleted('remove');
|
|
27
26
|
// console.log('AbstractNode().remove() node: ' + this.id);
|
|
28
27
|
// console.log(this.toJSON(true));
|
|
29
28
|
if (this.isInternalNode()) {
|
|
30
|
-
|
|
29
|
+
const useNode = this;
|
|
31
30
|
if (useNode.parents.size > 0) {
|
|
32
31
|
throw new Error('cannot remove node with parents ' + this.id);
|
|
33
32
|
}
|
|
34
33
|
}
|
|
35
34
|
if (this.branches) {
|
|
36
|
-
|
|
35
|
+
const useNode = this;
|
|
37
36
|
if (useNode.branches.areBranchesStrictEqual()) {
|
|
38
37
|
useNode.branches.getBranch('0').parents.remove(useNode);
|
|
39
38
|
}
|
|
@@ -44,10 +43,9 @@ var AbstractNode = /** @class */ (function () {
|
|
|
44
43
|
}
|
|
45
44
|
this.deleted = true;
|
|
46
45
|
this.rootNode.removeNode(this);
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
var ret = {
|
|
46
|
+
}
|
|
47
|
+
toJSON(withId = false) {
|
|
48
|
+
const ret = {
|
|
51
49
|
id: withId ? this.id : undefined,
|
|
52
50
|
deleted: withId ? this.deleted : undefined,
|
|
53
51
|
type: this.type,
|
|
@@ -60,22 +58,22 @@ var AbstractNode = /** @class */ (function () {
|
|
|
60
58
|
ret.value = this.asLeafNode().value;
|
|
61
59
|
}
|
|
62
60
|
if (this.branches && !this.branches.deleted) {
|
|
63
|
-
|
|
61
|
+
const branches = this.branches;
|
|
64
62
|
ret.branches = {
|
|
65
63
|
'0': branches.getBranch('0').toJSON(withId),
|
|
66
64
|
'1': branches.getBranch('1').toJSON(withId)
|
|
67
65
|
};
|
|
68
66
|
}
|
|
69
67
|
return ret;
|
|
70
|
-
}
|
|
68
|
+
}
|
|
71
69
|
// a strange string-representation
|
|
72
70
|
// to make an equal check between nodes
|
|
73
|
-
|
|
74
|
-
|
|
71
|
+
toString() {
|
|
72
|
+
let ret = '' +
|
|
75
73
|
'<' +
|
|
76
74
|
this.type + ':' + this.level;
|
|
77
75
|
if (this.branches) {
|
|
78
|
-
|
|
76
|
+
const branches = this.branches;
|
|
79
77
|
ret += '|0:' + branches.getBranch('0');
|
|
80
78
|
ret += '|1:' + branches.getBranch('1');
|
|
81
79
|
}
|
|
@@ -84,43 +82,42 @@ var AbstractNode = /** @class */ (function () {
|
|
|
84
82
|
}
|
|
85
83
|
ret += '>';
|
|
86
84
|
return ret;
|
|
87
|
-
}
|
|
88
|
-
|
|
85
|
+
}
|
|
86
|
+
isRootNode() {
|
|
89
87
|
return this.type === 'RootNode';
|
|
90
|
-
}
|
|
91
|
-
|
|
88
|
+
}
|
|
89
|
+
isInternalNode() {
|
|
92
90
|
return this.type === 'InternalNode';
|
|
93
|
-
}
|
|
94
|
-
|
|
91
|
+
}
|
|
92
|
+
isLeafNode() {
|
|
95
93
|
return this.type === 'LeafNode';
|
|
96
|
-
}
|
|
97
|
-
|
|
94
|
+
}
|
|
95
|
+
asRootNode() {
|
|
98
96
|
if (!this.isRootNode()) {
|
|
99
97
|
throw new Error('ouch');
|
|
100
98
|
}
|
|
101
99
|
return this;
|
|
102
|
-
}
|
|
103
|
-
|
|
100
|
+
}
|
|
101
|
+
asInternalNode() {
|
|
104
102
|
if (!this.isInternalNode()) {
|
|
105
103
|
throw new Error('ouch');
|
|
106
104
|
}
|
|
107
105
|
return this;
|
|
108
|
-
}
|
|
109
|
-
|
|
106
|
+
}
|
|
107
|
+
asLeafNode() {
|
|
110
108
|
if (!this.isLeafNode()) {
|
|
111
109
|
throw new Error('ouch');
|
|
112
110
|
}
|
|
113
111
|
return this;
|
|
114
|
-
}
|
|
115
|
-
|
|
116
|
-
if (op === void 0) { op = 'unknown'; }
|
|
112
|
+
}
|
|
113
|
+
ensureNotDeleted(op = 'unknown') {
|
|
117
114
|
if (this.deleted) {
|
|
118
115
|
throw new Error('forbidden operation ' + op + ' on deleted node ' + this.id);
|
|
119
116
|
}
|
|
120
|
-
}
|
|
121
|
-
|
|
117
|
+
}
|
|
118
|
+
log() {
|
|
122
119
|
console.log(JSON.stringify(this.toJSON(true), null, 2));
|
|
123
|
-
}
|
|
120
|
+
}
|
|
124
121
|
/**
|
|
125
122
|
* by the elimination-rule of bdd,
|
|
126
123
|
* if two branches of the same level are equal,
|
|
@@ -129,35 +126,34 @@ var AbstractNode = /** @class */ (function () {
|
|
|
129
126
|
* See page 21 at:
|
|
130
127
|
* @link https://people.eecs.berkeley.edu/~sseshia/219c/lectures/BinaryDecisionDiagrams.pdf
|
|
131
128
|
*/
|
|
132
|
-
|
|
129
|
+
applyEliminationRule(
|
|
133
130
|
// can be provided for better performance
|
|
134
131
|
nodesOfSameLevel) {
|
|
135
|
-
var _this = this;
|
|
136
132
|
this.ensureNotDeleted('applyEliminationRule');
|
|
137
133
|
if (!nodesOfSameLevel) {
|
|
138
134
|
nodesOfSameLevel = this.rootNode.getNodesOfLevel(this.level);
|
|
139
135
|
}
|
|
140
|
-
|
|
136
|
+
const other = (0, find_similar_node_1.findSimilarNode)(this, nodesOfSameLevel);
|
|
141
137
|
if (other) {
|
|
142
138
|
// console.log('applyEliminationRule() remove:' + this.id + '; other: ' + other.id);
|
|
143
139
|
// keep 'other', remove 'this'
|
|
144
140
|
// move own parents to other
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
ownParents.forEach(
|
|
141
|
+
const ownParents = this.parents.getAll();
|
|
142
|
+
const parentsWithStrictEqualBranches = [];
|
|
143
|
+
ownParents.forEach((parent) => {
|
|
148
144
|
// console.log('ownParent: ' + parent.id);
|
|
149
|
-
|
|
145
|
+
const branchKey = parent.branches.getKeyOfNode(this);
|
|
150
146
|
// console.log('branchKey: ' + branchKey);
|
|
151
147
|
parent.branches.setBranch(branchKey, other);
|
|
152
148
|
if (parent.branches.areBranchesStrictEqual()) {
|
|
153
|
-
|
|
149
|
+
parentsWithStrictEqualBranches.push(parent);
|
|
154
150
|
}
|
|
155
151
|
// remove parents from own list
|
|
156
152
|
// this will auto-remove the connection to the other '1'-branch
|
|
157
|
-
|
|
153
|
+
this.parents.remove(parent);
|
|
158
154
|
});
|
|
159
155
|
// parents that now have equal branches, must be removed again
|
|
160
|
-
|
|
156
|
+
parentsWithStrictEqualBranches.forEach(node => {
|
|
161
157
|
if (node.isInternalNode()) {
|
|
162
158
|
// console.log('trigger applyReductionRule from applyEliminationRule');
|
|
163
159
|
node.applyReductionRule();
|
|
@@ -168,8 +164,7 @@ var AbstractNode = /** @class */ (function () {
|
|
|
168
164
|
else {
|
|
169
165
|
return false;
|
|
170
166
|
}
|
|
171
|
-
}
|
|
172
|
-
|
|
173
|
-
}());
|
|
167
|
+
}
|
|
168
|
+
}
|
|
174
169
|
exports.AbstractNode = AbstractNode;
|
|
175
170
|
//# sourceMappingURL=abstract-node.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"abstract-node.js","sourceRoot":"","sources":["../../src/abstract-node.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"abstract-node.js","sourceRoot":"","sources":["../../src/abstract-node.ts"],"names":[],"mappings":";;;AAAA,iCAAoC;AAMpC,2DAAsD;AAEtD,MAAa,YAAY;IAMrB,YACW,KAAa,EACpB,QAAyB,EACzB,IAAc;QAFP,UAAK,GAAL,KAAK,CAAQ;QANf,OAAE,GAAW,IAAA,iBAAU,GAAE,CAAC;QAC5B,YAAO,GAAY,KAAK,CAAC;QAS5B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,QAAQ,GAAG,QAAoB,CAAC;QACrC,IAAI,QAAQ,EAAE;YACV,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAW,CAAC,CAAC;SACtC;IACL,CAAC;IAED,kBAAkB,CACd,SAAiC;IACjC,+DAA+D;IAC/D,YAAoB,IAAI,CAAC,QAAQ,EAAE;QAEnC,MAAM,GAAG,GAAG,SAAS,KAAK,SAAS,CAAC,QAAQ,EAAE,CAAC;QAC/C,OAAO,GAAG,CAAC;IACf,CAAC;IAED,yBAAyB;IAClB,MAAM;QACT,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAEhC,2DAA2D;QAC3D,kCAAkC;QAElC,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;YACvB,MAAM,OAAO,GAAiB,IAAW,CAAC;YAC1C,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE;gBAC1B,MAAM,IAAI,KAAK,CAAC,kCAAkC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;aACjE;SACJ;QAED,IAAK,IAAY,CAAC,QAAQ,EAAE;YACxB,MAAM,OAAO,GAAgB,IAAW,CAAC;YACzC,IAAI,OAAO,CAAC,QAAQ,CAAC,sBAAsB,EAAE,EAAE;gBAC3C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aAC3D;iBAAM;gBACH,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBACxD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;aAC3D;SACJ;QAED,IAAI,CAAC,OAAO,GAAG,IAAI,CAAC;QACpB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,IAAW,CAAC,CAAC;IAC1C,CAAC;IAED,MAAM,CAAC,SAAkB,KAAK;QAC1B,MAAM,GAAG,GAAQ;YACb,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;YAChC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS;YAC1C,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,IAAI,CAAC,KAAK;SACpB,CAAC;QAEF,IAAI,MAAM,IAAK,IAAY,CAAC,OAAO,EAAE;YACjC,GAAG,CAAC,OAAO,GAAI,IAAY,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC;SAClD;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB,GAAG,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;SACvC;QACD,IAAK,IAAY,CAAC,QAAQ,IAAI,CAAE,IAAY,CAAC,QAAQ,CAAC,OAAO,EAAE;YAC3D,MAAM,QAAQ,GAAc,IAAY,CAAC,QAAQ,CAAC;YAClD,GAAG,CAAC,QAAQ,GAAG;gBACX,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;gBAC3C,GAAG,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC;aAC9C,CAAC;SACL;QAED,OAAO,GAAG,CAAC;IACf,CAAC;IAGD,kCAAkC;IAClC,uCAAuC;IACvC,QAAQ;QACJ,IAAI,GAAG,GAAG,EAAE;YACR,GAAG;YACH,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC;QAEjC,IAAK,IAAY,CAAC,QAAQ,EAAE;YACxB,MAAM,QAAQ,GAAc,IAAY,CAAC,QAAQ,CAAC;YAClD,GAAG,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;YACvC,GAAG,IAAI,KAAK,GAAG,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;SAC1C;QACD,IAAI,IAAI,CAAC,UAAU,EAAE,EAAE;YACnB,GAAG,IAAI,KAAK,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC;SAC1C;QACD,GAAG,IAAI,GAAG,CAAC;QACX,OAAO,GAAG,CAAC;IACf,CAAC;IAGD,UAAU;QACN,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;IACpC,CAAC;IACD,cAAc;QACV,OAAO,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC;IACxC,CAAC;IACD,UAAU;QACN,OAAO,IAAI,CAAC,IAAI,KAAK,UAAU,CAAC;IACpC,CAAC;IAED,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;QACD,OAAO,IAAW,CAAC;IACvB,CAAC;IACD,cAAc;QACV,IAAI,CAAC,IAAI,CAAC,cAAc,EAAE,EAAE;YACxB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;QACD,OAAO,IAAW,CAAC;IACvB,CAAC;IACD,UAAU;QACN,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,EAAE;YACpB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;SAC3B;QACD,OAAO,IAAW,CAAC;IACvB,CAAC;IAED,gBAAgB,CAAC,KAAa,SAAS;QACnC,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,EAAE,GAAG,mBAAmB,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC;SAChF;IACL,CAAC;IAEM,GAAG;QACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5D,CAAC;IAED;;;;;;;GAOD;IACC,oBAAoB;IAChB,yCAAyC;IACzC,gBAAsB;QAEtB,IAAI,CAAC,gBAAgB,CAAC,sBAAsB,CAAC,CAAC;QAC9C,IAAI,CAAC,gBAAgB,EAAE;YACnB,gBAAgB,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,KAAK,CAAU,CAAC;SACzE;QAED,MAAM,KAAK,GAAG,IAAA,mCAAe,EACzB,IAAI,EACJ,gBAAyB,CAC5B,CAAC;QACF,IAAI,KAAK,EAAE;YACP,oFAAoF;YAEpF,8BAA8B;YAE9B,4BAA4B;YAC5B,MAAM,UAAU,GAAI,IAAY,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;YAClD,MAAM,8BAA8B,GAAkB,EAAE,CAAC;YACzD,UAAU,CAAC,OAAO,CAAC,CAAC,MAAoB,EAAE,EAAE;gBACxC,0CAA0C;gBAC1C,MAAM,SAAS,GAAG,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAC,IAAW,CAAC,CAAC;gBAC5D,0CAA0C;gBAC1C,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;gBAE5C,IAAI,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,EAAE;oBAC1C,8BAA8B,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;iBAC/C;gBACD,+BAA+B;gBAC/B,+DAA+D;gBAC9D,IAAY,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;YACzC,CAAC,CAAC,CAAC;YAEH,8DAA8D;YAC9D,8BAA8B,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBAC1C,IAAI,IAAI,CAAC,cAAc,EAAE,EAAE;oBACvB,uEAAuE;oBACtE,IAAqB,CAAC,kBAAkB,EAAE,CAAC;iBAC/C;YACL,CAAC,CAAC,CAAC;YAEH,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;CACJ;AArMD,oCAqMC"}
|
package/dist/lib/branches.js
CHANGED
|
@@ -4,22 +4,22 @@ exports.ensureNodesNotStrictEqual = exports.Branches = void 0;
|
|
|
4
4
|
/**
|
|
5
5
|
* represents the branches of a single node
|
|
6
6
|
*/
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
class Branches {
|
|
8
|
+
constructor(node) {
|
|
9
9
|
this.node = node;
|
|
10
10
|
this.deleted = false;
|
|
11
11
|
this.branches = {};
|
|
12
12
|
}
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
setBranch(which, branchNode) {
|
|
14
|
+
const previous = this.branches[which];
|
|
15
15
|
if (previous === branchNode) {
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
18
|
// set new branch
|
|
19
19
|
this.branches[which] = branchNode;
|
|
20
20
|
branchNode.parents.add(this.node);
|
|
21
|
-
}
|
|
22
|
-
|
|
21
|
+
}
|
|
22
|
+
getKeyOfNode(node) {
|
|
23
23
|
if (this.getBranch('0') === node) {
|
|
24
24
|
return '0';
|
|
25
25
|
}
|
|
@@ -29,17 +29,17 @@ var Branches = /** @class */ (function () {
|
|
|
29
29
|
else {
|
|
30
30
|
throw new Error('none matched');
|
|
31
31
|
}
|
|
32
|
-
}
|
|
33
|
-
|
|
32
|
+
}
|
|
33
|
+
getBranch(which) {
|
|
34
34
|
return this.branches[which];
|
|
35
|
-
}
|
|
36
|
-
|
|
35
|
+
}
|
|
36
|
+
getBothBranches() {
|
|
37
37
|
return [
|
|
38
38
|
this.getBranch('0'),
|
|
39
39
|
this.getBranch('1')
|
|
40
40
|
];
|
|
41
|
-
}
|
|
42
|
-
|
|
41
|
+
}
|
|
42
|
+
hasBranchAsNode(node) {
|
|
43
43
|
if (this.getBranch('0') === node ||
|
|
44
44
|
this.getBranch('1') === node) {
|
|
45
45
|
return true;
|
|
@@ -47,8 +47,8 @@ var Branches = /** @class */ (function () {
|
|
|
47
47
|
else {
|
|
48
48
|
return false;
|
|
49
49
|
}
|
|
50
|
-
}
|
|
51
|
-
|
|
50
|
+
}
|
|
51
|
+
hasNodeIdAsBranch(id) {
|
|
52
52
|
if (this.getBranch('0').id === id ||
|
|
53
53
|
this.getBranch('1').id === id) {
|
|
54
54
|
return true;
|
|
@@ -56,16 +56,15 @@ var Branches = /** @class */ (function () {
|
|
|
56
56
|
else {
|
|
57
57
|
return false;
|
|
58
58
|
}
|
|
59
|
-
}
|
|
60
|
-
|
|
59
|
+
}
|
|
60
|
+
areBranchesStrictEqual() {
|
|
61
61
|
return this.branches['0'] === this.branches['1'];
|
|
62
|
-
}
|
|
63
|
-
|
|
62
|
+
}
|
|
63
|
+
hasEqualBranches() {
|
|
64
64
|
return JSON.stringify(this.branches['0']) ===
|
|
65
65
|
JSON.stringify(this.branches['1']);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
}());
|
|
66
|
+
}
|
|
67
|
+
}
|
|
69
68
|
exports.Branches = Branches;
|
|
70
69
|
function ensureNodesNotStrictEqual(node1, node2) {
|
|
71
70
|
if (node1 === node2) {
|
package/dist/lib/branches.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"branches.js","sourceRoot":"","sources":["../../src/branches.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH;
|
|
1
|
+
{"version":3,"file":"branches.js","sourceRoot":"","sources":["../../src/branches.ts"],"names":[],"mappings":";;;AAGA;;GAEG;AACH,MAAa,QAAQ;IAMjB,YACY,IAAiB;QAAjB,SAAI,GAAJ,IAAI,CAAa;QANtB,YAAO,GAAY,KAAK,CAAC;QACxB,aAAQ,GAEZ,EAAS,CAAC;IAIV,CAAC;IAEE,SAAS,CAAC,KAAoB,EAAE,UAAuB;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACtC,IAAI,QAAQ,KAAK,UAAU,EAAE;YACzB,OAAO;SACV;QAED,iBAAiB;QACjB,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,UAAU,CAAC;QAClC,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACtC,CAAC;IAEM,YAAY,CAAC,IAAiB;QACjC,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YAC9B,OAAO,GAAG,CAAC;SACd;aAAM,IAAI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE;YACrC,OAAO,GAAG,CAAC;SACd;aAAM;YACH,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;SACnC;IACL,CAAC;IAEM,SAAS,CAAC,KAAoB;QACjC,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;IAChC,CAAC;IAEM,eAAe;QAClB,OAAO;YACH,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;YACnB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC;SACtB,CAAC;IACN,CAAC;IAEM,eAAe,CAAC,IAAkB;QACrC,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI;YAC5B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,IAAI,EAC9B;YACE,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEM,iBAAiB,CAAC,EAAU;QAC/B,IACI,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE;YAC7B,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,EAC/B;YACE,OAAO,IAAI,CAAC;SACf;aAAM;YACH,OAAO,KAAK,CAAC;SAChB;IACL,CAAC;IAEM,sBAAsB;QACzB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;IACrD,CAAC;IAEM,gBAAgB;QACnB,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3C,CAAC;CACJ;AAxED,4BAwEC;AAED,SAAgB,yBAAyB,CACrC,KAAkB,EAClB,KAAkB;IAElB,IAAI,KAAK,KAAK,KAAK,EAAE;QACjB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;KAC5D;AACL,CAAC;AAPD,8DAOC"}
|
|
@@ -1,74 +1,36 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __values = (this && this.__values) || function(o) {
|
|
3
|
-
var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
|
|
4
|
-
if (m) return m.call(o);
|
|
5
|
-
if (o && typeof o.length === "number") return {
|
|
6
|
-
next: function () {
|
|
7
|
-
if (o && i >= o.length) o = void 0;
|
|
8
|
-
return { value: o && o[i++], done: !o };
|
|
9
|
-
}
|
|
10
|
-
};
|
|
11
|
-
throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
|
|
12
|
-
};
|
|
13
|
-
var __read = (this && this.__read) || function (o, n) {
|
|
14
|
-
var m = typeof Symbol === "function" && o[Symbol.iterator];
|
|
15
|
-
if (!m) return o;
|
|
16
|
-
var i = m.call(o), r, ar = [], e;
|
|
17
|
-
try {
|
|
18
|
-
while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
|
|
19
|
-
}
|
|
20
|
-
catch (error) { e = { error: error }; }
|
|
21
|
-
finally {
|
|
22
|
-
try {
|
|
23
|
-
if (r && !r.done && (m = i["return"])) m.call(i);
|
|
24
|
-
}
|
|
25
|
-
finally { if (e) throw e.error; }
|
|
26
|
-
}
|
|
27
|
-
return ar;
|
|
28
|
-
};
|
|
29
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
3
|
exports.createBddFromTruthTable = void 0;
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
4
|
+
const root_node_1 = require("./root-node");
|
|
5
|
+
const util_1 = require("./util");
|
|
6
|
+
const internal_node_1 = require("./internal-node");
|
|
7
|
+
const leaf_node_1 = require("./leaf-node");
|
|
35
8
|
function createBddFromTruthTable(truthTable) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
var mustBeSize = Math.pow(2, keyLength);
|
|
9
|
+
const root = new root_node_1.RootNode();
|
|
10
|
+
const firstKey = truthTable.keys().next().value;
|
|
11
|
+
const keyLength = firstKey.length;
|
|
12
|
+
const mustBeSize = Math.pow(2, keyLength);
|
|
41
13
|
if (truthTable.size !== mustBeSize) {
|
|
42
14
|
throw new Error('truth table has missing entries');
|
|
43
15
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (!lastNode.branches.getBranch(state)) {
|
|
54
|
-
lastNode.branches.setBranch(state, new internal_node_1.InternalNode(level, root, lastNode));
|
|
55
|
-
}
|
|
56
|
-
lastNode = lastNode.branches.getBranch(state);
|
|
57
|
-
}
|
|
58
|
-
// last node is leaf-node
|
|
59
|
-
var lastState = (0, util_1.lastChar)(stateSet);
|
|
60
|
-
if (lastNode.branches.getBranch(lastState)) {
|
|
61
|
-
throw new Error('leafNode already exists, this should not happen');
|
|
16
|
+
for (const [stateSet, value] of truthTable) {
|
|
17
|
+
let lastNode = root;
|
|
18
|
+
// itterate over each char of the state
|
|
19
|
+
for (let i = 0; i < (stateSet.length - 1); i++) {
|
|
20
|
+
const level = i + 1;
|
|
21
|
+
const state = stateSet.charAt(i);
|
|
22
|
+
// if node for this state-char not exists, add new one
|
|
23
|
+
if (!lastNode.branches.getBranch(state)) {
|
|
24
|
+
lastNode.branches.setBranch(state, new internal_node_1.InternalNode(level, root, lastNode));
|
|
62
25
|
}
|
|
63
|
-
lastNode.branches.
|
|
26
|
+
lastNode = lastNode.branches.getBranch(state);
|
|
64
27
|
}
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
if (truthTable_1_1 && !truthTable_1_1.done && (_a = truthTable_1.return)) _a.call(truthTable_1);
|
|
28
|
+
// last node is leaf-node
|
|
29
|
+
const lastState = (0, util_1.lastChar)(stateSet);
|
|
30
|
+
if (lastNode.branches.getBranch(lastState)) {
|
|
31
|
+
throw new Error('leafNode already exists, this should not happen');
|
|
70
32
|
}
|
|
71
|
-
|
|
33
|
+
lastNode.branches.setBranch(lastState, new leaf_node_1.LeafNode(stateSet.length, root, value, lastNode));
|
|
72
34
|
}
|
|
73
35
|
return root;
|
|
74
36
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"create-bdd-from-truth-table.js","sourceRoot":"","sources":["../../src/create-bdd-from-truth-table.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"create-bdd-from-truth-table.js","sourceRoot":"","sources":["../../src/create-bdd-from-truth-table.ts"],"names":[],"mappings":";;;AAAA,2CAAuC;AACvC,iCAAkC;AAClC,mDAA+C;AAC/C,2CAAuC;AAGvC,SAAgB,uBAAuB,CACnC,UAAsB;IAEtB,MAAM,IAAI,GAAG,IAAI,oBAAQ,EAAE,CAAC;IAE5B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC;IAChD,MAAM,SAAS,GAAG,QAAQ,CAAC,MAAM,CAAC;IAClC,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,IAAI,UAAU,CAAC,IAAI,KAAK,UAAU,EAAE;QAChC,MAAM,IAAI,KAAK,CAAC,iCAAiC,CAAC,CAAC;KACtD;IAGD,KAAK,MAAM,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,UAAU,EAAE;QACxC,IAAI,QAAQ,GAAgB,IAAI,CAAC;QAEjC,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;YAC5C,MAAM,KAAK,GAAG,CAAC,GAAG,CAAC,CAAC;YACpB,MAAM,KAAK,GAAkB,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAkB,CAAC;YAEjE,sDAAsD;YACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;gBACrC,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,KAAK,EACL,IAAI,4BAAY,CACZ,KAAK,EACL,IAAI,EACJ,QAAQ,CACX,CACJ,CAAC;aACL;YACD,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAgB,CAAC;SAChE;QAED,yBAAyB;QACzB,MAAM,SAAS,GAAG,IAAA,eAAQ,EAAC,QAAQ,CAAkB,CAAC;QACtD,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE;YACxC,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;SACtE;QACD,QAAQ,CAAC,QAAQ,CAAC,SAAS,CACvB,SAAS,EACT,IAAI,oBAAQ,CACR,QAAQ,CAAC,MAAM,EACf,IAAI,EACJ,KAAK,EACL,QAAQ,CACX,CACJ,CAAC;KACL;IAED,OAAO,IAAI,CAAC;AAChB,CAAC;AApDD,0DAoDC"}
|
|
@@ -6,28 +6,28 @@ exports.getNodesRecursive = exports.ensureCorrectBdd = void 0;
|
|
|
6
6
|
* to ensure everything is correct
|
|
7
7
|
*/
|
|
8
8
|
function ensureCorrectBdd(bdd) {
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
bdd.getLevels().forEach(
|
|
13
|
-
|
|
14
|
-
levelNodes.forEach(
|
|
9
|
+
const jsonString = JSON.stringify(bdd.toJSON(true));
|
|
10
|
+
let allNodes = [];
|
|
11
|
+
const nodesById = new Map();
|
|
12
|
+
bdd.getLevels().forEach(level => {
|
|
13
|
+
const levelNodes = bdd.getNodesOfLevel(level);
|
|
14
|
+
levelNodes.forEach(node => {
|
|
15
15
|
nodesById.set(node.id, node);
|
|
16
16
|
});
|
|
17
17
|
allNodes = allNodes.concat(levelNodes);
|
|
18
18
|
});
|
|
19
|
-
|
|
19
|
+
const recursiveNodes = getNodesRecursive(bdd);
|
|
20
20
|
if (allNodes.length !== recursiveNodes.size) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
const allNodesIds = allNodes.map(n => n.id).sort();
|
|
22
|
+
const recursiveNodesIds = Array.from(recursiveNodes).map(n => n.id).sort();
|
|
23
|
+
const nodesOnlyInRecursive = recursiveNodesIds.filter(id => !allNodesIds.includes(id));
|
|
24
24
|
// console.log(JSON.stringify(allNodes.map(n => n.id).sort(), null, 2));
|
|
25
25
|
// console.log(JSON.stringify(Array.from(recursiveNodes).map(n => n.id).sort(), null, 2));
|
|
26
26
|
if (recursiveNodes.size > allNodes.length) {
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
const firstId = nodesOnlyInRecursive[0];
|
|
28
|
+
const referenceToFirst = allNodes.find(n => {
|
|
29
29
|
if (n.isInternalNode()) {
|
|
30
|
-
return n.branches.hasNodeIdAsBranch(
|
|
30
|
+
return n.branches.hasNodeIdAsBranch(firstId);
|
|
31
31
|
}
|
|
32
32
|
return false;
|
|
33
33
|
});
|
|
@@ -40,11 +40,11 @@ function ensureCorrectBdd(bdd) {
|
|
|
40
40
|
'recursiveNodes: ' + recursiveNodes.size + ' ' +
|
|
41
41
|
'nodesOnlyInRecursive: ' + nodesOnlyInRecursive.join(', ') + ' ');
|
|
42
42
|
}
|
|
43
|
-
allNodes.forEach(
|
|
43
|
+
allNodes.forEach(node => {
|
|
44
44
|
if (node.isRootNode()) {
|
|
45
45
|
return;
|
|
46
46
|
}
|
|
47
|
-
|
|
47
|
+
const useNode = node;
|
|
48
48
|
if (node.deleted) {
|
|
49
49
|
throw new Error('ensureCorrectBdd() ' +
|
|
50
50
|
'bdd includes a deleted node');
|
|
@@ -55,24 +55,24 @@ function ensureCorrectBdd(bdd) {
|
|
|
55
55
|
'node has no parent ' + useNode.id);
|
|
56
56
|
}
|
|
57
57
|
if (useNode.isInternalNode()) {
|
|
58
|
-
|
|
59
|
-
|
|
58
|
+
const internalNode = useNode;
|
|
59
|
+
const bothBranches = internalNode.branches.getBothBranches();
|
|
60
60
|
// a node should not have 2 equal branches
|
|
61
|
-
if (
|
|
61
|
+
if (internalNode.branches.areBranchesStrictEqual()) {
|
|
62
62
|
throw new Error('ensureCorrectBdd() ' +
|
|
63
63
|
'node has two equal branches: ' +
|
|
64
|
-
bothBranches.map(
|
|
64
|
+
bothBranches.map(n => n.id).join(', '));
|
|
65
65
|
}
|
|
66
66
|
// each branch should have the node as parent
|
|
67
|
-
bothBranches.forEach(
|
|
68
|
-
if (!branch.parents.has(
|
|
67
|
+
bothBranches.forEach(branch => {
|
|
68
|
+
if (!branch.parents.has(internalNode)) {
|
|
69
69
|
throw new Error('ensureCorrectBdd() ' +
|
|
70
70
|
'branch must have the node as parent');
|
|
71
71
|
}
|
|
72
72
|
});
|
|
73
73
|
}
|
|
74
74
|
// each parent should have the child as branch
|
|
75
|
-
useNode.parents.getAll().forEach(
|
|
75
|
+
useNode.parents.getAll().forEach(parent => {
|
|
76
76
|
if (!parent.branches.hasBranchAsNode(useNode)) {
|
|
77
77
|
throw new Error('ensureCorrectBdd() ' +
|
|
78
78
|
'parent node does not have child as branch');
|
|
@@ -85,15 +85,14 @@ function ensureCorrectBdd(bdd) {
|
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
exports.ensureCorrectBdd = ensureCorrectBdd;
|
|
88
|
-
function getNodesRecursive(node, set) {
|
|
89
|
-
if (set === void 0) { set = new Set(); }
|
|
88
|
+
function getNodesRecursive(node, set = new Set()) {
|
|
90
89
|
set.add(node);
|
|
91
90
|
if (!node.isLeafNode()) {
|
|
92
|
-
|
|
93
|
-
|
|
91
|
+
const useNode = node;
|
|
92
|
+
const branch1 = useNode.branches.getBranch('0');
|
|
94
93
|
set.add(branch1);
|
|
95
94
|
getNodesRecursive(branch1, set);
|
|
96
|
-
|
|
95
|
+
const branch2 = useNode.branches.getBranch('1');
|
|
97
96
|
set.add(branch2);
|
|
98
97
|
getNodesRecursive(branch2, set);
|
|
99
98
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ensure-correct-bdd.js","sourceRoot":"","sources":["../../src/ensure-correct-bdd.ts"],"names":[],"mappings":";;;AAKA;;;GAGG;AACH,SAAgB,gBAAgB,CAAC,GAAa;IAC1C,
|
|
1
|
+
{"version":3,"file":"ensure-correct-bdd.js","sourceRoot":"","sources":["../../src/ensure-correct-bdd.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.fillTruthTable = void 0;
|
|
4
|
-
|
|
4
|
+
const util_1 = require("./util");
|
|
5
5
|
/**
|
|
6
6
|
* fills each missing row of a table
|
|
7
7
|
* with the given value
|
|
8
8
|
*/
|
|
9
9
|
function fillTruthTable(truthTable, inputLength, value) {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
const endInput = (0, util_1.maxBinaryWithLength)(inputLength);
|
|
11
|
+
let currentInput = (0, util_1.minBinaryWithLength)(inputLength);
|
|
12
|
+
let done = false;
|
|
13
13
|
while (!done) {
|
|
14
14
|
if (!truthTable.has(currentInput)) {
|
|
15
15
|
truthTable.set(currentInput, value);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fill-truth-table.js","sourceRoot":"","sources":["../../src/fill-truth-table.ts"],"names":[],"mappings":";;;AAAA
|
|
1
|
+
{"version":3,"file":"fill-truth-table.js","sourceRoot":"","sources":["../../src/fill-truth-table.ts"],"names":[],"mappings":";;;AAAA,iCAIgB;AAGhB;;;GAGG;AACH,SAAgB,cAAc,CAC1B,UAAsB,EACtB,WAAmB,EACnB,KAAa;IAEb,MAAM,QAAQ,GAAG,IAAA,0BAAmB,EAAC,WAAW,CAAC,CAAC;IAClD,IAAI,YAAY,GAAG,IAAA,0BAAmB,EAAC,WAAW,CAAC,CAAC;IACpD,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,CAAC,IAAI,EAAE;QACV,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE;YAC/B,UAAU,CAAC,GAAG,CACV,YAAY,EACZ,KAAK,CACR,CAAC;SACL;QACD,IAAI,YAAY,KAAK,QAAQ,EAAE;YAC3B,IAAI,GAAG,IAAI,CAAC;SACf;aAAM;YACH,YAAY,GAAG,IAAA,sBAAe,EAC1B,YAAY,CACf,CAAC;SACL;KACJ;AACL,CAAC;AAvBD,wCAuBC"}
|
|
@@ -7,9 +7,9 @@ exports.findSimilarNode = void 0;
|
|
|
7
7
|
* @hotpath
|
|
8
8
|
*/
|
|
9
9
|
function findSimilarNode(own, others) {
|
|
10
|
-
|
|
11
|
-
for (
|
|
12
|
-
|
|
10
|
+
const ownString = own.toString();
|
|
11
|
+
for (let i = 0; i < others.length; i++) {
|
|
12
|
+
const other = others[i];
|
|
13
13
|
if (own !== other &&
|
|
14
14
|
!other.deleted &&
|
|
15
15
|
own.isEqualToOtherNode(other, ownString)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"find-similar-node.js","sourceRoot":"","sources":["../../src/find-similar-node.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,SAAgB,eAAe,CAC3B,GAAM,EACN,MAAW;IAEX,
|
|
1
|
+
{"version":3,"file":"find-similar-node.js","sourceRoot":"","sources":["../../src/find-similar-node.ts"],"names":[],"mappings":";;;AAEA;;;;GAIG;AACH,SAAgB,eAAe,CAC3B,GAAM,EACN,MAAW;IAEX,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,EAAE,CAAC;IACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;QACpC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACxB,IACI,GAAG,KAAK,KAAK;YACb,CAAC,KAAK,CAAC,OAAO;YACd,GAAG,CAAC,kBAAkB,CAClB,KAAY,EACZ,SAAS,CACZ,EACH;YACE,OAAO,KAAK,CAAC;SAChB;KACJ;IACD,OAAO,IAAI,CAAC;AAChB,CAAC;AAnBD,0CAmBC"}
|
package/dist/lib/index.js
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
3
|
if (k2 === undefined) k2 = k;
|
|
4
|
-
Object.
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
5
9
|
}) : (function(o, m, k, k2) {
|
|
6
10
|
if (k2 === undefined) k2 = k;
|
|
7
11
|
o[k2] = m[k];
|
package/dist/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,yDAAuC;AACvC,kDAAgC;AAChC,6CAA2B;AAC3B,gEAA8C;AAC9C,uDAAqC;AACrC,qDAAmC;AACnC,sDAAoC;AACpC,kDAAgC;AAChC,8CAA4B;AAC5B,yDAAuC;AACvC,4CAA0B;AAC1B,8CAA4B;AAC5B,yCAAuB"}
|