/* # Licensed Materials - Property of IBM # Copyright IBM Corp. 2015 */ package com.ibm.streamsx.topology.internal.logic; import java.util.Iterator; import com.ibm.streamsx.topology.function.Function; import com.ibm.streamsx.topology.function.Supplier; public class EndlessSupplier<T> implements Supplier<Iterable<T>>, WrapperFunction { /** * */ private static final long serialVersionUID = 1L; public static <T> Supplier<Iterable<T>> supplier(final Supplier<T> data) { return new EndlessSupplier<T>(new NonNSupplier<T>(data)); } public static <T> Supplier<Iterable<T>> supplierN( final Function<Long, T> data) { return new EndlessSupplier<T>(data); } private final Function<Long, T> supplier; private long seq; public EndlessSupplier(Function<Long, T> supplier) { this.supplier = supplier; } @Override public Object getWrappedFunction() { return supplier; } @Override public final Iterable<T> get() { return new Iterable<T>() { @Override public Iterator<T> iterator() { return new Iterator<T>() { @Override public boolean hasNext() { return true; } @Override public T next() { return supplier.apply(seq++); } @Override public void remove() { throw new UnsupportedOperationException(); } }; } }; } }