import { MultiSet, MultiSetArray } from './multiset.js'; import { BinaryOperator, DifferenceStreamReader, DifferenceStreamWriter, UnaryOperator } from './graph.js'; export type KeyValue = [K, V]; export interface IOperator<_T> { run: () => void; hasPendingWork: () => boolean; } export interface IDifferenceStreamReader { drain: () => Array>; isEmpty: () => boolean; } export interface IDifferenceStreamWriter { sendData: (collection: MultiSet | MultiSetArray) => void; newReader: () => IDifferenceStreamReader; } export interface ID2 { getNextOperatorId: () => number; newInput: () => IStreamBuilder; addOperator: (operator: UnaryOperator | BinaryOperator) => void; finalize: () => void; step: () => void; } export interface IStreamBuilder { writer: DifferenceStreamWriter; connectReader: () => DifferenceStreamReader; graph: ID2; pipe: ((o1: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator, o13: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator, o13: PipedOperator, o14: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator, o13: PipedOperator, o14: PipedOperator, o15: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator, o13: PipedOperator, o14: PipedOperator, o15: PipedOperator, o16: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator, o13: PipedOperator, o14: PipedOperator, o15: PipedOperator, o16: PipedOperator, o17: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator, o13: PipedOperator, o14: PipedOperator, o15: PipedOperator, o16: PipedOperator, o17: PipedOperator, o18: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator, o13: PipedOperator, o14: PipedOperator, o15: PipedOperator, o16: PipedOperator, o17: PipedOperator, o18: PipedOperator, o19: PipedOperator) => IStreamBuilder) & ((o1: PipedOperator, o2: PipedOperator, o3: PipedOperator, o4: PipedOperator, o5: PipedOperator, o6: PipedOperator, o7: PipedOperator, o8: PipedOperator, o9: PipedOperator, o10: PipedOperator, o11: PipedOperator, o12: PipedOperator, o13: PipedOperator, o14: PipedOperator, o15: PipedOperator, o16: PipedOperator, o17: PipedOperator, o18: PipedOperator, o19: PipedOperator, o20: PipedOperator) => IStreamBuilder) & ((...operators: Array>) => IStreamBuilder); } export type PipedOperator = (stream: IStreamBuilder) => IStreamBuilder;