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

159 lines
6.9 KiB
C#

// Copyright (c) Microsoft Open Technologies, Inc. All rights reserved. See License.txt in the project root for license information.
using System.Reactive.Concurrency;
using System.Reactive.Disposables;
using System.Reactive.Subjects;
namespace System.Reactive.Linq
{
using ObservableImpl;
internal partial class QueryLanguage
{
#region + Multicast +
public virtual IConnectableObservable<TResult> Multicast<TSource, TResult>(IObservable<TSource> source, ISubject<TSource, TResult> subject)
{
return new ConnectableObservable<TSource, TResult>(source, subject);
}
public virtual IObservable<TResult> Multicast<TSource, TIntermediate, TResult>(IObservable<TSource> source, Func<ISubject<TSource, TIntermediate>> subjectSelector, Func<IObservable<TIntermediate>, IObservable<TResult>> selector)
{
return new Multicast<TSource, TIntermediate, TResult>(source, subjectSelector, selector);
}
#endregion
#region + Publish +
public virtual IConnectableObservable<TSource> Publish<TSource>(IObservable<TSource> source)
{
return source.Multicast(new Subject<TSource>());
}
public virtual IObservable<TResult> Publish<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector)
{
return source.Multicast(() => new Subject<TSource>(), selector);
}
public virtual IConnectableObservable<TSource> Publish<TSource>(IObservable<TSource> source, TSource initialValue)
{
return source.Multicast(new BehaviorSubject<TSource>(initialValue));
}
public virtual IObservable<TResult> Publish<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector, TSource initialValue)
{
return source.Multicast(() => new BehaviorSubject<TSource>(initialValue), selector);
}
#endregion
#region + PublishLast +
public virtual IConnectableObservable<TSource> PublishLast<TSource>(IObservable<TSource> source)
{
return source.Multicast(new AsyncSubject<TSource>());
}
public virtual IObservable<TResult> PublishLast<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector)
{
return source.Multicast(() => new AsyncSubject<TSource>(), selector);
}
#endregion
#region + RefCount +
public virtual IObservable<TSource> RefCount<TSource>(IConnectableObservable<TSource> source)
{
return new RefCount<TSource>(source);
}
#endregion
#region + Replay +
public virtual IConnectableObservable<TSource> Replay<TSource>(IObservable<TSource> source)
{
return source.Multicast(new ReplaySubject<TSource>());
}
public virtual IConnectableObservable<TSource> Replay<TSource>(IObservable<TSource> source, IScheduler scheduler)
{
return source.Multicast(new ReplaySubject<TSource>(scheduler));
}
public virtual IObservable<TResult> Replay<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector)
{
return source.Multicast(() => new ReplaySubject<TSource>(), selector);
}
public virtual IObservable<TResult> Replay<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector, IScheduler scheduler)
{
return source.Multicast(() => new ReplaySubject<TSource>(scheduler), selector);
}
public virtual IConnectableObservable<TSource> Replay<TSource>(IObservable<TSource> source, TimeSpan window)
{
return source.Multicast(new ReplaySubject<TSource>(window));
}
public virtual IObservable<TResult> Replay<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector, TimeSpan window)
{
return source.Multicast(() => new ReplaySubject<TSource>(window), selector);
}
public virtual IConnectableObservable<TSource> Replay<TSource>(IObservable<TSource> source, TimeSpan window, IScheduler scheduler)
{
return source.Multicast(new ReplaySubject<TSource>(window, scheduler));
}
public virtual IObservable<TResult> Replay<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector, TimeSpan window, IScheduler scheduler)
{
return source.Multicast(() => new ReplaySubject<TSource>(window, scheduler), selector);
}
public virtual IConnectableObservable<TSource> Replay<TSource>(IObservable<TSource> source, int bufferSize, IScheduler scheduler)
{
return source.Multicast(new ReplaySubject<TSource>(bufferSize, scheduler));
}
public virtual IObservable<TResult> Replay<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector, int bufferSize, IScheduler scheduler)
{
return source.Multicast(() => new ReplaySubject<TSource>(bufferSize, scheduler), selector);
}
public virtual IConnectableObservable<TSource> Replay<TSource>(IObservable<TSource> source, int bufferSize)
{
return source.Multicast(new ReplaySubject<TSource>(bufferSize));
}
public virtual IObservable<TResult> Replay<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector, int bufferSize)
{
return source.Multicast(() => new ReplaySubject<TSource>(bufferSize), selector);
}
public virtual IConnectableObservable<TSource> Replay<TSource>(IObservable<TSource> source, int bufferSize, TimeSpan window)
{
return source.Multicast(new ReplaySubject<TSource>(bufferSize, window));
}
public virtual IObservable<TResult> Replay<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector, int bufferSize, TimeSpan window)
{
return source.Multicast(() => new ReplaySubject<TSource>(bufferSize, window), selector);
}
public virtual IConnectableObservable<TSource> Replay<TSource>(IObservable<TSource> source, int bufferSize, TimeSpan window, IScheduler scheduler)
{
return source.Multicast(new ReplaySubject<TSource>(bufferSize, window, scheduler));
}
public virtual IObservable<TResult> Replay<TSource, TResult>(IObservable<TSource> source, Func<IObservable<TSource>, IObservable<TResult>> selector, int bufferSize, TimeSpan window, IScheduler scheduler)
{
return source.Multicast(() => new ReplaySubject<TSource>(bufferSize, window, scheduler), selector);
}
#endregion
}
}