1 // Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
2 
3 namespace System.Reactive.Joins
4 {
5     /// <summary>
6     /// Abstract base class for join patterns.
7     /// </summary>
8     public abstract class Pattern
9     {
Pattern()10         internal Pattern()
11         {
12         }
13     }
14 
15     /* The following code is generated by a tool checked in to $/.../Source/Tools/CodeGenerators. */
16 
17     #region Joins auto-generated code (8/4/2012 1:00:26 AM)
18 
19     /// <summary>
20     /// Represents a join pattern over one observable sequence.
21     /// </summary>
22     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
23     public class Pattern<TSource1> : Pattern
24     {
Pattern(IObservable<TSource1> first)25         internal Pattern(IObservable<TSource1> first)
26         {
27             First = first;
28         }
29 
30         internal IObservable<TSource1> First { get; private set; }
31 
32         /// <summary>
33         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
34         /// </summary>
35         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
36         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
37         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
38         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TResult> selector)39         public Plan<TResult> Then<TResult>(Func<TSource1, TResult> selector)
40         {
41             if (selector == null)
42                 throw new ArgumentNullException("selector");
43 
44             return new Plan<TSource1, TResult>(this, selector);
45         }
46 
47     }
48 
49     /// <summary>
50     /// Represents a join pattern over two observable sequences.
51     /// </summary>
52     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
53     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
54     public class Pattern<TSource1, TSource2> : Pattern
55     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second)56         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second)
57         {
58             First = first;
59             Second = second;
60         }
61 
62         internal IObservable<TSource1> First { get; private set; }
63         internal IObservable<TSource2> Second { get; private set; }
64 
65         /// <summary>
66         /// Creates a pattern that matches when all three observable sequences have an available element.
67         /// </summary>
68         /// <typeparam name="TSource3">The type of the elements in the third observable sequence.</typeparam>
69         /// <param name="other">Observable sequence to match with the two previous sequences.</param>
70         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
71         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource3> other)72         public Pattern<TSource1, TSource2, TSource3> And<TSource3>(IObservable<TSource3> other)
73         {
74             if (other == null)
75                 throw new ArgumentNullException("other");
76 
77             return new Pattern<TSource1, TSource2, TSource3>(First, Second, other);
78         }
79 
80         /// <summary>
81         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
82         /// </summary>
83         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
84         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
85         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
86         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TResult> selector)87         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TResult> selector)
88         {
89             if (selector == null)
90                 throw new ArgumentNullException("selector");
91 
92             return new Plan<TSource1, TSource2, TResult>(this, selector);
93         }
94 
95     }
96 
97     /// <summary>
98     /// Represents a join pattern over three observable sequences.
99     /// </summary>
100     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
101     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
102     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
103     public class Pattern<TSource1, TSource2, TSource3> : Pattern
104     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third)105         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third)
106         {
107             First = first;
108             Second = second;
109             Third = third;
110         }
111 
112         internal IObservable<TSource1> First { get; private set; }
113         internal IObservable<TSource2> Second { get; private set; }
114         internal IObservable<TSource3> Third { get; private set; }
115 
116         /// <summary>
117         /// Creates a pattern that matches when all four observable sequences have an available element.
118         /// </summary>
119         /// <typeparam name="TSource4">The type of the elements in the fourth observable sequence.</typeparam>
120         /// <param name="other">Observable sequence to match with the three previous sequences.</param>
121         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
122         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource4> other)123         public Pattern<TSource1, TSource2, TSource3, TSource4> And<TSource4>(IObservable<TSource4> other)
124         {
125             if (other == null)
126                 throw new ArgumentNullException("other");
127 
128             return new Pattern<TSource1, TSource2, TSource3, TSource4>(First, Second, Third, other);
129         }
130 
131         /// <summary>
132         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
133         /// </summary>
134         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
135         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
136         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
137         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TResult> selector)138         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TResult> selector)
139         {
140             if (selector == null)
141                 throw new ArgumentNullException("selector");
142 
143             return new Plan<TSource1, TSource2, TSource3, TResult>(this, selector);
144         }
145 
146     }
147 
148     /// <summary>
149     /// Represents a join pattern over four observable sequences.
150     /// </summary>
151     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
152     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
153     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
154     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
155     public class Pattern<TSource1, TSource2, TSource3, TSource4> : Pattern
156     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth)157         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth)
158         {
159             First = first;
160             Second = second;
161             Third = third;
162             Fourth = fourth;
163         }
164 
165         internal IObservable<TSource1> First { get; private set; }
166         internal IObservable<TSource2> Second { get; private set; }
167         internal IObservable<TSource3> Third { get; private set; }
168         internal IObservable<TSource4> Fourth { get; private set; }
169 
170 #if !NO_LARGEARITY
171         /// <summary>
172         /// Creates a pattern that matches when all five observable sequences have an available element.
173         /// </summary>
174         /// <typeparam name="TSource5">The type of the elements in the fifth observable sequence.</typeparam>
175         /// <param name="other">Observable sequence to match with the four previous sequences.</param>
176         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
177         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource5> other)178         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5> And<TSource5>(IObservable<TSource5> other)
179         {
180             if (other == null)
181                 throw new ArgumentNullException("other");
182 
183             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5>(First, Second, Third, Fourth, other);
184         }
185 #endif
186 
187         /// <summary>
188         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
189         /// </summary>
190         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
191         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
192         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
193         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TResult> selector)194         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TResult> selector)
195         {
196             if (selector == null)
197                 throw new ArgumentNullException("selector");
198 
199             return new Plan<TSource1, TSource2, TSource3, TSource4, TResult>(this, selector);
200         }
201 
202     }
203 
204 #if !NO_LARGEARITY
205     /// <summary>
206     /// Represents a join pattern over five observable sequences.
207     /// </summary>
208     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
209     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
210     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
211     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
212     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
213     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5> : Pattern
214     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth)215         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth)
216         {
217             First = first;
218             Second = second;
219             Third = third;
220             Fourth = fourth;
221             Fifth = fifth;
222         }
223 
224         internal IObservable<TSource1> First { get; private set; }
225         internal IObservable<TSource2> Second { get; private set; }
226         internal IObservable<TSource3> Third { get; private set; }
227         internal IObservable<TSource4> Fourth { get; private set; }
228         internal IObservable<TSource5> Fifth { get; private set; }
229 
230         /// <summary>
231         /// Creates a pattern that matches when all six observable sequences have an available element.
232         /// </summary>
233         /// <typeparam name="TSource6">The type of the elements in the sixth observable sequence.</typeparam>
234         /// <param name="other">Observable sequence to match with the five previous sequences.</param>
235         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
236         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource6> other)237         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6> And<TSource6>(IObservable<TSource6> other)
238         {
239             if (other == null)
240                 throw new ArgumentNullException("other");
241 
242             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6>(First, Second, Third, Fourth, Fifth, other);
243         }
244 
245         /// <summary>
246         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
247         /// </summary>
248         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
249         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
250         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
251         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TResult> selector)252         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TResult> selector)
253         {
254             if (selector == null)
255                 throw new ArgumentNullException("selector");
256 
257             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TResult>(this, selector);
258         }
259 
260     }
261 
262     /// <summary>
263     /// Represents a join pattern over six observable sequences.
264     /// </summary>
265     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
266     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
267     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
268     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
269     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
270     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
271     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6> : Pattern
272     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth)273         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth)
274         {
275             First = first;
276             Second = second;
277             Third = third;
278             Fourth = fourth;
279             Fifth = fifth;
280             Sixth = sixth;
281         }
282 
283         internal IObservable<TSource1> First { get; private set; }
284         internal IObservable<TSource2> Second { get; private set; }
285         internal IObservable<TSource3> Third { get; private set; }
286         internal IObservable<TSource4> Fourth { get; private set; }
287         internal IObservable<TSource5> Fifth { get; private set; }
288         internal IObservable<TSource6> Sixth { get; private set; }
289 
290         /// <summary>
291         /// Creates a pattern that matches when all seven observable sequences have an available element.
292         /// </summary>
293         /// <typeparam name="TSource7">The type of the elements in the seventh observable sequence.</typeparam>
294         /// <param name="other">Observable sequence to match with the six previous sequences.</param>
295         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
296         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource7> other)297         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7> And<TSource7>(IObservable<TSource7> other)
298         {
299             if (other == null)
300                 throw new ArgumentNullException("other");
301 
302             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7>(First, Second, Third, Fourth, Fifth, Sixth, other);
303         }
304 
305         /// <summary>
306         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
307         /// </summary>
308         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
309         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
310         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
311         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult> selector)312         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult> selector)
313         {
314             if (selector == null)
315                 throw new ArgumentNullException("selector");
316 
317             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TResult>(this, selector);
318         }
319 
320     }
321 
322     /// <summary>
323     /// Represents a join pattern over seven observable sequences.
324     /// </summary>
325     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
326     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
327     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
328     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
329     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
330     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
331     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
332     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7> : Pattern
333     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh)334         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh)
335         {
336             First = first;
337             Second = second;
338             Third = third;
339             Fourth = fourth;
340             Fifth = fifth;
341             Sixth = sixth;
342             Seventh = seventh;
343         }
344 
345         internal IObservable<TSource1> First { get; private set; }
346         internal IObservable<TSource2> Second { get; private set; }
347         internal IObservable<TSource3> Third { get; private set; }
348         internal IObservable<TSource4> Fourth { get; private set; }
349         internal IObservable<TSource5> Fifth { get; private set; }
350         internal IObservable<TSource6> Sixth { get; private set; }
351         internal IObservable<TSource7> Seventh { get; private set; }
352 
353         /// <summary>
354         /// Creates a pattern that matches when all eight observable sequences have an available element.
355         /// </summary>
356         /// <typeparam name="TSource8">The type of the elements in the eighth observable sequence.</typeparam>
357         /// <param name="other">Observable sequence to match with the seven previous sequences.</param>
358         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
359         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource8> other)360         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8> And<TSource8>(IObservable<TSource8> other)
361         {
362             if (other == null)
363                 throw new ArgumentNullException("other");
364 
365             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, other);
366         }
367 
368         /// <summary>
369         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
370         /// </summary>
371         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
372         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
373         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
374         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult> selector)375         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult> selector)
376         {
377             if (selector == null)
378                 throw new ArgumentNullException("selector");
379 
380             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TResult>(this, selector);
381         }
382 
383     }
384 
385     /// <summary>
386     /// Represents a join pattern over eight observable sequences.
387     /// </summary>
388     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
389     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
390     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
391     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
392     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
393     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
394     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
395     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
396     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8> : Pattern
397     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth)398         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth)
399         {
400             First = first;
401             Second = second;
402             Third = third;
403             Fourth = fourth;
404             Fifth = fifth;
405             Sixth = sixth;
406             Seventh = seventh;
407             Eighth = eighth;
408         }
409 
410         internal IObservable<TSource1> First { get; private set; }
411         internal IObservable<TSource2> Second { get; private set; }
412         internal IObservable<TSource3> Third { get; private set; }
413         internal IObservable<TSource4> Fourth { get; private set; }
414         internal IObservable<TSource5> Fifth { get; private set; }
415         internal IObservable<TSource6> Sixth { get; private set; }
416         internal IObservable<TSource7> Seventh { get; private set; }
417         internal IObservable<TSource8> Eighth { get; private set; }
418 
419         /// <summary>
420         /// Creates a pattern that matches when all nine observable sequences have an available element.
421         /// </summary>
422         /// <typeparam name="TSource9">The type of the elements in the ninth observable sequence.</typeparam>
423         /// <param name="other">Observable sequence to match with the eight previous sequences.</param>
424         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
425         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource9> other)426         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9> And<TSource9>(IObservable<TSource9> other)
427         {
428             if (other == null)
429                 throw new ArgumentNullException("other");
430 
431             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, other);
432         }
433 
434         /// <summary>
435         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
436         /// </summary>
437         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
438         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
439         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
440         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult> selector)441         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult> selector)
442         {
443             if (selector == null)
444                 throw new ArgumentNullException("selector");
445 
446             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TResult>(this, selector);
447         }
448 
449     }
450 
451     /// <summary>
452     /// Represents a join pattern over nine observable sequences.
453     /// </summary>
454     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
455     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
456     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
457     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
458     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
459     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
460     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
461     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
462     /// <typeparam name="TSource9">The type of the elements in the ninth source sequence.</typeparam>
463     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9> : Pattern
464     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth)465         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth)
466         {
467             First = first;
468             Second = second;
469             Third = third;
470             Fourth = fourth;
471             Fifth = fifth;
472             Sixth = sixth;
473             Seventh = seventh;
474             Eighth = eighth;
475             Ninth = ninth;
476         }
477 
478         internal IObservable<TSource1> First { get; private set; }
479         internal IObservable<TSource2> Second { get; private set; }
480         internal IObservable<TSource3> Third { get; private set; }
481         internal IObservable<TSource4> Fourth { get; private set; }
482         internal IObservable<TSource5> Fifth { get; private set; }
483         internal IObservable<TSource6> Sixth { get; private set; }
484         internal IObservable<TSource7> Seventh { get; private set; }
485         internal IObservable<TSource8> Eighth { get; private set; }
486         internal IObservable<TSource9> Ninth { get; private set; }
487 
488         /// <summary>
489         /// Creates a pattern that matches when all ten observable sequences have an available element.
490         /// </summary>
491         /// <typeparam name="TSource10">The type of the elements in the tenth observable sequence.</typeparam>
492         /// <param name="other">Observable sequence to match with the nine previous sequences.</param>
493         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
494         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource10> other)495         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10> And<TSource10>(IObservable<TSource10> other)
496         {
497             if (other == null)
498                 throw new ArgumentNullException("other");
499 
500             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Ninth, other);
501         }
502 
503         /// <summary>
504         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
505         /// </summary>
506         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
507         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
508         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
509         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult> selector)510         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult> selector)
511         {
512             if (selector == null)
513                 throw new ArgumentNullException("selector");
514 
515             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TResult>(this, selector);
516         }
517 
518     }
519 
520     /// <summary>
521     /// Represents a join pattern over ten observable sequences.
522     /// </summary>
523     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
524     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
525     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
526     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
527     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
528     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
529     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
530     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
531     /// <typeparam name="TSource9">The type of the elements in the ninth source sequence.</typeparam>
532     /// <typeparam name="TSource10">The type of the elements in the tenth source sequence.</typeparam>
533     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10> : Pattern
534     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth)535         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth)
536         {
537             First = first;
538             Second = second;
539             Third = third;
540             Fourth = fourth;
541             Fifth = fifth;
542             Sixth = sixth;
543             Seventh = seventh;
544             Eighth = eighth;
545             Ninth = ninth;
546             Tenth = tenth;
547         }
548 
549         internal IObservable<TSource1> First { get; private set; }
550         internal IObservable<TSource2> Second { get; private set; }
551         internal IObservable<TSource3> Third { get; private set; }
552         internal IObservable<TSource4> Fourth { get; private set; }
553         internal IObservable<TSource5> Fifth { get; private set; }
554         internal IObservable<TSource6> Sixth { get; private set; }
555         internal IObservable<TSource7> Seventh { get; private set; }
556         internal IObservable<TSource8> Eighth { get; private set; }
557         internal IObservable<TSource9> Ninth { get; private set; }
558         internal IObservable<TSource10> Tenth { get; private set; }
559 
560         /// <summary>
561         /// Creates a pattern that matches when all eleven observable sequences have an available element.
562         /// </summary>
563         /// <typeparam name="TSource11">The type of the elements in the eleventh observable sequence.</typeparam>
564         /// <param name="other">Observable sequence to match with the ten previous sequences.</param>
565         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
566         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource11> other)567         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11> And<TSource11>(IObservable<TSource11> other)
568         {
569             if (other == null)
570                 throw new ArgumentNullException("other");
571 
572             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Ninth, Tenth, other);
573         }
574 
575         /// <summary>
576         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
577         /// </summary>
578         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
579         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
580         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
581         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult> selector)582         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult> selector)
583         {
584             if (selector == null)
585                 throw new ArgumentNullException("selector");
586 
587             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TResult>(this, selector);
588         }
589 
590     }
591 
592     /// <summary>
593     /// Represents a join pattern over eleven observable sequences.
594     /// </summary>
595     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
596     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
597     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
598     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
599     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
600     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
601     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
602     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
603     /// <typeparam name="TSource9">The type of the elements in the ninth source sequence.</typeparam>
604     /// <typeparam name="TSource10">The type of the elements in the tenth source sequence.</typeparam>
605     /// <typeparam name="TSource11">The type of the elements in the eleventh source sequence.</typeparam>
606     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11> : Pattern
607     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh)608         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh)
609         {
610             First = first;
611             Second = second;
612             Third = third;
613             Fourth = fourth;
614             Fifth = fifth;
615             Sixth = sixth;
616             Seventh = seventh;
617             Eighth = eighth;
618             Ninth = ninth;
619             Tenth = tenth;
620             Eleventh = eleventh;
621         }
622 
623         internal IObservable<TSource1> First { get; private set; }
624         internal IObservable<TSource2> Second { get; private set; }
625         internal IObservable<TSource3> Third { get; private set; }
626         internal IObservable<TSource4> Fourth { get; private set; }
627         internal IObservable<TSource5> Fifth { get; private set; }
628         internal IObservable<TSource6> Sixth { get; private set; }
629         internal IObservable<TSource7> Seventh { get; private set; }
630         internal IObservable<TSource8> Eighth { get; private set; }
631         internal IObservable<TSource9> Ninth { get; private set; }
632         internal IObservable<TSource10> Tenth { get; private set; }
633         internal IObservable<TSource11> Eleventh { get; private set; }
634 
635         /// <summary>
636         /// Creates a pattern that matches when all twelve observable sequences have an available element.
637         /// </summary>
638         /// <typeparam name="TSource12">The type of the elements in the twelfth observable sequence.</typeparam>
639         /// <param name="other">Observable sequence to match with the eleven previous sequences.</param>
640         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
641         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource12> other)642         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12> And<TSource12>(IObservable<TSource12> other)
643         {
644             if (other == null)
645                 throw new ArgumentNullException("other");
646 
647             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Ninth, Tenth, Eleventh, other);
648         }
649 
650         /// <summary>
651         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
652         /// </summary>
653         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
654         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
655         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
656         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult> selector)657         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult> selector)
658         {
659             if (selector == null)
660                 throw new ArgumentNullException("selector");
661 
662             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TResult>(this, selector);
663         }
664 
665     }
666 
667     /// <summary>
668     /// Represents a join pattern over twelve observable sequences.
669     /// </summary>
670     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
671     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
672     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
673     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
674     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
675     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
676     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
677     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
678     /// <typeparam name="TSource9">The type of the elements in the ninth source sequence.</typeparam>
679     /// <typeparam name="TSource10">The type of the elements in the tenth source sequence.</typeparam>
680     /// <typeparam name="TSource11">The type of the elements in the eleventh source sequence.</typeparam>
681     /// <typeparam name="TSource12">The type of the elements in the twelfth source sequence.</typeparam>
682     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12> : Pattern
683     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth)684         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth)
685         {
686             First = first;
687             Second = second;
688             Third = third;
689             Fourth = fourth;
690             Fifth = fifth;
691             Sixth = sixth;
692             Seventh = seventh;
693             Eighth = eighth;
694             Ninth = ninth;
695             Tenth = tenth;
696             Eleventh = eleventh;
697             Twelfth = twelfth;
698         }
699 
700         internal IObservable<TSource1> First { get; private set; }
701         internal IObservable<TSource2> Second { get; private set; }
702         internal IObservable<TSource3> Third { get; private set; }
703         internal IObservable<TSource4> Fourth { get; private set; }
704         internal IObservable<TSource5> Fifth { get; private set; }
705         internal IObservable<TSource6> Sixth { get; private set; }
706         internal IObservable<TSource7> Seventh { get; private set; }
707         internal IObservable<TSource8> Eighth { get; private set; }
708         internal IObservable<TSource9> Ninth { get; private set; }
709         internal IObservable<TSource10> Tenth { get; private set; }
710         internal IObservable<TSource11> Eleventh { get; private set; }
711         internal IObservable<TSource12> Twelfth { get; private set; }
712 
713         /// <summary>
714         /// Creates a pattern that matches when all thirteen observable sequences have an available element.
715         /// </summary>
716         /// <typeparam name="TSource13">The type of the elements in the thirteenth observable sequence.</typeparam>
717         /// <param name="other">Observable sequence to match with the twelve previous sequences.</param>
718         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
719         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource13> other)720         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13> And<TSource13>(IObservable<TSource13> other)
721         {
722             if (other == null)
723                 throw new ArgumentNullException("other");
724 
725             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Ninth, Tenth, Eleventh, Twelfth, other);
726         }
727 
728         /// <summary>
729         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
730         /// </summary>
731         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
732         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
733         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
734         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult> selector)735         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult> selector)
736         {
737             if (selector == null)
738                 throw new ArgumentNullException("selector");
739 
740             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TResult>(this, selector);
741         }
742 
743     }
744 
745     /// <summary>
746     /// Represents a join pattern over thirteen observable sequences.
747     /// </summary>
748     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
749     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
750     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
751     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
752     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
753     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
754     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
755     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
756     /// <typeparam name="TSource9">The type of the elements in the ninth source sequence.</typeparam>
757     /// <typeparam name="TSource10">The type of the elements in the tenth source sequence.</typeparam>
758     /// <typeparam name="TSource11">The type of the elements in the eleventh source sequence.</typeparam>
759     /// <typeparam name="TSource12">The type of the elements in the twelfth source sequence.</typeparam>
760     /// <typeparam name="TSource13">The type of the elements in the thirteenth source sequence.</typeparam>
761     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13> : Pattern
762     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth, IObservable<TSource13> thirteenth)763         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth, IObservable<TSource13> thirteenth)
764         {
765             First = first;
766             Second = second;
767             Third = third;
768             Fourth = fourth;
769             Fifth = fifth;
770             Sixth = sixth;
771             Seventh = seventh;
772             Eighth = eighth;
773             Ninth = ninth;
774             Tenth = tenth;
775             Eleventh = eleventh;
776             Twelfth = twelfth;
777             Thirteenth = thirteenth;
778         }
779 
780         internal IObservable<TSource1> First { get; private set; }
781         internal IObservable<TSource2> Second { get; private set; }
782         internal IObservable<TSource3> Third { get; private set; }
783         internal IObservable<TSource4> Fourth { get; private set; }
784         internal IObservable<TSource5> Fifth { get; private set; }
785         internal IObservable<TSource6> Sixth { get; private set; }
786         internal IObservable<TSource7> Seventh { get; private set; }
787         internal IObservable<TSource8> Eighth { get; private set; }
788         internal IObservable<TSource9> Ninth { get; private set; }
789         internal IObservable<TSource10> Tenth { get; private set; }
790         internal IObservable<TSource11> Eleventh { get; private set; }
791         internal IObservable<TSource12> Twelfth { get; private set; }
792         internal IObservable<TSource13> Thirteenth { get; private set; }
793 
794         /// <summary>
795         /// Creates a pattern that matches when all fourteen observable sequences have an available element.
796         /// </summary>
797         /// <typeparam name="TSource14">The type of the elements in the fourteenth observable sequence.</typeparam>
798         /// <param name="other">Observable sequence to match with the thirteen previous sequences.</param>
799         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
800         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource14> other)801         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14> And<TSource14>(IObservable<TSource14> other)
802         {
803             if (other == null)
804                 throw new ArgumentNullException("other");
805 
806             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Ninth, Tenth, Eleventh, Twelfth, Thirteenth, other);
807         }
808 
809         /// <summary>
810         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
811         /// </summary>
812         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
813         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
814         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
815         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult> selector)816         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult> selector)
817         {
818             if (selector == null)
819                 throw new ArgumentNullException("selector");
820 
821             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TResult>(this, selector);
822         }
823 
824     }
825 
826     /// <summary>
827     /// Represents a join pattern over fourteen observable sequences.
828     /// </summary>
829     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
830     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
831     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
832     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
833     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
834     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
835     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
836     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
837     /// <typeparam name="TSource9">The type of the elements in the ninth source sequence.</typeparam>
838     /// <typeparam name="TSource10">The type of the elements in the tenth source sequence.</typeparam>
839     /// <typeparam name="TSource11">The type of the elements in the eleventh source sequence.</typeparam>
840     /// <typeparam name="TSource12">The type of the elements in the twelfth source sequence.</typeparam>
841     /// <typeparam name="TSource13">The type of the elements in the thirteenth source sequence.</typeparam>
842     /// <typeparam name="TSource14">The type of the elements in the fourteenth source sequence.</typeparam>
843     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14> : Pattern
844     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth, IObservable<TSource13> thirteenth, IObservable<TSource14> fourteenth)845         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth, IObservable<TSource13> thirteenth, IObservable<TSource14> fourteenth)
846         {
847             First = first;
848             Second = second;
849             Third = third;
850             Fourth = fourth;
851             Fifth = fifth;
852             Sixth = sixth;
853             Seventh = seventh;
854             Eighth = eighth;
855             Ninth = ninth;
856             Tenth = tenth;
857             Eleventh = eleventh;
858             Twelfth = twelfth;
859             Thirteenth = thirteenth;
860             Fourteenth = fourteenth;
861         }
862 
863         internal IObservable<TSource1> First { get; private set; }
864         internal IObservable<TSource2> Second { get; private set; }
865         internal IObservable<TSource3> Third { get; private set; }
866         internal IObservable<TSource4> Fourth { get; private set; }
867         internal IObservable<TSource5> Fifth { get; private set; }
868         internal IObservable<TSource6> Sixth { get; private set; }
869         internal IObservable<TSource7> Seventh { get; private set; }
870         internal IObservable<TSource8> Eighth { get; private set; }
871         internal IObservable<TSource9> Ninth { get; private set; }
872         internal IObservable<TSource10> Tenth { get; private set; }
873         internal IObservable<TSource11> Eleventh { get; private set; }
874         internal IObservable<TSource12> Twelfth { get; private set; }
875         internal IObservable<TSource13> Thirteenth { get; private set; }
876         internal IObservable<TSource14> Fourteenth { get; private set; }
877 
878         /// <summary>
879         /// Creates a pattern that matches when all fifteen observable sequences have an available element.
880         /// </summary>
881         /// <typeparam name="TSource15">The type of the elements in the fifteenth observable sequence.</typeparam>
882         /// <param name="other">Observable sequence to match with the fourteen previous sequences.</param>
883         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
884         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource15> other)885         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15> And<TSource15>(IObservable<TSource15> other)
886         {
887             if (other == null)
888                 throw new ArgumentNullException("other");
889 
890             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Ninth, Tenth, Eleventh, Twelfth, Thirteenth, Fourteenth, other);
891         }
892 
893         /// <summary>
894         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
895         /// </summary>
896         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
897         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
898         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
899         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult> selector)900         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult> selector)
901         {
902             if (selector == null)
903                 throw new ArgumentNullException("selector");
904 
905             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TResult>(this, selector);
906         }
907 
908     }
909 
910     /// <summary>
911     /// Represents a join pattern over fifteen observable sequences.
912     /// </summary>
913     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
914     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
915     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
916     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
917     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
918     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
919     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
920     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
921     /// <typeparam name="TSource9">The type of the elements in the ninth source sequence.</typeparam>
922     /// <typeparam name="TSource10">The type of the elements in the tenth source sequence.</typeparam>
923     /// <typeparam name="TSource11">The type of the elements in the eleventh source sequence.</typeparam>
924     /// <typeparam name="TSource12">The type of the elements in the twelfth source sequence.</typeparam>
925     /// <typeparam name="TSource13">The type of the elements in the thirteenth source sequence.</typeparam>
926     /// <typeparam name="TSource14">The type of the elements in the fourteenth source sequence.</typeparam>
927     /// <typeparam name="TSource15">The type of the elements in the fifteenth source sequence.</typeparam>
928     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15> : Pattern
929     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth, IObservable<TSource13> thirteenth, IObservable<TSource14> fourteenth, IObservable<TSource15> fifteenth)930         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth, IObservable<TSource13> thirteenth, IObservable<TSource14> fourteenth, IObservable<TSource15> fifteenth)
931         {
932             First = first;
933             Second = second;
934             Third = third;
935             Fourth = fourth;
936             Fifth = fifth;
937             Sixth = sixth;
938             Seventh = seventh;
939             Eighth = eighth;
940             Ninth = ninth;
941             Tenth = tenth;
942             Eleventh = eleventh;
943             Twelfth = twelfth;
944             Thirteenth = thirteenth;
945             Fourteenth = fourteenth;
946             Fifteenth = fifteenth;
947         }
948 
949         internal IObservable<TSource1> First { get; private set; }
950         internal IObservable<TSource2> Second { get; private set; }
951         internal IObservable<TSource3> Third { get; private set; }
952         internal IObservable<TSource4> Fourth { get; private set; }
953         internal IObservable<TSource5> Fifth { get; private set; }
954         internal IObservable<TSource6> Sixth { get; private set; }
955         internal IObservable<TSource7> Seventh { get; private set; }
956         internal IObservable<TSource8> Eighth { get; private set; }
957         internal IObservable<TSource9> Ninth { get; private set; }
958         internal IObservable<TSource10> Tenth { get; private set; }
959         internal IObservable<TSource11> Eleventh { get; private set; }
960         internal IObservable<TSource12> Twelfth { get; private set; }
961         internal IObservable<TSource13> Thirteenth { get; private set; }
962         internal IObservable<TSource14> Fourteenth { get; private set; }
963         internal IObservable<TSource15> Fifteenth { get; private set; }
964 
965         /// <summary>
966         /// Creates a pattern that matches when all sixteen observable sequences have an available element.
967         /// </summary>
968         /// <typeparam name="TSource16">The type of the elements in the sixteenth observable sequence.</typeparam>
969         /// <param name="other">Observable sequence to match with the fifteen previous sequences.</param>
970         /// <returns>Pattern object that matches when all observable sequences have an available element.</returns>
971         /// <exception cref="ArgumentNullException"><paramref name="other"/> is null.</exception>
And(IObservable<TSource16> other)972         public Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16> And<TSource16>(IObservable<TSource16> other)
973         {
974             if (other == null)
975                 throw new ArgumentNullException("other");
976 
977             return new Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16>(First, Second, Third, Fourth, Fifth, Sixth, Seventh, Eighth, Ninth, Tenth, Eleventh, Twelfth, Thirteenth, Fourteenth, Fifteenth, other);
978         }
979 
980         /// <summary>
981         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
982         /// </summary>
983         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
984         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
985         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
986         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult> selector)987         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult> selector)
988         {
989             if (selector == null)
990                 throw new ArgumentNullException("selector");
991 
992             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TResult>(this, selector);
993         }
994 
995     }
996 
997     /// <summary>
998     /// Represents a join pattern over sixteen observable sequences.
999     /// </summary>
1000     /// <typeparam name="TSource1">The type of the elements in the first source sequence.</typeparam>
1001     /// <typeparam name="TSource2">The type of the elements in the second source sequence.</typeparam>
1002     /// <typeparam name="TSource3">The type of the elements in the third source sequence.</typeparam>
1003     /// <typeparam name="TSource4">The type of the elements in the fourth source sequence.</typeparam>
1004     /// <typeparam name="TSource5">The type of the elements in the fifth source sequence.</typeparam>
1005     /// <typeparam name="TSource6">The type of the elements in the sixth source sequence.</typeparam>
1006     /// <typeparam name="TSource7">The type of the elements in the seventh source sequence.</typeparam>
1007     /// <typeparam name="TSource8">The type of the elements in the eighth source sequence.</typeparam>
1008     /// <typeparam name="TSource9">The type of the elements in the ninth source sequence.</typeparam>
1009     /// <typeparam name="TSource10">The type of the elements in the tenth source sequence.</typeparam>
1010     /// <typeparam name="TSource11">The type of the elements in the eleventh source sequence.</typeparam>
1011     /// <typeparam name="TSource12">The type of the elements in the twelfth source sequence.</typeparam>
1012     /// <typeparam name="TSource13">The type of the elements in the thirteenth source sequence.</typeparam>
1013     /// <typeparam name="TSource14">The type of the elements in the fourteenth source sequence.</typeparam>
1014     /// <typeparam name="TSource15">The type of the elements in the fifteenth source sequence.</typeparam>
1015     /// <typeparam name="TSource16">The type of the elements in the sixteenth source sequence.</typeparam>
1016     public class Pattern<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16> : Pattern
1017     {
Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth, IObservable<TSource13> thirteenth, IObservable<TSource14> fourteenth, IObservable<TSource15> fifteenth, IObservable<TSource16> sixteenth)1018         internal Pattern(IObservable<TSource1> first, IObservable<TSource2> second, IObservable<TSource3> third, IObservable<TSource4> fourth, IObservable<TSource5> fifth, IObservable<TSource6> sixth, IObservable<TSource7> seventh, IObservable<TSource8> eighth, IObservable<TSource9> ninth, IObservable<TSource10> tenth, IObservable<TSource11> eleventh, IObservable<TSource12> twelfth, IObservable<TSource13> thirteenth, IObservable<TSource14> fourteenth, IObservable<TSource15> fifteenth, IObservable<TSource16> sixteenth)
1019         {
1020             First = first;
1021             Second = second;
1022             Third = third;
1023             Fourth = fourth;
1024             Fifth = fifth;
1025             Sixth = sixth;
1026             Seventh = seventh;
1027             Eighth = eighth;
1028             Ninth = ninth;
1029             Tenth = tenth;
1030             Eleventh = eleventh;
1031             Twelfth = twelfth;
1032             Thirteenth = thirteenth;
1033             Fourteenth = fourteenth;
1034             Fifteenth = fifteenth;
1035             Sixteenth = sixteenth;
1036         }
1037 
1038         internal IObservable<TSource1> First { get; private set; }
1039         internal IObservable<TSource2> Second { get; private set; }
1040         internal IObservable<TSource3> Third { get; private set; }
1041         internal IObservable<TSource4> Fourth { get; private set; }
1042         internal IObservable<TSource5> Fifth { get; private set; }
1043         internal IObservable<TSource6> Sixth { get; private set; }
1044         internal IObservable<TSource7> Seventh { get; private set; }
1045         internal IObservable<TSource8> Eighth { get; private set; }
1046         internal IObservable<TSource9> Ninth { get; private set; }
1047         internal IObservable<TSource10> Tenth { get; private set; }
1048         internal IObservable<TSource11> Eleventh { get; private set; }
1049         internal IObservable<TSource12> Twelfth { get; private set; }
1050         internal IObservable<TSource13> Thirteenth { get; private set; }
1051         internal IObservable<TSource14> Fourteenth { get; private set; }
1052         internal IObservable<TSource15> Fifteenth { get; private set; }
1053         internal IObservable<TSource16> Sixteenth { get; private set; }
1054 
1055         /// <summary>
1056         /// Matches when all observable sequences have an available element and projects the elements by invoking the selector function.
1057         /// </summary>
1058         /// <typeparam name="TResult">The type of the elements in the result sequence, returned by the selector function.</typeparam>
1059         /// <param name="selector">Selector that will be invoked for elements in the source sequences.</param>
1060         /// <returns>Plan that produces the projected results, to be fed (with other plans) to the When operator.</returns>
1061         /// <exception cref="ArgumentNullException"><paramref name="selector"/> is null.</exception>
Then(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult> selector)1062         public Plan<TResult> Then<TResult>(Func<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult> selector)
1063         {
1064             if (selector == null)
1065                 throw new ArgumentNullException("selector");
1066 
1067             return new Plan<TSource1, TSource2, TSource3, TSource4, TSource5, TSource6, TSource7, TSource8, TSource9, TSource10, TSource11, TSource12, TSource13, TSource14, TSource15, TSource16, TResult>(this, selector);
1068         }
1069 
1070     }
1071 
1072 #endif
1073 
1074     #endregion
1075 }