/* # 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 LimitedSupplier<T> implements Supplier<Iterable<T>>, WrapperFunction { /** * */ private static final long serialVersionUID = 1L; public static <T> Supplier<Iterable<T>> supplier(final Supplier<T> data, long count) { return new LimitedSupplier<T>(new NonNSupplier<T>(data), count); } public static <T> Supplier<Iterable<T>> supplierN( Function<Long, T> supplier, long count) { return new LimitedSupplier<T>(supplier, count); } private final Function<Long, T> supplier; private final long count; private long c; public LimitedSupplier(Function<Long, T> supplier, long count) { this.supplier = supplier; this.count = count; } @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 c < count; } @Override public T next() { return supplier.apply(c++); } @Override public void remove() { throw new UnsupportedOperationException(); } }; } }; } }