/// <summary> /// /// </summary> /// <param name="right"></param> /// <param name="size"></param> /// <param name="period"></param> /// <param name="offset"></param> /// <param name="left"></param> /// <param name="duration"></param> public BinaryFWindow(FWindowable <TLeft> left, FWindowable <TRight> right, long size, long period, long offset, long duration) : base(size, period, offset, duration) { Left = left; Right = right; }
/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="period"></param> public ChopFWindow(FWindowable <TPayload> input, long period) : base(input, input.Size, period, input.Offset, period) { Invariant.IsTrue(input.Period % period == 0, "Input period must be a multiple of chop period"); _sync = -2; _other = -1; }
/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="durationSelector"></param> public AlterDurationFWindow(FWindowable <TPayload> input, Expression <Func <long, long, long> > durationSelector) : base(input, input.Size, input.Period, input.Offset, -1) { _durationSelector = durationSelector.Compile(); _Payload = Input.Payload as FSubWindow <TPayload>; _Sync = Input.Sync as FSubWindow <long>; _BV = Input.BV as BVFSubWindow; }
/// <summary> /// /// </summary> public SelectFWindow(FWindowable <TPayload> input, Selector selector) : base(input, input.Size, input.Period, input.Offset, input.Duration) { _selector = selector; _Payload = new FSubWindow <TResult>(Length); _Sync = Input.Sync as FSubWindow <long>; _Other = Input.Other as FSubWindow <long>; _BV = Input.BV as BVFSubWindow; }
/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="filter"></param> public WhereFWindow(FWindowable <TPayload> input, Expression <Func <TPayload, bool> > filter) : base(input, input.Size, input.Period, input.Offset, input.Duration) { _filter = filter.Compile(); _Payload = Input.Payload as FSubWindow <TPayload>; _Sync = Input.Sync as FSubWindow <long>; _Other = Input.Other as FSubWindow <long>; _BV = new BVFSubWindow(Length); }
/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="window"></param> /// <param name="transform"></param> public W2WFWindow(FWindowable <TPayload> input, long window, Action <int, TPayload[], int, TResult[], int> transform) : base(input, input.Size, input.Period, input.Offset, input.Duration) { Invariant.IsTrue(Input.Size % window == 0, "window size must be multiple of input size"); _window = window; _transform = transform; _Sync = Input.Sync as FSubWindow <long>; _Other = Input.Other as FSubWindow <long>; _BV = Input.BV as BVFSubWindow; }
/// <summary> /// /// </summary> /// <param name="input"></param> public MulticastFWindow(FWindowable <TPayload> input) : base(input, input.Size, input.Period, input.Offset, input.Duration) { _hasInit = false; _init = false; _isComputed = false; _len = -1; _hasSlid = false; _slide = false; _Payload = Input.Payload as FSubWindow <TPayload>; _Sync = Input.Sync as FSubWindow <long>; _Other = Input.Other as FSubWindow <long>; _BV = Input.BV as BVFSubWindow; }
/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="aggregate"></param> /// <param name="window"></param> public TumblingAggregateFWindow( FWindowable <TPayload> input, IAggregate <TPayload, TAggState, TResult> aggregate, long window ) : base(input, input.Size, window, input.Offset, window) { Invariant.IsTrue(input.Size % window == 0, "Input size need to be a multiple of window"); _window = window; _aggregate = aggregate; _init = _aggregate.InitialState().Compile(); _acc = _aggregate.Accumulate().Compile(); _res = _aggregate.ComputeResult().Compile(); _BV = new BVFSubWindow(Length); }
/// <summary> /// /// </summary> /// <param name="left"></param> /// <param name="right"></param> /// <param name="joiner"></param> public JoinFWindow(FWindowable <TLeft> left, FWindowable <TRight> right, Joiner joiner) : base(left, right, left.Size, left.Period, left.Offset, left.Duration) { Invariant.IsTrue(right.Offset == left.Offset, "Left offset must match to right offset"); Invariant.IsTrue(right.Period % left.Period == 0, "Right period must be a multiple of left period"); Invariant.IsTrue(right.Size == left.Size, "Left size must match to right size"); Invariant.IsTrue(right.Period == right.Duration, "Right: period and duration must be same"); Invariant.IsTrue(left.Period == left.Duration, "Left: period and duration must be same"); _joiner = joiner; _Payload = new FSubWindow <TResult>(Length); _Sync = Left.Sync as FSubWindow <long>; _Other = Left.Other as FSubWindow <long>; _BV = new BVFSubWindow(Length); }
/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="aggregate"></param> /// <param name="window"></param> /// <param name="period"></param> public HoppingAggregateFWindow( FWindowable <TPayload> input, IAggregate <TPayload, TAggState, TResult> aggregate, long window, long period ) : base(input, input.Size, period, input.Offset, period) { Invariant.IsTrue(period % Input.Period == 0, "Period must be a multiple of input period"); Invariant.IsTrue(window % period == 0, "Window must be a multiple of period"); _window = window; _aggregate = aggregate; _init = _aggregate.InitialState().Compile(); _acc = _aggregate.Accumulate().Compile(); _diff = aggregate.Difference().Compile(); _res = _aggregate.ComputeResult().Compile(); _states = new TAggState[(window / period) + 1]; _idx = -1; _BV = new BVFSubWindow(Length); }
/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="joiner"></param> public PairFWindow(FWindowable <TPayload> input, Joiner joiner) : base(input, input.Size, input.Period, input.Offset, -1) { Invariant.IsPositive(input.Duration, "Input duration"); _joiner = joiner; }
/// <summary> /// /// </summary> public OutputFWindow(FWindowable <TResult> fwindow) { _fwindow = fwindow; hasBatchChanged = false; }
/// <summary> /// /// </summary> public UnaryFWindow(FWindowable <TPayload> input, long size, long period, long offset, long duration) : base(size, period, offset, duration) { Input = input; }
/// <summary> /// /// </summary> /// <param name="input"></param> public ClipFWindow(FWindowable <TPayload> input) : base(input, input.Size, input.Period, input.Offset, -1) { Invariant.IsPositive(input.Duration, "Input duration"); }
/// <summary> /// /// </summary> /// <param name="input"></param> /// <param name="period"></param> public AlterPeriodFWindow(FWindowable <TPayload> input, long period) : base(input, input.Size, period, input.Offset, period) { Invariant.IsPositive(Input.Duration, "Input duration"); Invariant.IsTrue(period % Input.Period == 0, "Period must be a multiple of input period"); }