package uk.ac.imperial.lsds.seep.api.data;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
public class RowBatchITuple implements DataItem {
private final List<byte[]> batch;
private final Iterator<byte[]> it;
private final ITuple iTuple;
private final int streamId;
private RowBatchITuple(RowBatchITupleBuilder builder){
batch = new ArrayList<>(builder.batch);
it = batch.iterator();
this.iTuple = builder.iTuple;
this.streamId = builder.streamId;
}
@Override
public ITuple consume() {
if(it.hasNext()) {
byte[] raw = it.next();
iTuple.setData(raw);
iTuple.setStreamId(streamId);
return iTuple;
}
return null;
}
public static class RowBatchITupleBuilder{
private ITuple iTuple;
private int streamId;
private final int BATCH_SIZE;
private List<byte[]> batch;
public RowBatchITupleBuilder(int batchSize, ITuple iTuple, int streamId){
this.iTuple = iTuple;
this.streamId = streamId;
this.BATCH_SIZE = batchSize;
this.batch = new ArrayList<>(batchSize);
}
public boolean add(byte[] data) {
this.batch.add(data);
return (batch.size() == BATCH_SIZE);
}
public RowBatchITuple build(){
return new RowBatchITuple(this);
}
public void reset(){
this.batch.clear();
}
}
}