Skip to content

Commit

Permalink
Merge pull request #1375 from dotnet/dev/bartde/nary_with_tuple
Browse files Browse the repository at this point in the history
N-ary combining operators with tuples.
  • Loading branch information
bartdesmet committed Oct 5, 2020
2 parents 38a0db6 + b0df063 commit 460c58f
Show file tree
Hide file tree
Showing 19 changed files with 3,601 additions and 53 deletions.
25 changes: 20 additions & 5 deletions Rx.NET/Source/src/System.Reactive/Linq/IQueryLanguage.NAry.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,12 @@
// The .NET Foundation licenses this file to you under the MIT License.
// See the LICENSE file in the project root for more information.

// This code was generated by a T4 template at 10/05/2020 14:25:54.

namespace System.Reactive.Linq
{
partial interface IQueryLanguage
{
/* The following code is generated by a T4 template. */

#region CombineLatest and Zip auto-generated code (10/02/2020 11:15:29)

IObservable<TResult> CombineLatest<T1, T2, TResult>(IObservable<T1> source1, IObservable<T2> source2, Func<T1, T2, TResult> resultSelector);
IObservable<TResult> CombineLatest<T1, T2, T3, TResult>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, Func<T1, T2, T3, TResult> resultSelector);
IObservable<TResult> CombineLatest<T1, T2, T3, T4, TResult>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, Func<T1, T2, T3, T4, TResult> resultSelector);
Expand Down Expand Up @@ -41,7 +39,24 @@ partial interface IQueryLanguage
IObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, TResult> resultSelector);
IObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, TResult> resultSelector);
IObservable<TResult> Zip<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8, IObservable<T9> source9, IObservable<T10> source10, IObservable<T11> source11, IObservable<T12> source12, IObservable<T13> source13, IObservable<T14> source14, IObservable<T15> source15, IObservable<T16> source16, Func<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16, TResult> resultSelector);
}

partial interface IQueryLanguageEx
{
IObservable<(T1, T2)> CombineLatest<T1, T2>(IObservable<T1> source1, IObservable<T2> source2);
IObservable<(T1, T2, T3)> CombineLatest<T1, T2, T3>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3);
IObservable<(T1, T2, T3, T4)> CombineLatest<T1, T2, T3, T4>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4);
IObservable<(T1, T2, T3, T4, T5)> CombineLatest<T1, T2, T3, T4, T5>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5);
IObservable<(T1, T2, T3, T4, T5, T6)> CombineLatest<T1, T2, T3, T4, T5, T6>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6);
IObservable<(T1, T2, T3, T4, T5, T6, T7)> CombineLatest<T1, T2, T3, T4, T5, T6, T7>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7);
IObservable<(T1, T2, T3, T4, T5, T6, T7, T8)> CombineLatest<T1, T2, T3, T4, T5, T6, T7, T8>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8);

#endregion
IObservable<(T1, T2)> Zip<T1, T2>(IObservable<T1> source1, IObservable<T2> source2);
IObservable<(T1, T2, T3)> Zip<T1, T2, T3>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3);
IObservable<(T1, T2, T3, T4)> Zip<T1, T2, T3, T4>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4);
IObservable<(T1, T2, T3, T4, T5)> Zip<T1, T2, T3, T4, T5>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5);
IObservable<(T1, T2, T3, T4, T5, T6)> Zip<T1, T2, T3, T4, T5, T6>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6);
IObservable<(T1, T2, T3, T4, T5, T6, T7)> Zip<T1, T2, T3, T4, T5, T6, T7>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7);
IObservable<(T1, T2, T3, T4, T5, T6, T7, T8)> Zip<T1, T2, T3, T4, T5, T6, T7, T8>(IObservable<T1> source1, IObservable<T2> source2, IObservable<T3> source3, IObservable<T4> source4, IObservable<T5> source5, IObservable<T6> source6, IObservable<T7> source7, IObservable<T8> source8);
}
}
35 changes: 30 additions & 5 deletions Rx.NET/Source/src/System.Reactive/Linq/IQueryLanguage.NAry.tt
Original file line number Diff line number Diff line change
Expand Up @@ -8,14 +8,12 @@
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".cs" #>
// This code was generated by a T4 template at <#=DateTime.Now#>.

namespace System.Reactive.Linq
{
partial interface IQueryLanguage
{
/* The following code is generated by a T4 template. */

#region CombineLatest and Zip auto-generated code (<#=DateTime.Now#>)

<#
for (int i = 2; i <= 16; i++)
{
Expand All @@ -39,7 +37,34 @@ for (int i = 2; i <= 16; i++)
<#
}
#>
}

partial interface IQueryLanguageEx
{
<#
for (int i = 2; i <= 8; i++)
{
var genArgs = string.Join(", ", Enumerable.Range(1, i).Select(j => "T" + j));
var parameters = string.Join(", ", Enumerable.Range(1, i).Select(j => "IObservable<T" + j + "> source" + j));
var tuple = "(" + string.Join(", ", Enumerable.Range(1, i).Select(j => "T" + j)) + ")";

#>
IObservable<<#=tuple#>> CombineLatest<<#=genArgs#>>(<#=parameters#>);
<#
}
#>

<#
for (int i = 2; i <= 8; i++)
{
var genArgs = string.Join(", ", Enumerable.Range(1, i).Select(j => "T" + j));
var parameters = string.Join(", ", Enumerable.Range(1, i).Select(j => "IObservable<T" + j + "> source" + j));
var tuple = "(" + string.Join(", ", Enumerable.Range(1, i).Select(j => "T" + j)) + ")";

#endregion
#>
IObservable<<#=tuple#>> Zip<<#=genArgs#>>(<#=parameters#>);
<#
}
#>
}
}
6 changes: 5 additions & 1 deletion Rx.NET/Source/src/System.Reactive/Linq/IQueryLanguageEx.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ namespace System.Reactive.Linq
/// <summary>
/// Internal interface describing the LINQ to Events query language.
/// </summary>
internal interface IQueryLanguageEx
internal partial interface IQueryLanguageEx
{
IObservable<TResult> Create<TResult>(Func<IObserver<TResult>, IEnumerable<IObservable<object>>> iteratorMethod);
IObservable<Unit> Create(Func<IEnumerable<IObservable<object>>> iteratorMethod);
Expand All @@ -28,5 +28,9 @@ internal interface IQueryLanguageEx
IObservable<TResult> ManySelect<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, TResult> selector, IScheduler scheduler);

ListObservable<TSource> ToListObservable<TSource>(IObservable<TSource> source);

IObservable<(TFirst First, TSecond Second)> WithLatestFrom<TFirst, TSecond>(IObservable<TFirst> first, IObservable<TSecond> second);

IObservable<(TFirst First, TSecond Second)> Zip<TFirst, TSecond>(IObservable<TFirst> first, IEnumerable<TSecond> second);
}
}
Loading

0 comments on commit 460c58f

Please sign in to comment.