package org.signalml.plugin.newstager.io;
import org.signalml.domain.signal.samplesource.MultichannelSampleSource;
import org.signalml.plugin.io.IPluginDataSourceReader;
public class NewStagerSignalReader implements IPluginDataSourceReader {
private final MultichannelSampleSource source;
private final int channelCount;
private final int samplesCount;
private int signalOffset;
private final int blockLengthInSapmles;
public NewStagerSignalReader(MultichannelSampleSource sampleSource, int blockLengthInSamples) {
this.source = sampleSource;
this.channelCount = this.source.getChannelCount();
this.samplesCount = this.computeSamplesCount();
this.signalOffset = 0;
this.blockLengthInSapmles = blockLengthInSamples;
}
@Override
public boolean hasMoreSamples() throws InterruptedException {
synchronized (this) {
return this.signalOffset + this.blockLengthInSapmles <= this.samplesCount;
}
}
@Override
public void getSample(double[][] buffer) throws InterruptedException {
assert(buffer.length == this.channelCount);
for (int i = 0; i < buffer.length; ++i) {
this.source.getSamples(i, buffer[i], this.signalOffset, buffer[i].length, 0);
}
synchronized (this) {
this.signalOffset += buffer[0].length;
}
}
private int computeSamplesCount() {
int result = -1;
for (int i = 0; i < this.channelCount; ++i) {
result = Math.max(this.source.getSampleCount(i), result);
}
return result;
}
}