diff options
-rw-r--r-- | src/libs/engine/DuplexPort.cpp | 46 | ||||
-rw-r--r-- | src/libs/engine/DuplexPort.h | 68 |
2 files changed, 114 insertions, 0 deletions
diff --git a/src/libs/engine/DuplexPort.cpp b/src/libs/engine/DuplexPort.cpp new file mode 100644 index 00000000..27be5056 --- /dev/null +++ b/src/libs/engine/DuplexPort.cpp @@ -0,0 +1,46 @@ +/* This file is part of Om. Copyright (C) 2006 Dave Robillard. + * + * Om is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * Om is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "DuplexPort.h" +#include <iostream> +#include <cstdlib> +#include <cassert> +#include "TypedConnection.h" +#include "OutputPort.h" +#include "Node.h" +#include "Om.h" +#include "util.h" + +using std::cerr; using std::cout; using std::endl; + + +namespace Om { + + +template <typename T> +DuplexPort<T>::DuplexPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size, bool is_output) +: TypedPort<T>(parent, name, index, poly, type, buffer_size) +, InputPort<T>(parent, name, index, poly, type, buffer_size) +, OutputPort<T>(parent, name, index, poly, type, buffer_size) +, _is_output(is_output) +{ +} +template DuplexPort<sample>::DuplexPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size, bool is_output); +template DuplexPort<MidiMessage>::DuplexPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size, bool is_output); + + +} // namespace Om + diff --git a/src/libs/engine/DuplexPort.h b/src/libs/engine/DuplexPort.h new file mode 100644 index 00000000..1abf6a4d --- /dev/null +++ b/src/libs/engine/DuplexPort.h @@ -0,0 +1,68 @@ +/* This file is part of Om. Copyright (C) 2006 Dave Robillard. + * + * Om is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * Om is distributed in the hope that it will be useful, but WITHOUT ANY + * WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS + * FOR A PARTICULAR PURPOSE. See the GNU General Public License for details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef DUPLEXPORT_H +#define DUPLEXPORT_H + +#include <string> +#include "types.h" +#include "Array.h" +#include "Buffer.h" +#include "InputPort.h" +#include "OutputPort.h" +using std::string; + +namespace Om { + +class MidiMessage; +class Node; + + +/** A duplex port (which is both an InputPort and an OutputPort) + * + * This is used for Patch ports, since they need to appear as both an input + * and an output port based on context. Eg. a patch output appears as an + * input inside the patch, so nodes inside the patch can feed it data. + * + * \ingroup engine + */ +template <typename T> +class DuplexPort : public InputPort<T>, public OutputPort<T> +{ +public: + DuplexPort(Node* parent, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size, bool is_output); + virtual ~DuplexPort() {} + + virtual void prepare_buffers(size_t nframes) {} + + virtual bool is_input() const { return !_is_output; } + virtual bool is_output() const { return _is_output; } + +protected: + // Prevent copies (undefined) + DuplexPort(const DuplexPort<T>& copy); + DuplexPort& operator=(const Port&); + + bool _is_output; +}; + + +template class DuplexPort<sample>; +template class DuplexPort<MidiMessage>; + +} // namespace Om + +#endif // DUPLEXPORT_H |