Ejemplo n.º 1
0
            public void Run(IEnumerable <IObservable <TSource> > sources)
            {
                var srcs = sources.ToArray();

                var N = srcs.Length;

                _queues = new Queue <TSource> [N];
                for (var i = 0; i < N; i++)
                {
                    _queues[i] = new Queue <TSource>();
                }

                _isDone = new bool[N];

                var subscriptions = new IDisposable[N];

                if (Interlocked.CompareExchange(ref _subscriptions, subscriptions, null) == null)
                {
                    for (var i = 0; i < N; i++)
                    {
                        var o = new SourceObserver(this, i);
                        Disposable.SetSingle(ref subscriptions[i], srcs[i].SubscribeSafe(o));
                    }
                }
            }
Ejemplo n.º 2
0
            public void Run(IEnumerable <IObservable <TSource> > sources)
            {
                var srcs = sources.ToArray();

                var N = srcs.Length;

                _hasValue    = new bool[N];
                _hasValueAll = false;

                _values = new TSource[N];

                _isDone = new bool[N];

                _subscriptions = new IDisposable[N];

                for (var i = 0; i < N; i++)
                {
                    var j = i;

                    var o = new SourceObserver(this, j);
                    _subscriptions[j] = o;

                    o.SetResource(srcs[j].SubscribeSafe(o));
                }

                SetUpstream(StableCompositeDisposable.CreateTrusted(_subscriptions));
            }
Ejemplo n.º 3
0
            public IDisposable Run(SkipUntil <TSource, TOther> parent)
            {
                var sourceObserver = new SourceObserver(this);
                var otherObserver  = new OtherObserver(this, sourceObserver);

                var otherSubscription  = parent._other.SubscribeSafe(otherObserver);
                var sourceSubscription = parent._source.SubscribeSafe(sourceObserver);

                sourceObserver.Disposable = sourceSubscription;
                otherObserver.Disposable  = otherSubscription;

                return(StableCompositeDisposable.Create(
                           sourceSubscription,
                           otherSubscription
                           ));
            }
Ejemplo n.º 4
0
            public IDisposable Run(TakeUntil <TSource, TOther> parent)
            {
                var sourceObserver = new SourceObserver(this);
                var otherObserver  = new OtherObserver(this, sourceObserver);

                // COMPAT - Order of Subscribe calls per v1.0.10621
                var otherSubscription = parent._other.SubscribeSafe(otherObserver);

                otherObserver.Disposable = otherSubscription;

                var sourceSubscription = parent._source.SubscribeSafe(sourceObserver);

                return(StableCompositeDisposable.Create(
                           otherSubscription,
                           sourceSubscription
                           ));
            }
Ejemplo n.º 5
0
            public IDisposable Run()
            {
                var srcs = _parent._sources.ToArray();

                var N = srcs.Length;

                _queues = new Queue <TSource> [N];
                for (int i = 0; i < N; i++)
                {
                    _queues[i] = new Queue <TSource>();
                }

                _isDone = new bool[N];

                _subscriptions = new SingleAssignmentDisposable[N];

                _gate = new object();

                for (int i = 0; i < N; i++)
                {
                    var j = i;

                    var d = new SingleAssignmentDisposable();
                    _subscriptions[j] = d;

                    var o = new SourceObserver(this, j);
                    d.Disposable = srcs[j].SubscribeSafe(o);
                }

                return(new CompositeDisposable(_subscriptions)
                {
                    Disposable.Create(() => { foreach (var q in _queues)
                                              {
                                                  q.Clear();
                                              }
                                      })
                });
            }
Ejemplo n.º 6
0
 public OtherObserver(_ parent, SourceObserver sourceObserver)
 {
     _parent         = parent;
     _sourceObserver = sourceObserver;
     _subscription   = new SingleAssignmentDisposable();
 }