#pragma once #include namespace dsp { template class Link : public generic_block> { public: Link() {} Link(stream* a, stream* b) { init(a, b); } void init(stream* in, stream* out) { _in = in; _out = out; generic_block>::registerInput(_in); generic_block>::registerOutput(_out); generic_block>::_block_init = true; } void setInput(stream* in) { assert(generic_block>::_block_init); std::lock_guard lck(generic_block>::ctrlMtx); generic_block>::tempStop(); generic_block>::unregisterInput(_in); _in = in; generic_block>::registerInput(_in); generic_block>::tempStart(); } void setOutput(stream* out) { assert(generic_block>::_block_init); std::lock_guard lck(generic_block>::ctrlMtx); generic_block>::tempStop(); generic_block>::unregisterOutput(_out); _out = out; generic_block>::registerOutput(_out); generic_block>::tempStart(); } int run() { int count = _in->read(); if (count < 0) { return -1; } memcpy(_out->writeBuf, _in->readBuf, count * sizeof(T)); _in->flush(); return _out->swap(count) ? count : -1; } private: stream* _in; stream* _out; }; }