-
Notifications
You must be signed in to change notification settings - Fork 3
/
parallel-chain-factory.ts
34 lines (30 loc) · 1.92 KB
/
parallel-chain-factory.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
import {PendingParallelChainState} from "./pending-parallel-chain-state";
import {ParallelChainImpl} from "./parallel-chain-impl";
import {IParallelEnvironment, IDefaultInitializedParallelOptions, IParallelOperation} from "../";
import {IParallelGenerator} from "../generator/parallel-generator";
import {IParallelChain} from "./parallel-chain";
import {ParallelEnvironmentDefinition} from "../parallel-environment-definition";
/**
* Creates a new parallel chain
* @param generator the generator to use to generate the input data and split the work
* @param options the options to use
* @param operations the operations to perform
* @param TIn type of the elements generated by the generator
* @param TOut type of the elements resulting from this parallel chain
*/
export function createParallelChain<TIn, TOut>(generator: IParallelGenerator, options: IDefaultInitializedParallelOptions, operations?: IParallelOperation[]): IParallelChain<TIn, IParallelEnvironment, TOut>;
/**
* @param sharedEnv the available environment in the job
*/
export function createParallelChain<TIn, TEnv extends IParallelEnvironment, TOut>(generator: IParallelGenerator, options: IDefaultInitializedParallelOptions, sharedEnv: TEnv, operations?: IParallelOperation[]): IParallelChain<TIn, TEnv, TOut>;
export function createParallelChain<TIn, TEnv extends IParallelEnvironment, TOut>(generator: IParallelGenerator, options: IDefaultInitializedParallelOptions, sharedEnv?: TEnv | IParallelOperation[], operations: IParallelOperation[] = []): IParallelChain<TIn, TEnv, TOut> {
let environment: TEnv | undefined;
if (sharedEnv instanceof Array) {
environment = undefined;
operations = sharedEnv;
} else {
environment = sharedEnv;
}
const chain = new ParallelChainImpl(new PendingParallelChainState(generator, options, ParallelEnvironmentDefinition.of(), operations));
return environment ? chain.inEnvironment(environment) : chain;
}