public class FilterImpl implements Filter {

    Compute app;
    RemoteFilterBuffer inBuf;
    RemoteFilterBuffer[] outBufs;

    public FilterImpl(Compute compute, RemoteFilterBuffer in, RemoteFilterBuffer out) {
        app = compute;
        inBuf = in;
        outBufs = new RemoteFilterBuffer[1];
        outBufs[0] = out;
    }

    public RemoteFilterBuffer getInputBuffer() {
        return inBuf;
    }

    public RemoteFilterBuffer[] getOutputBuffers() {
        return outBufs;
    }

    public void addOutputBuffer(RemoteFilterBuffer newBuf) {
        RemoteFilterBuffer[] newOutBufs = new RemoteFilterBuffer[outBufs.length + 1];
        for (int i = 0; i < outBufs.length; i++)
            newOutBufs[i] = outBufs[i];
        newOutBufs[outBufs.length] = newBuf;
        outBufs = newOutBufs;
    }

    public void startFilter() {
        Thread appThread = new Thread(app);
        appThread.start();
    }

}
