示例#1
0
 /// <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;
 }
示例#2
0
 /// <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;
 }
示例#3
0
 /// <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;
 }
示例#4
0
 /// <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;
 }
示例#5
0
 /// <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);
 }
示例#6
0
 /// <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;
 }
示例#7
0
 /// <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);
 }
示例#9
0
        /// <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);
        }
示例#10
0
 /// <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);
 }
示例#11
0
 /// <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;
 }
示例#12
0
 /// <summary>
 ///
 /// </summary>
 public OutputFWindow(FWindowable <TResult> fwindow)
 {
     _fwindow        = fwindow;
     hasBatchChanged = false;
 }
示例#13
0
 /// <summary>
 ///
 /// </summary>
 public UnaryFWindow(FWindowable <TPayload> input, long size, long period, long offset, long duration)
     : base(size, period, offset, duration)
 {
     Input = input;
 }
示例#14
0
 /// <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");
 }