private <R> long aggregateAndForward(Function<Collection<T>,R> f, AbstractPushStreamImpl<R> eventStream, PushEvent< ? extends T> event, Queue<T> queue) throws Exception { if (!queue.offer(event.getData())) { ((ArrayQueue<T>) queue).forcePush(event.getData()); } return eventStream.handleEvent(PushEvent.data(f.apply(queue))); }
private <R> long aggregateAndForward(Function<Collection<T>,R> f, AbstractPushStreamImpl<R> eventStream, PushEvent< ? extends T> event, Queue<T> queue) throws Exception { if (!queue.offer(event.getData())) { ((ArrayQueue<T>) queue).forcePush(event.getData()); } return eventStream.handleEvent(PushEvent.data(f.apply(queue))); }
private <R> long aggregateAndForward(Function<Collection<T>,R> f, AbstractPushStreamImpl<R> eventStream, PushEvent< ? extends T> event, Queue<T> queue) throws Exception { if (!queue.offer(event.getData())) { ((ArrayQueue<T>) queue).forcePush(event.getData()); } return eventStream.handleEvent(PushEvent.data(f.apply(queue))); }
private <R> void aggregateAndForward(BiFunction<Long,Collection<T>,R> f, AbstractPushStreamImpl<R> eventStream, PushEvent< ? extends T> event, Queue<T> queue, Executor executor, long elapsed) { executor.execute(() -> { try { if (!queue.offer(event.getData())) { ((ArrayQueue<T>) queue).forcePush(event.getData()); } long result = eventStream.handleEvent(PushEvent.data( f.apply(Long.valueOf(NANOSECONDS.toMillis(elapsed)), queue))); if (result < 0) { close(); } } catch (Exception e) { close(PushEvent.error(e)); } }); }
private <R> void aggregateAndForward(BiFunction<Long,Collection<T>,R> f, AbstractPushStreamImpl<R> eventStream, PushEvent< ? extends T> event, Queue<T> queue, Executor executor, long elapsed) { executor.execute(() -> { try { if (!queue.offer(event.getData())) { ((ArrayQueue<T>) queue).forcePush(event.getData()); } long result = eventStream.handleEvent(PushEvent.data( f.apply(Long.valueOf(NANOSECONDS.toMillis(elapsed)), queue))); if (result < 0) { close(); } } catch (Exception e) { close(PushEvent.error(e)); } }); }
private <R> void aggregateAndForward(BiFunction<Long,Collection<T>,R> f, AbstractPushStreamImpl<R> eventStream, PushEvent< ? extends T> event, Queue<T> queue, Executor executor, long elapsed) { executor.execute(() -> { try { if (!queue.offer(event.getData())) { ((ArrayQueue<T>) queue).forcePush(event.getData()); } long result = eventStream.handleEvent(PushEvent.data( f.apply(Long.valueOf(NANOSECONDS.toMillis(elapsed)), queue))); if (result < 0) { close(); } } catch (Exception e) { close(PushEvent.error(e)); } }); }
@Override public Promise<Optional<T>> reduce(BinaryOperator<T> accumulator) { Deferred<Optional<T>> d = promiseFactory.deferred(); AtomicReference<T> iden = new AtomicReference<T>(null); updateNext(event -> { try { switch(event.getType()) { case DATA: if (!iden.compareAndSet(null, event.getData())) iden.accumulateAndGet(event.getData(), accumulator); return CONTINUE; case CLOSE: d.resolve(Optional.ofNullable(iden.get())); break; case ERROR: d.fail(event.getFailure()); break; } close(event.nodata()); return ABORT; } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); begin(); return d.getPromise(); }
switch(event.getType()) { case DATA : list.add(event.getData()); return CONTINUE; case CLOSE :
@Override public PushStream<T> adjustBackPressure( ToLongBiFunction<T,Long> adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(event.getData(), Long.valueOf(bp)); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure( ToLongBiFunction<T,Long> adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(event.getData(), Long.valueOf(bp)); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> adjustBackPressure( ToLongBiFunction<T,Long> adjustment) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { long bp = eventStream.handleEvent(event); if (event.isTerminal()) { return ABORT; } else { return bp < 0 ? bp : adjustment.applyAsLong(event.getData(), Long.valueOf(bp)); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <U> Promise<U> reduce(U identity, BiFunction<U, ? super T, U> accumulator, BinaryOperator<U> combiner) { Deferred<U> d = promiseFactory.deferred(); AtomicReference<U> iden = new AtomicReference<>(identity); updateNext(event -> { try { switch(event.getType()) { case DATA: iden.updateAndGet((e) -> accumulator.apply(e, event.getData())); return CONTINUE; case CLOSE: d.resolve(iden.get()); break; case ERROR: d.fail(event.getFailure()); break; } close(event.nodata()); return ABORT; } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); begin(); return d.getPromise(); }
@Override public Promise<T> reduce(T identity, BinaryOperator<T> accumulator) { Deferred<T> d = promiseFactory.deferred(); AtomicReference<T> iden = new AtomicReference<T>(identity); updateNext(event -> { try { switch(event.getType()) { case DATA: iden.accumulateAndGet(event.getData(), accumulator); return CONTINUE; case CLOSE: d.resolve(iden.get()); break; case ERROR: d.fail(event.getFailure()); break; } close(event.nodata()); return ABORT; } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); begin(); return d.getPromise(); }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public PushStream<T> filter(Predicate< ? super T> predicate) { AbstractPushStreamImpl<T> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext((event) -> { try { if (!event.isTerminal()) { if (predicate.test(event.getData())) { return eventStream.handleEvent(event); } else { return CONTINUE; } } return eventStream.handleEvent(event); } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public Promise<Void> forEach(Consumer< ? super T> action) { Deferred<Void> d = promiseFactory.deferred(); updateNext((event) -> { try { switch(event.getType()) { case DATA: action.accept(event.getData()); return CONTINUE; case CLOSE: d.resolve(null); break; case ERROR: d.fail(event.getFailure()); break; } close(event.nodata()); return ABORT; } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); begin(); return d.getPromise(); }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }
@Override public <R> PushStream<R> map(Function< ? super T, ? extends R> mapper) { AbstractPushStreamImpl<R> eventStream = new IntermediatePushStreamImpl<>( psp, promiseFactory, this); updateNext(event -> { try { if (!event.isTerminal()) { return eventStream.handleEvent( PushEvent.data(mapper.apply(event.getData()))); } else { return eventStream.handleEvent(event.nodata()); } } catch (Exception e) { close(PushEvent.error(e)); return ABORT; } }); return eventStream; }