UNPKG

2.19 kBJavaScriptView Raw
1"use strict";
2var __importDefault = (this && this.__importDefault) || function (mod) {
3 return (mod && mod.__esModule) ? mod : { "default": mod };
4};
5Object.defineProperty(exports, "__esModule", { value: true });
6var GeneratedExpression_1 = __importDefault(require("./GeneratedExpression"));
7// 256 generated expressions ought to be enough for anybody
8var MAX_EXPRESSIONS = 256;
9var CombinatorialGeneratedExpressionFactory = /** @class */ (function () {
10 function CombinatorialGeneratedExpressionFactory(expressionTemplate, parameterTypeCombinations) {
11 this.expressionTemplate = expressionTemplate;
12 this.parameterTypeCombinations = parameterTypeCombinations;
13 this.expressionTemplate = expressionTemplate;
14 }
15 CombinatorialGeneratedExpressionFactory.prototype.generateExpressions = function () {
16 var generatedExpressions = [];
17 this.generatePermutations(generatedExpressions, 0, []);
18 return generatedExpressions;
19 };
20 CombinatorialGeneratedExpressionFactory.prototype.generatePermutations = function (generatedExpressions, depth, currentParameterTypes) {
21 if (generatedExpressions.length >= MAX_EXPRESSIONS) {
22 return;
23 }
24 if (depth === this.parameterTypeCombinations.length) {
25 generatedExpressions.push(new GeneratedExpression_1.default(this.expressionTemplate, currentParameterTypes));
26 return;
27 }
28 // tslint:disable-next-line:prefer-for-of
29 for (var i = 0; i < this.parameterTypeCombinations[depth].length; ++i) {
30 // Avoid recursion if no elements can be added.
31 if (generatedExpressions.length >= MAX_EXPRESSIONS) {
32 return;
33 }
34 var newCurrentParameterTypes = currentParameterTypes.slice(); // clone
35 newCurrentParameterTypes.push(this.parameterTypeCombinations[depth][i]);
36 this.generatePermutations(generatedExpressions, depth + 1, newCurrentParameterTypes);
37 }
38 };
39 return CombinatorialGeneratedExpressionFactory;
40}());
41exports.default = CombinatorialGeneratedExpressionFactory;
42//# sourceMappingURL=CombinatorialGeneratedExpressionFactory.js.map
\No newline at end of file