Implementing your DSP units is quite simple. Indeed, you just have to concentrate on the actual sound data processing work. All the chaining logic is embedded in the DspUnit class. Every unit inherits from DspUnit.
The run() method of DspUnit invokes a virtual protected method named performDsp(). This method is of type void and takes no parameter. This is where you have to perform your job.
The data that you can get from the input slots is available from the m_inputSlots attribute. It is a vector of pointers to SlotData instances. A SlotData is actually an instance of a deque<double> template. You should refer top the API for more informations.
On the same way, the output slots are available through the m_outputSlots attribute, which is in fact the input slot of the next DSP unit it is connected to. Everytime the performDsp() method is invoked, you have 'fresh' data in the input slots. A DSP unit is expected to manually clear the output slots data before putting the processed data in.