Example #1
0
     this IProducer <TPrimary> primary,
     IProducer <TSecondary> secondary,
     Interpolator <TSecondary, TInterpolation> interpolator,
     DeliveryPolicy primaryDeliveryPolicy   = null,
     DeliveryPolicy secondaryDeliveryPolicy = null)
 {
     return(Fuse(primary, secondary, interpolator, ValueTuple.Create, primaryDeliveryPolicy, secondaryDeliveryPolicy));
Example #2
0
        /// <summary>
        /// Interpolate a stream using a specified interpolator at a given sampling interval.
        /// </summary>
        /// <typeparam name="T">Type of source messages.</typeparam>
        /// <typeparam name="TInterpolation">Type of the interpolation result.</typeparam>
        /// <param name="source">Source stream.</param>
        /// <param name="samplingInterval">Interval at which to apply the interpolator.</param>
        /// <param name="interpolator">Interpolator to use for generating results.</param>
        /// <param name="alignmentDateTime">If non-null, this parameter specifies a time to align the sampling messages with. If the paramater
        /// is non-null, the messages will have originating times that align with (i.e., are an integral number of intervals away from) the
        /// specified alignment time.</param>
        /// <param name="deliveryPolicy">An optional delivery policy.</param>
        /// <returns>Output stream.</returns>
        public static IProducer <TInterpolation> Interpolate <T, TInterpolation>(
            this IProducer <T> source,
            TimeSpan samplingInterval,
            Interpolator <T, TInterpolation> interpolator,
            DateTime?alignmentDateTime    = null,
            DeliveryPolicy deliveryPolicy = null)
        {
            var clock = Generators.Repeat(source.Out.Pipeline, 0, samplingInterval, alignmentDateTime);

            return(source.Interpolate(clock, interpolator, deliveryPolicy));
        }
Example #3
0
        /// <summary>
        /// Interpolate a stream using a specified interpolator at interpolation points
        /// given by a clock stream.
        /// </summary>
        /// <typeparam name="T">Type of source messages.</typeparam>
        /// <typeparam name="TClock">Type of messages on the clock stream.</typeparam>
        /// <typeparam name="TInterpolation">Type of the interpolation result.</typeparam>
        /// <param name="source">Source stream.</param>
        /// <param name="clock">Clock stream that dictates the interpolation points.</param>
        /// <param name="interpolator">Interpolator to use for generating results.</param>
        /// <param name="sourceDeliveryPolicy">An optional delivery policy for the source stream.</param>
        /// <param name="clockDeliveryPolicy">An optional delivery policy for the clock stream.</param>
        /// <returns>Output stream.</returns>
        public static IProducer <TInterpolation> Interpolate <T, TClock, TInterpolation>(
            this IProducer <T> source,
            IProducer <TClock> clock,
            Interpolator <T, TInterpolation> interpolator,
            DeliveryPolicy sourceDeliveryPolicy = null,
            DeliveryPolicy clockDeliveryPolicy  = null)
        {
            var fuse = new Fuse <TClock, T, TInterpolation, TInterpolation>(source.Out.Pipeline, interpolator, (clk, data) => data[0]);

            clock.PipeTo(fuse.InPrimary, clockDeliveryPolicy);
            source.PipeTo(fuse.InSecondaries[0], sourceDeliveryPolicy);
            return(fuse);
        }
Example #4
0
 /// <summary>
 /// Fuse with values from a secondary stream based on a specified interpolator.
 /// </summary>
 /// <typeparam name="TPrimary">Type of primary messages.</typeparam>
 /// <typeparam name="TSecondary">Type of secondary messages.</typeparam>
 /// <typeparam name="TInterpolation">Type of the interpolation result.</typeparam>
 /// <typeparam name="TOut">Type of output messages.</typeparam>
 /// <param name="primary">Primary stream.</param>
 /// <param name="secondary">Secondary stream.</param>
 /// <param name="interpolator">Interpolator to use when fusing the streams.</param>
 /// <param name="outputCreator">Function mapping the primary and secondary messages to an output message type.</param>
 /// <param name="primaryDeliveryPolicy">An optional delivery policy for the primary stream.</param>
 /// <param name="secondaryDeliveryPolicy">An optional delivery policy for the secondary stream(s).</param>
 /// <returns>Stream of fused values.</returns>
 public static IProducer <TOut> Fuse <TPrimary, TSecondary, TInterpolation, TOut>(
     this IProducer <TPrimary> primary,
     IProducer <TSecondary> secondary,
     Interpolator <TSecondary, TInterpolation> interpolator,
     Func <TPrimary, TInterpolation, TOut> outputCreator,
     DeliveryPolicy primaryDeliveryPolicy   = null,
     DeliveryPolicy secondaryDeliveryPolicy = null)
 {
     return(Fuse(
                primary,
                new[] { secondary },
                interpolator,
                (m, secondaryArray) => outputCreator(m, secondaryArray[0]),
                primaryDeliveryPolicy,
                secondaryDeliveryPolicy));
 }
Example #5
0
        /// <summary>
        /// Interpolate a stream using a specified interpolator at a given sampling interval.
        /// </summary>
        /// <typeparam name="T">Type of source messages.</typeparam>
        /// <typeparam name="TInterpolation">Type of the interpolation result.</typeparam>
        /// <param name="source">Source stream.</param>
        /// <param name="samplingInterval">Interval at which to apply the interpolator.</param>
        /// <param name="interpolator">Interpolator to use for generating results.</param>
        /// <param name="alignmentDateTime">If non-null, this parameter specifies a time to align the sampling messages with. If the parameter
        /// is non-null, the messages will have originating times that align with (i.e., are an integral number of intervals away from) the
        /// specified alignment time.</param>
        /// <param name="deliveryPolicy">An optional delivery policy for the source stream.</param>
        /// <param name="name">An optional name for the stream operator.</param>
        /// <returns>Output stream.</returns>
        public static IProducer <TInterpolation> Interpolate <T, TInterpolation>(
            this IProducer <T> source,
            TimeSpan samplingInterval,
            Interpolator <T, TInterpolation> interpolator,
            DateTime?alignmentDateTime        = null,
            DeliveryPolicy <T> deliveryPolicy = null,
            string name = null)
        {
            var clock = Generators.Repeat(source.Out.Pipeline, 0, samplingInterval, alignmentDateTime);

            return(source.Interpolate(
                       clock,
                       interpolator,
                       deliveryPolicy,
                       DeliveryPolicy.Unlimited,
                       name ?? $"{nameof(Interpolate)}({interpolator})"));
        }