package org.greengin.sciencetoolkit.logic.streams;
import java.util.Vector;
import java.util.concurrent.locks.ReentrantLock;
public class DataOutput {
private ReentrantLock lock;
private Vector<DataInput> inputs;
public DataOutput() {
lock = new ReentrantLock();
inputs = new Vector<DataInput>();
}
public void addInput(DataInput input) {
lock.lock();
if (!inputs.contains(input) && input != null) {
inputs.add(input);
onInputAdded(inputs.size() == 1, inputs.size());
}
lock.unlock();
}
public void removeInput(DataInput input) {
lock.lock();
if (inputs.remove(input)) {
onInputRemoved(inputs.size() == 0, inputs.size());
}
lock.unlock();
}
protected void fireInput(float[] values, int valueCount) {
lock.lock();
for (DataInput input : inputs) {
input.value(values, valueCount);
}
lock.unlock();
}
protected boolean hasInputs() {
return this.inputs.size() > 0;
}
protected void onInputAdded(boolean first, int inputCount) {
}
protected void onInputRemoved(boolean empty, int inputCount) {
}
}