Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

N-ary combining operators with tuples. #1375

Merged
merged 3 commits into from
Oct 5, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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