Search in sources :

Example 1 with MergeInnerCompletableObserver

use of io.reactivex.internal.operators.completable.CompletableMergeDelayErrorArray.MergeInnerCompletableObserver in project RxJava by ReactiveX.

the class CompletableMergeDelayErrorIterable method subscribeActual.

@Override
public void subscribeActual(final CompletableObserver s) {
    final CompositeDisposable set = new CompositeDisposable();
    s.onSubscribe(set);
    Iterator<? extends CompletableSource> iterator;
    try {
        iterator = ObjectHelper.requireNonNull(sources.iterator(), "The source iterator returned is null");
    } catch (Throwable e) {
        Exceptions.throwIfFatal(e);
        s.onError(e);
        return;
    }
    final AtomicInteger wip = new AtomicInteger(1);
    final AtomicThrowable error = new AtomicThrowable();
    for (; ; ) {
        if (set.isDisposed()) {
            return;
        }
        boolean b;
        try {
            b = iterator.hasNext();
        } catch (Throwable e) {
            Exceptions.throwIfFatal(e);
            error.addThrowable(e);
            break;
        }
        if (!b) {
            break;
        }
        if (set.isDisposed()) {
            return;
        }
        CompletableSource c;
        try {
            c = ObjectHelper.requireNonNull(iterator.next(), "The iterator returned a null CompletableSource");
        } catch (Throwable e) {
            Exceptions.throwIfFatal(e);
            error.addThrowable(e);
            break;
        }
        if (set.isDisposed()) {
            return;
        }
        wip.getAndIncrement();
        c.subscribe(new MergeInnerCompletableObserver(s, set, error, wip));
    }
    if (wip.decrementAndGet() == 0) {
        Throwable ex = error.terminate();
        if (ex == null) {
            s.onComplete();
        } else {
            s.onError(ex);
        }
    }
}
Also used : AtomicThrowable(io.reactivex.internal.util.AtomicThrowable) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) AtomicThrowable(io.reactivex.internal.util.AtomicThrowable) CompositeDisposable(io.reactivex.disposables.CompositeDisposable) MergeInnerCompletableObserver(io.reactivex.internal.operators.completable.CompletableMergeDelayErrorArray.MergeInnerCompletableObserver)

Aggregations

CompositeDisposable (io.reactivex.disposables.CompositeDisposable)1 MergeInnerCompletableObserver (io.reactivex.internal.operators.completable.CompletableMergeDelayErrorArray.MergeInnerCompletableObserver)1 AtomicThrowable (io.reactivex.internal.util.AtomicThrowable)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1