Jo Shields a575963da9 Imported Upstream version 3.6.0
Former-commit-id: da6be194a6b1221998fc28233f2503bd61dd9d14
2014-08-13 10:39:27 +01:00

1169 lines
61 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System.Collections.Generic;
namespace System.Reactive.Joins
{
/// <summary>
/// Represents an execution plan for join patterns.
/// </summary>
/// <typeparam name="TResult">The type of the results produced by the plan.</typeparam>
public abstract class Plan<TResult>
{
internal Plan()
{
}
internal abstract ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate);
internal static JoinObserver<TSource> CreateObserver<TSource>(
Dictionary<object, IJoinObserver> externalSubscriptions, IObservable<TSource> observable, Action<Exception> onError)
{
var observer = default(JoinObserver<TSource>);
var nonGeneric = default(IJoinObserver);
if (!externalSubscriptions.TryGetValue(observable, out nonGeneric))
{
observer = new JoinObserver<TSource>(observable, onError);
externalSubscriptions.Add(observable, observer);
}
else
{
observer = (JoinObserver<TSource>) nonGeneric;
}
return observer;
}
}
internal class Plan<T1, TResult> : Plan<TResult>
{
internal Pattern<T1> Expression { get; private set; }
internal Func<T1, TResult> Selector { get; private set; }
internal Plan(Pattern<T1> expression, Func<T1, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var activePlan = default(ActivePlan<T1>);
activePlan = new ActivePlan<T1>(firstJoinObserver,
first =>
{
var result = default(TResult);
try
{
result = Selector(first);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, TResult> : Plan<TResult>
{
internal Pattern<T1, T2> Expression { get; private set; }
internal Func<T1, T2, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2> expression, Func<T1, T2, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var activePlan = default(ActivePlan<T1, T2>);
activePlan = new ActivePlan<T1, T2>(firstJoinObserver, secondJoinObserver,
(first, second) =>
{
var result = default(TResult);
try
{
result = Selector(first, second);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3> Expression { get; private set; }
internal Func<T1, T2, T3, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3> expression, Func<T1, T2, T3, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var activePlan = default(ActivePlan<T1, T2, T3>);
activePlan = new ActivePlan<T1, T2, T3>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
(first, second, third) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4> Expression { get; private set; }
internal Func<T1, T2, T3, T4, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4> expression,
Func<T1, T2, T3, T4, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4>);
activePlan = new ActivePlan<T1, T2, T3, T4>(firstJoinObserver, secondJoinObserver, thirdJoinObserver, fourthJoinObserver,
(first, second, third, fourth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
#if !NO_LARGEARITY
internal class Plan<T1, T2, T3, T4, T5, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5> expression,
Func<T1, T2, T3, T4, T5, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5>(firstJoinObserver, secondJoinObserver, thirdJoinObserver, fourthJoinObserver, fifthJoinObserver,
(first, second, third, fourth, fifth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6> expression,
Func<T1, T2, T3, T4, T5, T6, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver,
(first, second, third, fourth, fifth, sixth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7> expression,
Func<T1, T2, T3, T4, T5, T6, T7, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver, seventhJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver, seventhJoinObserver, eighthJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var ninthJoinObserver = CreateObserver(externalSubscriptions, Expression.Ninth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver, seventhJoinObserver, eighthJoinObserver, ninthJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
ninthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
ninthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var ninthJoinObserver = CreateObserver(externalSubscriptions, Expression.Ninth, onError);
var tenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Tenth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver, seventhJoinObserver, eighthJoinObserver, ninthJoinObserver, tenthJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
ninthJoinObserver.RemoveActivePlan(activePlan);
tenthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
ninthJoinObserver.AddActivePlan(activePlan);
tenthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var ninthJoinObserver = CreateObserver(externalSubscriptions, Expression.Ninth, onError);
var tenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Tenth, onError);
var eleventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Eleventh, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver, seventhJoinObserver, eighthJoinObserver, ninthJoinObserver, tenthJoinObserver,eleventhJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
ninthJoinObserver.RemoveActivePlan(activePlan);
tenthJoinObserver.RemoveActivePlan(activePlan);
eleventhJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
ninthJoinObserver.AddActivePlan(activePlan);
tenthJoinObserver.AddActivePlan(activePlan);
eleventhJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var ninthJoinObserver = CreateObserver(externalSubscriptions, Expression.Ninth, onError);
var tenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Tenth, onError);
var eleventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Eleventh, onError);
var twelfthJoinObserver = CreateObserver(externalSubscriptions, Expression.Twelfth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver, seventhJoinObserver, eighthJoinObserver, ninthJoinObserver, tenthJoinObserver, eleventhJoinObserver,
twelfthJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
ninthJoinObserver.RemoveActivePlan(activePlan);
tenthJoinObserver.RemoveActivePlan(activePlan);
eleventhJoinObserver.RemoveActivePlan(activePlan);
twelfthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
ninthJoinObserver.AddActivePlan(activePlan);
tenthJoinObserver.AddActivePlan(activePlan);
eleventhJoinObserver.AddActivePlan(activePlan);
twelfthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var ninthJoinObserver = CreateObserver(externalSubscriptions, Expression.Ninth, onError);
var tenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Tenth, onError);
var eleventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Eleventh, onError);
var twelfthJoinObserver = CreateObserver(externalSubscriptions, Expression.Twelfth, onError);
var thirteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Thirteenth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13>(firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver, seventhJoinObserver, eighthJoinObserver, ninthJoinObserver, tenthJoinObserver, eleventhJoinObserver,
twelfthJoinObserver, thirteenthJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
ninthJoinObserver.RemoveActivePlan(activePlan);
tenthJoinObserver.RemoveActivePlan(activePlan);
eleventhJoinObserver.RemoveActivePlan(activePlan);
twelfthJoinObserver.RemoveActivePlan(activePlan);
thirteenthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
ninthJoinObserver.AddActivePlan(activePlan);
tenthJoinObserver.AddActivePlan(activePlan);
eleventhJoinObserver.AddActivePlan(activePlan);
twelfthJoinObserver.AddActivePlan(activePlan);
thirteenthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var ninthJoinObserver = CreateObserver(externalSubscriptions, Expression.Ninth, onError);
var tenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Tenth, onError);
var eleventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Eleventh, onError);
var twelfthJoinObserver = CreateObserver(externalSubscriptions, Expression.Twelfth, onError);
var thirteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Thirteenth, onError);
var fourteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourteenth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14>(
firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver,
seventhJoinObserver, eighthJoinObserver, ninthJoinObserver,
tenthJoinObserver, eleventhJoinObserver,
twelfthJoinObserver, thirteenthJoinObserver,
fourteenthJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
ninthJoinObserver.RemoveActivePlan(activePlan);
tenthJoinObserver.RemoveActivePlan(activePlan);
eleventhJoinObserver.RemoveActivePlan(activePlan);
twelfthJoinObserver.RemoveActivePlan(activePlan);
thirteenthJoinObserver.RemoveActivePlan(activePlan);
fourteenthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
ninthJoinObserver.AddActivePlan(activePlan);
tenthJoinObserver.AddActivePlan(activePlan);
eleventhJoinObserver.AddActivePlan(activePlan);
twelfthJoinObserver.AddActivePlan(activePlan);
thirteenthJoinObserver.AddActivePlan(activePlan);
fourteenthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var ninthJoinObserver = CreateObserver(externalSubscriptions, Expression.Ninth, onError);
var tenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Tenth, onError);
var eleventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Eleventh, onError);
var twelfthJoinObserver = CreateObserver(externalSubscriptions, Expression.Twelfth, onError);
var thirteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Thirteenth, onError);
var fourteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourteenth, onError);
var fifteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifteenth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15>(
firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver,
seventhJoinObserver, eighthJoinObserver, ninthJoinObserver,
tenthJoinObserver, eleventhJoinObserver,
twelfthJoinObserver, thirteenthJoinObserver,
fourteenthJoinObserver, fifteenthJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
ninthJoinObserver.RemoveActivePlan(activePlan);
tenthJoinObserver.RemoveActivePlan(activePlan);
eleventhJoinObserver.RemoveActivePlan(activePlan);
twelfthJoinObserver.RemoveActivePlan(activePlan);
thirteenthJoinObserver.RemoveActivePlan(activePlan);
fourteenthJoinObserver.RemoveActivePlan(activePlan);
fifteenthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
ninthJoinObserver.AddActivePlan(activePlan);
tenthJoinObserver.AddActivePlan(activePlan);
eleventhJoinObserver.AddActivePlan(activePlan);
twelfthJoinObserver.AddActivePlan(activePlan);
thirteenthJoinObserver.AddActivePlan(activePlan);
fourteenthJoinObserver.AddActivePlan(activePlan);
fifteenthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
internal class Plan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> : Plan<TResult>
{
internal Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> Expression { get; private set; }
internal Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> Selector { get; private set; }
internal Plan(Pattern<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> expression,
Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> selector)
{
Expression = expression;
Selector = selector;
}
internal override ActivePlan Activate(Dictionary<object, IJoinObserver> externalSubscriptions,
IObserver<TResult> observer, Action<ActivePlan> deactivate)
{
var onError = new Action<Exception>(observer.OnError);
var firstJoinObserver = CreateObserver(externalSubscriptions, Expression.First, onError);
var secondJoinObserver = CreateObserver(externalSubscriptions, Expression.Second, onError);
var thirdJoinObserver = CreateObserver(externalSubscriptions, Expression.Third, onError);
var fourthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourth, onError);
var fifthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifth, onError);
var sixthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixth, onError);
var seventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Seventh, onError);
var eighthJoinObserver = CreateObserver(externalSubscriptions, Expression.Eighth, onError);
var ninthJoinObserver = CreateObserver(externalSubscriptions, Expression.Ninth, onError);
var tenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Tenth, onError);
var eleventhJoinObserver = CreateObserver(externalSubscriptions, Expression.Eleventh, onError);
var twelfthJoinObserver = CreateObserver(externalSubscriptions, Expression.Twelfth, onError);
var thirteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Thirteenth, onError);
var fourteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fourteenth, onError);
var fifteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Fifteenth, onError);
var sixteenthJoinObserver = CreateObserver(externalSubscriptions, Expression.Sixteenth, onError);
var activePlan = default(ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>);
activePlan = new ActivePlan<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16>(
firstJoinObserver, secondJoinObserver, thirdJoinObserver,
fourthJoinObserver, fifthJoinObserver, sixthJoinObserver,
seventhJoinObserver, eighthJoinObserver, ninthJoinObserver,
tenthJoinObserver, eleventhJoinObserver,
twelfthJoinObserver, thirteenthJoinObserver,
fourteenthJoinObserver, fifteenthJoinObserver,
sixteenthJoinObserver,
(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth) =>
{
var result = default(TResult);
try
{
result = Selector(first, second, third, fourth, fifth, sixth, seventh, eighth, ninth, tenth, eleventh, twelfth, thirteenth, fourteenth, fifteenth, sixteenth);
}
catch (Exception exception)
{
observer.OnError(exception);
return;
}
observer.OnNext(result);
},
() =>
{
firstJoinObserver.RemoveActivePlan(activePlan);
secondJoinObserver.RemoveActivePlan(activePlan);
thirdJoinObserver.RemoveActivePlan(activePlan);
fourthJoinObserver.RemoveActivePlan(activePlan);
fifthJoinObserver.RemoveActivePlan(activePlan);
sixthJoinObserver.RemoveActivePlan(activePlan);
seventhJoinObserver.RemoveActivePlan(activePlan);
eighthJoinObserver.RemoveActivePlan(activePlan);
ninthJoinObserver.RemoveActivePlan(activePlan);
tenthJoinObserver.RemoveActivePlan(activePlan);
eleventhJoinObserver.RemoveActivePlan(activePlan);
twelfthJoinObserver.RemoveActivePlan(activePlan);
thirteenthJoinObserver.RemoveActivePlan(activePlan);
fourteenthJoinObserver.RemoveActivePlan(activePlan);
fifteenthJoinObserver.RemoveActivePlan(activePlan);
sixteenthJoinObserver.RemoveActivePlan(activePlan);
deactivate(activePlan);
});
firstJoinObserver.AddActivePlan(activePlan);
secondJoinObserver.AddActivePlan(activePlan);
thirdJoinObserver.AddActivePlan(activePlan);
fourthJoinObserver.AddActivePlan(activePlan);
fifthJoinObserver.AddActivePlan(activePlan);
sixthJoinObserver.AddActivePlan(activePlan);
seventhJoinObserver.AddActivePlan(activePlan);
eighthJoinObserver.AddActivePlan(activePlan);
ninthJoinObserver.AddActivePlan(activePlan);
tenthJoinObserver.AddActivePlan(activePlan);
eleventhJoinObserver.AddActivePlan(activePlan);
twelfthJoinObserver.AddActivePlan(activePlan);
thirteenthJoinObserver.AddActivePlan(activePlan);
fourteenthJoinObserver.AddActivePlan(activePlan);
fifteenthJoinObserver.AddActivePlan(activePlan);
sixteenthJoinObserver.AddActivePlan(activePlan);
return activePlan;
}
}
#endif
}