public void Subscribe(IMaybeObserver <R> observer) { var srcs = sources; var n = srcs.Length; MaybeZipCoordinator <T, R> .Run(srcs, n, observer, mapper, delayErrors); }
public void Subscribe(IMaybeObserver <R> observer) { var n = 0; var srcs = sources; var a = new IMaybeSource <T> [8]; try { foreach (var m in srcs) { if (n == a.Length) { var b = new IMaybeSource <T> [n + (n >> 2)]; Array.Copy(a, 0, b, 0, n); a = b; } a[n++] = m; } } catch (Exception ex) { DisposableHelper.Error(observer, ex); return; } MaybeZipCoordinator <T, R> .Run(a, n, observer, mapper, delayErrors); }
internal static void Run(IMaybeSource <T>[] srcs, int n, IMaybeObserver <R> observer, Func <T[], R> mapper, bool delayErrors) { if (n == 0) { DisposableHelper.Complete(observer); return; } if (n == 1) { new MaybeMap <T, R>(srcs[0], v => mapper(new T[] { v }) ).Subscribe(observer); return; } var parent = new MaybeZipCoordinator <T, R>(observer, n, mapper, delayErrors); observer.OnSubscribe(parent); parent.Subscribe(srcs, n); }
public InnerObserver(MaybeZipCoordinator <T, R> parent, int index) { this.parent = parent; this.index = index; }