/// <summary> /// Process windows of messages by relative index interval. /// </summary> /// <typeparam name="TSource">Type of source messages.</typeparam> /// <typeparam name="TOutput">Type of output messages.</typeparam> /// <param name="source">Source stream.</param> /// <param name="indexInterval">The relative index interval over which to gather messages.</param> /// <param name="selector">Selector function.</param> /// <param name="deliveryPolicy">An optional delivery policy.</param> /// <param name="name">An optional name for the stream operator.</param> /// <returns>Output stream.</returns> public static IProducer <TOutput> Window <TSource, TOutput>( this IProducer <TSource> source, IntInterval indexInterval, Func <IEnumerable <Message <TSource> >, TOutput> selector, DeliveryPolicy <TSource> deliveryPolicy = null, string name = nameof(Window)) { var window = new RelativeIndexWindow <TSource, TOutput>(source.Out.Pipeline, indexInterval, selector, name); return(PipeTo(source, window, deliveryPolicy)); }
/// <summary> /// Get windows of messages by relative index interval. /// </summary> /// <typeparam name="T">Type of source messages.</typeparam> /// <param name="source">Source stream.</param> /// <param name="indexInterval">The relative index interval over which to gather messages.</param> /// <param name="deliveryPolicy">An optional delivery policy.</param> /// <returns>Output stream.</returns> public static IProducer <IEnumerable <T> > Window <T>(this IProducer <T> source, IntInterval indexInterval, DeliveryPolicy deliveryPolicy = null) { return(Window(source, indexInterval, GetMessageData, deliveryPolicy)); }
/// <summary> /// Get windows of messages by relative index interval. /// </summary> /// <typeparam name="TSource">Type of source messages.</typeparam> /// <param name="source">Source stream.</param> /// <param name="indexInterval">The relative index interval over which to gather messages.</param> /// <param name="deliveryPolicy">An optional delivery policy.</param> /// <returns>Output stream.</returns> public static IProducer <TSource[]> Window <TSource>(this IProducer <TSource> source, IntInterval indexInterval, DeliveryPolicy <TSource> deliveryPolicy = null) { return(Window(source, indexInterval, GetMessageData, deliveryPolicy)); }
/// <summary> /// Process windows of messages by relative index interval. /// </summary> /// <typeparam name="T">Type of source messages.</typeparam> /// <typeparam name="U">Type of output messages.</typeparam> /// <param name="source">Source stream.</param> /// <param name="indexInterval">The relative index interval over which to gather messages.</param> /// <param name="selector">Selector function.</param> /// <param name="deliveryPolicy">An optional delivery policy.</param> /// <returns>Output stream.</returns> public static IProducer <U> Window <T, U>(this IProducer <T> source, IntInterval indexInterval, Func <IEnumerable <Message <T> >, U> selector, DeliveryPolicy deliveryPolicy = null) { var window = new RelativeIndexWindow <T, U>(source.Out.Pipeline, indexInterval, selector); return(PipeTo(source, window, deliveryPolicy)); }
/// <summary> /// Get windows of messages by relative index interval. /// </summary> /// <typeparam name="TSource">Type of source messages.</typeparam> /// <param name="source">Source stream.</param> /// <param name="indexInterval">The relative index interval over which to gather messages.</param> /// <param name="deliveryPolicy">An optional delivery policy.</param> /// <param name="name">An optional name for the stream operator.</param> /// <returns>Output stream.</returns> public static IProducer <TSource[]> Window <TSource>(this IProducer <TSource> source, IntInterval indexInterval, DeliveryPolicy <TSource> deliveryPolicy = null, string name = nameof(Window)) => Window(source, indexInterval, GetMessageData, deliveryPolicy, name);