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
@@ -1,2 +0,0 @@
1
- import { SimpleBdd } from '../types.js';
2
- export declare function minimalStringToSimpleBdd(str: string): SimpleBdd;
@@ -1,57 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.minimalStringToSimpleBdd = minimalStringToSimpleBdd;
4
- const util_js_1 = require("../util.js");
5
- const string_format_js_1 = require("./string-format.js");
6
- function minimalStringToSimpleBdd(str) {
7
- const nodesById = new Map();
8
- // parse leaf nodes
9
- const leafNodeAmount = parseInt(str.charAt(0) + str.charAt(1), 10);
10
- const lastLeafNodeChar = (2 + leafNodeAmount * 2);
11
- const leafNodeChars = str.substring(2, lastLeafNodeChar);
12
- const leafNodeChunks = (0, util_js_1.splitStringToChunks)(leafNodeChars, 2);
13
- for (let i = 0; i < leafNodeChunks.length; i++) {
14
- const chunk = leafNodeChunks[i];
15
- const id = chunk.charAt(0);
16
- const value = (0, string_format_js_1.getNumberOfChar)(chunk.charAt(1));
17
- nodesById.set(id, value);
18
- }
19
- // parse internal nodes
20
- const internalNodeChars = str.substring(lastLeafNodeChar, str.length - 3);
21
- const internalNodeChunks = (0, util_js_1.splitStringToChunks)(internalNodeChars, 4);
22
- for (let i = 0; i < internalNodeChunks.length; i++) {
23
- const chunk = internalNodeChunks[i];
24
- const id = chunk.charAt(0);
25
- const idOf0Branch = chunk.charAt(1);
26
- const idOf1Branch = chunk.charAt(2);
27
- const level = (0, string_format_js_1.getNumberOfChar)(chunk.charAt(3));
28
- if (!nodesById.has(idOf0Branch)) {
29
- throw new Error('missing node with id ' + idOf0Branch);
30
- }
31
- if (!nodesById.has(idOf1Branch)) {
32
- throw new Error('missing node with id ' + idOf1Branch);
33
- }
34
- const node0 = nodesById.get(idOf0Branch);
35
- const node1 = nodesById.get(idOf1Branch);
36
- const node = {
37
- l: level, // level is first for prettier json output
38
- 0: node0,
39
- 1: node1
40
- };
41
- nodesById.set(id, node);
42
- }
43
- // parse root node
44
- const last3 = str.slice(-3);
45
- const idOf0 = last3.charAt(0);
46
- const idOf1 = last3.charAt(1);
47
- const levelOfRoot = (0, string_format_js_1.getNumberOfChar)(last3.charAt(2));
48
- const nodeOf0 = nodesById.get(idOf0);
49
- const nodeOf1 = nodesById.get(idOf1);
50
- const rootNode = {
51
- l: levelOfRoot,
52
- 0: nodeOf0,
53
- 1: nodeOf1,
54
- };
55
- return rootNode;
56
- }
57
- //# sourceMappingURL=minimal-string-to-simple-bdd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"minimal-string-to-simple-bdd.js","sourceRoot":"","sources":["../../../../src/minimal-string/minimal-string-to-simple-bdd.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { SimpleBdd, ResolverFunctions } from '../types.js';
2
- export declare function resolveWithSimpleBdd(simpleBdd: SimpleBdd, fns: ResolverFunctions, input: any): number;
@@ -1,18 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.resolveWithSimpleBdd = resolveWithSimpleBdd;
4
- function resolveWithSimpleBdd(simpleBdd, fns, input) {
5
- let currentNode = simpleBdd;
6
- let currentLevel = simpleBdd.l;
7
- while (true) {
8
- const booleanResult = fns[currentLevel](input);
9
- currentNode = currentNode[booleanResult ? '1' : '0'];
10
- if (typeof currentNode === 'number' || typeof currentNode === 'string') {
11
- return currentNode;
12
- }
13
- else {
14
- currentLevel = currentNode.l;
15
- }
16
- }
17
- }
18
- //# sourceMappingURL=resolve-with-simple-bdd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-with-simple-bdd.js","sourceRoot":"","sources":["../../../../src/minimal-string/resolve-with-simple-bdd.ts"],"names":[],"mappings":";;AAMA,oDAgBC;AAhBD,SAAgB,oBAAoB,CAChC,SAAoB,EACpB,GAAsB,EACtB,KAAU;IAEV,IAAI,WAAW,GAAkC,SAAS,CAAC;IAC3D,IAAI,YAAY,GAAW,SAAS,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,aAAa,GAAY,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;QACxD,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACrE,OAAO,WAAkB,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -1,9 +0,0 @@
1
- export declare const CHAR_CODE_OFFSET = 40;
2
- export declare function getCharOfLevel(level: number): string;
3
- export declare function getNumberOfChar(char: string): number;
4
- export declare function getCharOfValue(value: number): string;
5
- export declare const FIRST_CHAR_CODE_FOR_ID = 97;
6
- export declare function getNextCharId(lastCode: number): {
7
- char: string;
8
- nextCode: number;
9
- };
@@ -1,61 +0,0 @@
1
- "use strict";
2
- /*
3
- let t = 0;
4
- while (t < 10000) {
5
- const char = String.fromCharCode(t);
6
- console.log(t + ' : ' + char);
7
- t++;
8
- }
9
- */
10
- Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.FIRST_CHAR_CODE_FOR_ID = exports.CHAR_CODE_OFFSET = void 0;
12
- exports.getCharOfLevel = getCharOfLevel;
13
- exports.getNumberOfChar = getNumberOfChar;
14
- exports.getCharOfValue = getCharOfValue;
15
- exports.getNextCharId = getNextCharId;
16
- /*
17
-
18
- To have a really small string representation, we have to hack some stuff
19
- which makes is complicated but effective.
20
-
21
- Rules for the string:
22
- - The string starts with a number like '23' that defines how many leaf-nodes we have
23
- - leaf nodes consist of two chars like 'ab'
24
- - the first char is the id
25
- - the second the value is a number you can get via String.charCodeAt()
26
- - Internal nodes have four chars like 'abcd'
27
- - the first char is the id
28
- - the second char is the id of the 0-branch
29
- - the third char is the id of the 1-branch
30
- - the last char is the id of the boolean-function (= level)
31
- - The last 3 chars of the string is the root node like 'abc'
32
- - it looks like the internal-node but without the id (first char)
33
-
34
- */
35
- // we use this because 39 is the quotes which causes problems
36
- exports.CHAR_CODE_OFFSET = 40; // String.fromCharCode(33) === ')'
37
- function getCharOfLevel(level) {
38
- const charCode = exports.CHAR_CODE_OFFSET + level;
39
- return String.fromCharCode(charCode);
40
- }
41
- function getNumberOfChar(char) {
42
- const charCode = char.charCodeAt(0);
43
- return charCode - exports.CHAR_CODE_OFFSET;
44
- }
45
- function getCharOfValue(value) {
46
- const charCode = exports.CHAR_CODE_OFFSET + value;
47
- return String.fromCharCode(charCode);
48
- }
49
- exports.FIRST_CHAR_CODE_FOR_ID = 97; // String.fromCharCode(97) === 'a'
50
- function getNextCharId(lastCode) {
51
- // jump these codes because they look strange
52
- if (lastCode >= 128 && lastCode <= 160) {
53
- lastCode = 161;
54
- }
55
- const char = String.fromCharCode(lastCode);
56
- return {
57
- char,
58
- nextCode: lastCode + 1
59
- };
60
- }
61
- //# sourceMappingURL=string-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"string-format.js","sourceRoot":"","sources":["../../../../src/minimal-string/string-format.ts"],"names":[],"mappings":";AAAA;;;;;;;EAOE;;;AA0BF,wCAGC;AAED,0CAGC;AAED,wCAGC;AAKD,sCAeC;AAzDD;;;;;;;;;;;;;;;;;;EAkBE;AAEF,6DAA6D;AAChD,QAAA,gBAAgB,GAAG,EAAE,CAAC,CAAC,kCAAkC;AAGtE,SAAgB,cAAc,CAAC,KAAa;IACxC,MAAM,QAAQ,GAAG,wBAAgB,GAAG,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,SAAgB,eAAe,CAAC,IAAY;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,QAAQ,GAAG,wBAAgB,CAAC;AACvC,CAAC;AAED,SAAgB,cAAc,CAAC,KAAa;IACxC,MAAM,QAAQ,GAAG,wBAAgB,GAAG,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAGY,QAAA,sBAAsB,GAAG,EAAE,CAAC,CAAC,kCAAkC;AAE5E,SAAgB,aAAa,CAAC,QAAgB;IAK1C,6CAA6C;IAC7C,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QACrC,QAAQ,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO;QACH,IAAI;QACJ,QAAQ,EAAE,QAAQ,GAAG,CAAC;KACzB,CAAC;AACN,CAAC"}
@@ -1,8 +0,0 @@
1
- import { RootNode } from '../root-node.js';
2
- import { AbstractNode } from '../abstract-node.js';
3
- export declare function bddToMinimalString(bdd: RootNode): string;
4
- export declare function nodeToString(node: AbstractNode, idByNode: Map<AbstractNode, string>, lastCode: number): {
5
- id: string;
6
- str: string;
7
- nextCode: number;
8
- };
@@ -1,55 +0,0 @@
1
- import { getCharOfLevel, getCharOfValue, getNextCharId } from './string-format.js';
2
- import { FIRST_CHAR_CODE_FOR_ID } from './string-format.js';
3
- export function bddToMinimalString(bdd) {
4
- let ret = '';
5
- let currentCharCode = FIRST_CHAR_CODE_FOR_ID;
6
- // add leaf node count
7
- const leafNodeAmount = bdd.getLeafNodes().length;
8
- if (leafNodeAmount > 99) {
9
- throw new Error('cannot build string with too many leaf nodes');
10
- }
11
- ret += leafNodeAmount.toString().padStart(2, '0');
12
- const levelsHighestFirst = bdd.levels.slice().reverse();
13
- const idByNode = new Map();
14
- levelsHighestFirst.forEach(level => {
15
- const nodes = bdd.getNodesOfLevel(level);
16
- nodes.forEach(node => {
17
- const stringRep = nodeToString(node, idByNode, currentCharCode);
18
- currentCharCode = stringRep.nextCode;
19
- idByNode.set(node, stringRep.id);
20
- ret += stringRep.str;
21
- });
22
- });
23
- return ret;
24
- }
25
- export function nodeToString(node, idByNode, lastCode) {
26
- const nextId = getNextCharId(lastCode);
27
- switch (node.type) {
28
- case 'LeafNode':
29
- const valueChar = getCharOfValue(node.asLeafNode().value);
30
- return {
31
- id: nextId.char,
32
- nextCode: nextId.nextCode,
33
- str: nextId.char + valueChar
34
- };
35
- case 'InternalNode':
36
- const branch0Id = idByNode.get(node.asInternalNode().branches.getBranch('0'));
37
- const branch1Id = idByNode.get(node.asInternalNode().branches.getBranch('1'));
38
- return {
39
- id: nextId.char,
40
- nextCode: nextId.nextCode,
41
- str: nextId.char + branch0Id + branch1Id + getCharOfLevel(node.level)
42
- };
43
- case 'RootNode':
44
- const branch0IdRoot = idByNode.get(node.asRootNode().branches.getBranch('0'));
45
- const branch1IdRoot = idByNode.get(node.asRootNode().branches.getBranch('1'));
46
- return {
47
- id: nextId.char,
48
- nextCode: nextId.nextCode,
49
- str: '' + branch0IdRoot + branch1IdRoot + getCharOfLevel(node.level)
50
- };
51
- default:
52
- throw new Error('unknown node type');
53
- }
54
- }
55
- //# sourceMappingURL=bdd-to-minimal-string.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bdd-to-minimal-string.js","sourceRoot":"","sources":["../../../../src/minimal-string/bdd-to-minimal-string.ts"],"names":[],"mappings":"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"}
@@ -1,11 +0,0 @@
1
- import { RootNode } from '../root-node.js';
2
- import { SimpleBdd } from '../types.js';
3
- import { AbstractNode } from '../abstract-node.js';
4
- /**
5
- * @recursive
6
- */
7
- export declare function bddToSimpleBdd(bdd: RootNode): SimpleBdd;
8
- /**
9
- * @recursive
10
- */
11
- export declare function nodeToSimpleBddNode(node: AbstractNode): SimpleBdd;
@@ -1,19 +0,0 @@
1
- /**
2
- * @recursive
3
- */
4
- export function bddToSimpleBdd(bdd) {
5
- return nodeToSimpleBddNode(bdd);
6
- }
7
- /**
8
- * @recursive
9
- */
10
- export function nodeToSimpleBddNode(node) {
11
- const branch0 = node.branches.getBranch('0');
12
- const branch1 = node.branches.getBranch('1');
13
- return {
14
- l: node.level,
15
- 0: branch0.isLeafNode() ? branch0.asLeafNode().value : nodeToSimpleBddNode(branch0),
16
- 1: branch1.isLeafNode() ? branch1.asLeafNode().value : nodeToSimpleBddNode(branch1),
17
- };
18
- }
19
- //# sourceMappingURL=bdd-to-simple-bdd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bdd-to-simple-bdd.js","sourceRoot":"","sources":["../../../../src/minimal-string/bdd-to-simple-bdd.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAa;IACxC,OAAO,mBAAmB,CAAC,GAAG,CAAC,CAAC;AACpC,CAAC;AAGD;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAC/B,IAAkB;IAGlB,MAAM,OAAO,GAAkB,IAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAC7E,MAAM,OAAO,GAAkB,IAAqB,CAAC,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC;IAE7E,OAAO;QACH,CAAC,EAAE,IAAI,CAAC,KAAK;QACb,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC;QACnF,CAAC,EAAE,OAAO,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,mBAAmB,CAAC,OAAO,CAAC;KACtF,CAAC;AACN,CAAC"}
@@ -1,5 +0,0 @@
1
- export * from './bdd-to-minimal-string.js';
2
- export * from './minimal-string-to-simple-bdd.js';
3
- export * from './resolve-with-simple-bdd.js';
4
- export * from './string-format.js';
5
- export * from './bdd-to-simple-bdd.js';
@@ -1,6 +0,0 @@
1
- export * from './bdd-to-minimal-string.js';
2
- export * from './minimal-string-to-simple-bdd.js';
3
- export * from './resolve-with-simple-bdd.js';
4
- export * from './string-format.js';
5
- export * from './bdd-to-simple-bdd.js';
6
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/minimal-string/index.ts"],"names":[],"mappings":"AAAA,cAAc,4BAA4B,CAAC;AAC3C,cAAc,mCAAmC,CAAC;AAClD,cAAc,8BAA8B,CAAC;AAC7C,cAAc,oBAAoB,CAAC;AACnC,cAAc,wBAAwB,CAAC"}
@@ -1,2 +0,0 @@
1
- import { SimpleBdd } from '../types.js';
2
- export declare function minimalStringToSimpleBdd(str: string): SimpleBdd;
@@ -1,54 +0,0 @@
1
- import { splitStringToChunks } from '../util.js';
2
- import { getNumberOfChar } from './string-format.js';
3
- export function minimalStringToSimpleBdd(str) {
4
- const nodesById = new Map();
5
- // parse leaf nodes
6
- const leafNodeAmount = parseInt(str.charAt(0) + str.charAt(1), 10);
7
- const lastLeafNodeChar = (2 + leafNodeAmount * 2);
8
- const leafNodeChars = str.substring(2, lastLeafNodeChar);
9
- const leafNodeChunks = splitStringToChunks(leafNodeChars, 2);
10
- for (let i = 0; i < leafNodeChunks.length; i++) {
11
- const chunk = leafNodeChunks[i];
12
- const id = chunk.charAt(0);
13
- const value = getNumberOfChar(chunk.charAt(1));
14
- nodesById.set(id, value);
15
- }
16
- // parse internal nodes
17
- const internalNodeChars = str.substring(lastLeafNodeChar, str.length - 3);
18
- const internalNodeChunks = splitStringToChunks(internalNodeChars, 4);
19
- for (let i = 0; i < internalNodeChunks.length; i++) {
20
- const chunk = internalNodeChunks[i];
21
- const id = chunk.charAt(0);
22
- const idOf0Branch = chunk.charAt(1);
23
- const idOf1Branch = chunk.charAt(2);
24
- const level = getNumberOfChar(chunk.charAt(3));
25
- if (!nodesById.has(idOf0Branch)) {
26
- throw new Error('missing node with id ' + idOf0Branch);
27
- }
28
- if (!nodesById.has(idOf1Branch)) {
29
- throw new Error('missing node with id ' + idOf1Branch);
30
- }
31
- const node0 = nodesById.get(idOf0Branch);
32
- const node1 = nodesById.get(idOf1Branch);
33
- const node = {
34
- l: level, // level is first for prettier json output
35
- 0: node0,
36
- 1: node1
37
- };
38
- nodesById.set(id, node);
39
- }
40
- // parse root node
41
- const last3 = str.slice(-3);
42
- const idOf0 = last3.charAt(0);
43
- const idOf1 = last3.charAt(1);
44
- const levelOfRoot = getNumberOfChar(last3.charAt(2));
45
- const nodeOf0 = nodesById.get(idOf0);
46
- const nodeOf1 = nodesById.get(idOf1);
47
- const rootNode = {
48
- l: levelOfRoot,
49
- 0: nodeOf0,
50
- 1: nodeOf1,
51
- };
52
- return rootNode;
53
- }
54
- //# sourceMappingURL=minimal-string-to-simple-bdd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"minimal-string-to-simple-bdd.js","sourceRoot":"","sources":["../../../../src/minimal-string/minimal-string-to-simple-bdd.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- import { SimpleBdd, ResolverFunctions } from '../types.js';
2
- export declare function resolveWithSimpleBdd(simpleBdd: SimpleBdd, fns: ResolverFunctions, input: any): number;
@@ -1,15 +0,0 @@
1
- export function resolveWithSimpleBdd(simpleBdd, fns, input) {
2
- let currentNode = simpleBdd;
3
- let currentLevel = simpleBdd.l;
4
- while (true) {
5
- const booleanResult = fns[currentLevel](input);
6
- currentNode = currentNode[booleanResult ? '1' : '0'];
7
- if (typeof currentNode === 'number' || typeof currentNode === 'string') {
8
- return currentNode;
9
- }
10
- else {
11
- currentLevel = currentNode.l;
12
- }
13
- }
14
- }
15
- //# sourceMappingURL=resolve-with-simple-bdd.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"resolve-with-simple-bdd.js","sourceRoot":"","sources":["../../../../src/minimal-string/resolve-with-simple-bdd.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,oBAAoB,CAChC,SAAoB,EACpB,GAAsB,EACtB,KAAU;IAEV,IAAI,WAAW,GAAkC,SAAS,CAAC;IAC3D,IAAI,YAAY,GAAW,SAAS,CAAC,CAAC,CAAC;IACvC,OAAO,IAAI,EAAE,CAAC;QACV,MAAM,aAAa,GAAY,GAAG,CAAC,YAAY,CAAC,CAAC,KAAK,CAAC,CAAC;QACxD,WAAW,GAAG,WAAW,CAAC,aAAa,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QACrD,IAAI,OAAO,WAAW,KAAK,QAAQ,IAAI,OAAO,WAAW,KAAK,QAAQ,EAAE,CAAC;YACrE,OAAO,WAAkB,CAAC;QAC9B,CAAC;aAAM,CAAC;YACJ,YAAY,GAAG,WAAW,CAAC,CAAC,CAAC;QACjC,CAAC;IACL,CAAC;AACL,CAAC"}
@@ -1,9 +0,0 @@
1
- export declare const CHAR_CODE_OFFSET = 40;
2
- export declare function getCharOfLevel(level: number): string;
3
- export declare function getNumberOfChar(char: string): number;
4
- export declare function getCharOfValue(value: number): string;
5
- export declare const FIRST_CHAR_CODE_FOR_ID = 97;
6
- export declare function getNextCharId(lastCode: number): {
7
- char: string;
8
- nextCode: number;
9
- };
@@ -1,54 +0,0 @@
1
- /*
2
- let t = 0;
3
- while (t < 10000) {
4
- const char = String.fromCharCode(t);
5
- console.log(t + ' : ' + char);
6
- t++;
7
- }
8
- */
9
- /*
10
-
11
- To have a really small string representation, we have to hack some stuff
12
- which makes is complicated but effective.
13
-
14
- Rules for the string:
15
- - The string starts with a number like '23' that defines how many leaf-nodes we have
16
- - leaf nodes consist of two chars like 'ab'
17
- - the first char is the id
18
- - the second the value is a number you can get via String.charCodeAt()
19
- - Internal nodes have four chars like 'abcd'
20
- - the first char is the id
21
- - the second char is the id of the 0-branch
22
- - the third char is the id of the 1-branch
23
- - the last char is the id of the boolean-function (= level)
24
- - The last 3 chars of the string is the root node like 'abc'
25
- - it looks like the internal-node but without the id (first char)
26
-
27
- */
28
- // we use this because 39 is the quotes which causes problems
29
- export const CHAR_CODE_OFFSET = 40; // String.fromCharCode(33) === ')'
30
- export function getCharOfLevel(level) {
31
- const charCode = CHAR_CODE_OFFSET + level;
32
- return String.fromCharCode(charCode);
33
- }
34
- export function getNumberOfChar(char) {
35
- const charCode = char.charCodeAt(0);
36
- return charCode - CHAR_CODE_OFFSET;
37
- }
38
- export function getCharOfValue(value) {
39
- const charCode = CHAR_CODE_OFFSET + value;
40
- return String.fromCharCode(charCode);
41
- }
42
- export const FIRST_CHAR_CODE_FOR_ID = 97; // String.fromCharCode(97) === 'a'
43
- export function getNextCharId(lastCode) {
44
- // jump these codes because they look strange
45
- if (lastCode >= 128 && lastCode <= 160) {
46
- lastCode = 161;
47
- }
48
- const char = String.fromCharCode(lastCode);
49
- return {
50
- char,
51
- nextCode: lastCode + 1
52
- };
53
- }
54
- //# sourceMappingURL=string-format.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"string-format.js","sourceRoot":"","sources":["../../../../src/minimal-string/string-format.ts"],"names":[],"mappings":"AAAA;;;;;;;EAOE;AAEF;;;;;;;;;;;;;;;;;;EAkBE;AAEF,6DAA6D;AAC7D,MAAM,CAAC,MAAM,gBAAgB,GAAG,EAAE,CAAC,CAAC,kCAAkC;AAGtE,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,MAAM,QAAQ,GAAG,gBAAgB,GAAG,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAY;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;IACpC,OAAO,QAAQ,GAAG,gBAAgB,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,KAAa;IACxC,MAAM,QAAQ,GAAG,gBAAgB,GAAG,KAAK,CAAC;IAC1C,OAAO,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;AACzC,CAAC;AAGD,MAAM,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC,CAAC,kCAAkC;AAE5E,MAAM,UAAU,aAAa,CAAC,QAAgB;IAK1C,6CAA6C;IAC7C,IAAI,QAAQ,IAAI,GAAG,IAAI,QAAQ,IAAI,GAAG,EAAE,CAAC;QACrC,QAAQ,GAAG,GAAG,CAAC;IACnB,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC3C,OAAO;QACH,IAAI;QACJ,QAAQ,EAAE,QAAQ,GAAG,CAAC;KACzB,CAAC;AACN,CAAC"}
@@ -1,72 +0,0 @@
1
- import { RootNode } from '../root-node.js';
2
- import { AbstractNode } from '../abstract-node.js';
3
- import { getCharOfLevel, getCharOfValue, getNextCharId } from './string-format.js';
4
- import {
5
- FIRST_CHAR_CODE_FOR_ID
6
- } from './string-format.js';
7
-
8
-
9
- export function bddToMinimalString(bdd: RootNode): string {
10
- let ret = '';
11
- let currentCharCode = FIRST_CHAR_CODE_FOR_ID;
12
-
13
- // add leaf node count
14
- const leafNodeAmount = bdd.getLeafNodes().length;
15
- if (leafNodeAmount > 99) {
16
- throw new Error('cannot build string with too many leaf nodes');
17
- }
18
-
19
- ret += leafNodeAmount.toString().padStart(2, '0');
20
-
21
- const levelsHighestFirst = bdd.levels.slice().reverse();
22
- const idByNode: Map<AbstractNode, string> = new Map();
23
- levelsHighestFirst.forEach(level => {
24
- const nodes = bdd.getNodesOfLevel(level);
25
- nodes.forEach(node => {
26
- const stringRep = nodeToString(node, idByNode, currentCharCode);
27
- currentCharCode = stringRep.nextCode;
28
- idByNode.set(node, stringRep.id);
29
- ret += stringRep.str;
30
- });
31
- });
32
- return ret;
33
- }
34
-
35
- export function nodeToString(
36
- node: AbstractNode,
37
- idByNode: Map<AbstractNode, string>,
38
- lastCode: number
39
- ): {
40
- id: string,
41
- str: string,
42
- nextCode: number
43
- } {
44
- const nextId = getNextCharId(lastCode);
45
- switch (node.type) {
46
- case 'LeafNode':
47
- const valueChar = getCharOfValue(node.asLeafNode().value);
48
- return {
49
- id: nextId.char,
50
- nextCode: nextId.nextCode,
51
- str: nextId.char + valueChar
52
- };
53
- case 'InternalNode':
54
- const branch0Id = idByNode.get(node.asInternalNode().branches.getBranch('0'));
55
- const branch1Id = idByNode.get(node.asInternalNode().branches.getBranch('1'));
56
- return {
57
- id: nextId.char,
58
- nextCode: nextId.nextCode,
59
- str: nextId.char + branch0Id + branch1Id + getCharOfLevel(node.level)
60
- };
61
- case 'RootNode':
62
- const branch0IdRoot = idByNode.get(node.asRootNode().branches.getBranch('0'));
63
- const branch1IdRoot = idByNode.get(node.asRootNode().branches.getBranch('1'));
64
- return {
65
- id: nextId.char,
66
- nextCode: nextId.nextCode,
67
- str: '' + branch0IdRoot + branch1IdRoot + getCharOfLevel(node.level)
68
- };
69
- default:
70
- throw new Error('unknown node type');
71
- }
72
- }
@@ -1,31 +0,0 @@
1
- import { RootNode } from '../root-node.js';
2
- import {
3
- SimpleBdd
4
- } from '../types.js';
5
- import { AbstractNode } from '../abstract-node.js';
6
- import { InternalNode } from '../internal-node.js';
7
-
8
- /**
9
- * @recursive
10
- */
11
- export function bddToSimpleBdd(bdd: RootNode): SimpleBdd {
12
- return nodeToSimpleBddNode(bdd);
13
- }
14
-
15
-
16
- /**
17
- * @recursive
18
- */
19
- export function nodeToSimpleBddNode(
20
- node: AbstractNode
21
- ): SimpleBdd {
22
-
23
- const branch0: AbstractNode = (node as InternalNode).branches.getBranch('0');
24
- const branch1: AbstractNode = (node as InternalNode).branches.getBranch('1');
25
-
26
- return {
27
- l: node.level,
28
- 0: branch0.isLeafNode() ? branch0.asLeafNode().value : nodeToSimpleBddNode(branch0),
29
- 1: branch1.isLeafNode() ? branch1.asLeafNode().value : nodeToSimpleBddNode(branch1),
30
- };
31
- }
@@ -1,5 +0,0 @@
1
- export * from './bdd-to-minimal-string.js';
2
- export * from './minimal-string-to-simple-bdd.js';
3
- export * from './resolve-with-simple-bdd.js';
4
- export * from './string-format.js';
5
- export * from './bdd-to-simple-bdd.js';
@@ -1,67 +0,0 @@
1
- import {
2
- SimpleBdd,
3
- SimpleBddLeafNode
4
- } from '../types.js';
5
- import { splitStringToChunks } from '../util.js';
6
- import { getNumberOfChar } from './string-format.js';
7
-
8
- export function minimalStringToSimpleBdd(
9
- str: string
10
- ): SimpleBdd {
11
- const nodesById: Map<string, SimpleBdd | SimpleBddLeafNode> = new Map();
12
-
13
- // parse leaf nodes
14
- const leafNodeAmount = parseInt(str.charAt(0) + str.charAt(1), 10);
15
- const lastLeafNodeChar = (2 + leafNodeAmount * 2);
16
- const leafNodeChars = str.substring(2, lastLeafNodeChar);
17
- const leafNodeChunks = splitStringToChunks(leafNodeChars, 2);
18
- for (let i = 0; i < leafNodeChunks.length; i++) {
19
- const chunk = leafNodeChunks[i];
20
- const id = chunk.charAt(0);
21
- const value: SimpleBddLeafNode = getNumberOfChar(chunk.charAt(1));
22
- nodesById.set(id, value);
23
- }
24
-
25
- // parse internal nodes
26
- const internalNodeChars = str.substring(lastLeafNodeChar, str.length - 3);
27
- const internalNodeChunks = splitStringToChunks(internalNodeChars, 4);
28
- for (let i = 0; i < internalNodeChunks.length; i++) {
29
- const chunk = internalNodeChunks[i];
30
- const id = chunk.charAt(0);
31
- const idOf0Branch = chunk.charAt(1);
32
- const idOf1Branch = chunk.charAt(2);
33
- const level = getNumberOfChar(chunk.charAt(3));
34
-
35
-
36
- if (!nodesById.has(idOf0Branch)) {
37
- throw new Error('missing node with id ' + idOf0Branch);
38
- }
39
- if (!nodesById.has(idOf1Branch)) {
40
- throw new Error('missing node with id ' + idOf1Branch);
41
- }
42
-
43
- const node0 = nodesById.get(idOf0Branch) as SimpleBdd;
44
- const node1 = nodesById.get(idOf1Branch) as SimpleBdd;
45
- const node: SimpleBdd = {
46
- l: level, // level is first for prettier json output
47
- 0: node0,
48
- 1: node1
49
- };
50
- nodesById.set(id, node);
51
- }
52
-
53
- // parse root node
54
- const last3 = str.slice(-3);
55
- const idOf0 = last3.charAt(0);
56
- const idOf1 = last3.charAt(1);
57
- const levelOfRoot = getNumberOfChar(last3.charAt(2));
58
- const nodeOf0 = nodesById.get(idOf0) as SimpleBdd;
59
- const nodeOf1 = nodesById.get(idOf1) as SimpleBdd;
60
- const rootNode: SimpleBdd = {
61
- l: levelOfRoot,
62
- 0: nodeOf0,
63
- 1: nodeOf1,
64
- };
65
-
66
- return rootNode;
67
- }