parallel.es
Version:
Simple parallelization for EcmaScript
55 lines (54 loc) • 2.75 kB
JavaScript
var parallel_collection_generator_1 = require("./generator/parallel-collection-generator");
var parallel_range_generator_1 = require("./generator/parallel-range-generator");
var parallel_times_generator_1 = require("./generator/parallel-times-generator");
var parallel_chain_factory_1 = require("./chain/parallel-chain-factory");
var function_id_1 = require("../function/function-id");
function parallelFactory(defaultOptions) {
function mergeOptions(userOptions) {
if (userOptions) {
if (userOptions.hasOwnProperty("threadPool") && typeof (userOptions.threadPool) === "undefined") {
throw new Error("The thread pool is mandatory and cannot be unset");
}
if (userOptions.hasOwnProperty("maxConcurrencyLevel") && typeof (userOptions.maxConcurrencyLevel) !== "number") {
throw new Error("The maxConcurrencyLevel is mandatory and has to be a number");
}
}
return Object.assign({}, defaultOptions, userOptions);
}
return {
defaultOptions: function (options) {
if (options) {
defaultOptions = mergeOptions(options);
}
else {
return Object.assign({}, defaultOptions);
}
},
from: function (collection, options) {
return parallel_chain_factory_1.createParallelChain(new parallel_collection_generator_1.ParallelCollectionGenerator(collection), mergeOptions(options));
},
range: function (start, end, step, options) {
var generator = parallel_range_generator_1.ParallelRangeGenerator.create(start, end, step);
return parallel_chain_factory_1.createParallelChain(generator, mergeOptions(options));
},
times: function (n, generator, env, options) {
if (env) {
return parallel_chain_factory_1.createParallelChain(parallel_times_generator_1.ParallelTimesGenerator.create(n, generator), mergeOptions(options), env);
}
return parallel_chain_factory_1.createParallelChain(parallel_times_generator_1.ParallelTimesGenerator.create(n, generator), mergeOptions(options));
},
schedule: function (func) {
var params = [];
for (var _i = 1; _i < arguments.length; _i++) {
params[_i - 1] = arguments[_i];
}
if (function_id_1.isFunctionId(func)) {
return (_a = defaultOptions.threadPool).schedule.apply(_a, [func].concat(params));
}
return (_b = defaultOptions.threadPool).schedule.apply(_b, [func].concat(params));
var _a, _b;
}
};
}
exports.parallelFactory = parallelFactory;
;