示例#1
0
        public void Subscribe(ISingleObserver <R> observer)
        {
            var n    = 0;
            var srcs = sources;

            var a = new ISingleSource <T> [8];

            try
            {
                foreach (var m in srcs)
                {
                    if (n == a.Length)
                    {
                        var b = new ISingleSource <T> [n + (n >> 2)];
                        Array.Copy(a, 0, b, 0, n);
                        a = b;
                    }
                    a[n++] = m;
                }
            }
            catch (Exception ex)
            {
                DisposableHelper.Error(observer, ex);
                return;
            }

            SingleZipCoordinator <T, R> .Run(a, n, observer, mapper, delayErrors);
        }
示例#2
0
        public void Subscribe(ISingleObserver <R> observer)
        {
            var srcs = sources;
            var n    = srcs.Length;

            SingleZipCoordinator <T, R> .Run(srcs, n, observer, mapper, delayErrors);
        }
示例#3
0
        internal static void Run(ISingleSource <T>[] srcs, int n, ISingleObserver <R> observer, Func <T[], R> mapper, bool delayErrors)
        {
            if (n == 0)
            {
                DisposableHelper.Complete(observer);
                return;
            }

            if (n == 1)
            {
                new SingleMap <T, R>(srcs[0],
                                     v => mapper(new T[] { v })
                                     ).Subscribe(observer);
                return;
            }

            var parent = new SingleZipCoordinator <T, R>(observer, n, mapper, delayErrors);

            observer.OnSubscribe(parent);

            parent.Subscribe(srcs, n);
        }
示例#4
0
 public InnerObserver(SingleZipCoordinator <T, R> parent, int index)
 {
     this.parent = parent;
     this.index  = index;
 }