@Override public void cancel() { super.cancel(); } };
public CapturingOperator(Runnable onInit){ this.onInit = onInit; this.subscription = new StreamSubscription(); this.s=new Subscription() { @Override public void request(long n) { } @Override public void cancel() { } }; } public CapturingOperator(){
@Override public StreamSubscription subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Runnable onComplete) { Object UNSET = new Object(); Object[] last = {UNSET}; StreamSubscription upstream[] = {null}; StreamSubscription result = new StreamSubscription(){ @Override public void request(long n) { super.request(n); upstream[0].request(n ); } @Override public void cancel() { upstream[0].cancel(); super.cancel(); } }; upstream[0] = source.subscribe(e-> { last[0] = e; upstream[0].request(1l); } ,onError,()->{ if (result.isActive() && last[0] != UNSET) { onNext.accept((T) last[0]); } onComplete.run(); }); return result; }
@Override public void request(long n) { requestInternal(n); }
@Override public void onSubscribe(Subscription s) { sArray[0] = s; if (sub.isActive()) { s.request(1l); }else if(!sub.isOpen){ s.cancel(); } }
@Override public void request(long n) { if(n<=0) { onError.accept(new IllegalArgumentException("3.9 While the Subscription is not cancelled, Subscription.request(long n) MUST throw a java.lang.IllegalArgumentException if the argument is <= 0.")); return; } super.singleActiveRequest(n,work); }
public boolean singleActiveRequest(long n, LongConsumer work){ if(this.requestInternal(n)) { work.accept(n); return true; } return false; }
private void processQueue(StreamSubscription ss,Consumer<? super T> onNext) { if(active.compareAndSet(false,true)) { while(ss.isActive()) { T next = q.poll(); if (next != null) { onNext.accept(next); ss.requested.decrementAndGet(); } else break; } active.set(false); if (!q.isEmpty() && ss.isActive()) { processQueue(ss,onNext); } } } private void processQueue(Consumer<? super T> onNext) {
@Override public void request(long n) { if(n<=0) { onError.accept(new IllegalArgumentException("3.9 While the Subscription is not cancelled, Subscription.request(long n) MUST throw a java.lang.IllegalArgumentException if the argument is <= 0.")); return; } super.singleActiveRequest(n,work); }
@Override public void request(long n) { requestInternal(n); }
@Override public void onSubscribe(Subscription s) { sArray[0] = s; if (sub.isActive()) { s.request(1l); }else if(!sub.isOpen){ s.cancel(); } }
public CapturingOperator(){ this.onInit = ()->{}; this.subscription = new StreamSubscription(); this.s=new Subscription() { @Override public void request(long n) { if(complete) onComplete.run(); } @Override public void cancel() { } }; }