diff options
author | David Robillard <d@drobilla.net> | 2007-04-08 06:04:32 +0000 |
---|---|---|
committer | David Robillard <d@drobilla.net> | 2007-04-08 06:04:32 +0000 |
commit | e96c36c1a7abb062e36efc0ac95c35fedcef922e (patch) | |
tree | 826d5caa0392201472d12c02a1c3df4cf7b275be /src/libs/engine/Port.h | |
parent | 7d69e89f22304e37fa325ce4f39a374a02072a69 (diff) | |
download | ingen-e96c36c1a7abb062e36efc0ac95c35fedcef922e.tar.gz ingen-e96c36c1a7abb062e36efc0ac95c35fedcef922e.tar.bz2 ingen-e96c36c1a7abb062e36efc0ac95c35fedcef922e.zip |
De-template-ification of port types (req. for LV2 MIDI, but nice code size reduction).
LV2 MIDI patching support (LV2 style MIDI throughout, inc. internal plugins).
git-svn-id: http://svn.drobilla.net/lad/ingen@415 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/Port.h')
-rw-r--r-- | src/libs/engine/Port.h | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/src/libs/engine/Port.h b/src/libs/engine/Port.h index 3473e054..b42231fe 100644 --- a/src/libs/engine/Port.h +++ b/src/libs/engine/Port.h @@ -20,6 +20,7 @@ #include <cstdlib> #include <string> +#include <raul/Array.h> #include "types.h" #include "GraphObject.h" #include "DataType.h" @@ -29,6 +30,7 @@ using std::string; namespace Ingen { class Node; +class Buffer; /** A port on a Node. @@ -42,36 +44,45 @@ class Node; class Port : public GraphObject { public: - virtual ~Port() {} + virtual ~Port(); /** A port's parent is always a node, so static cast should be safe */ Node* parent_node() const { return (Node*)_parent; } + Buffer* buffer(size_t voice) const { return _buffers.at(voice); } + /** Called once per process cycle */ - virtual void process(SampleCount nframes, FrameTime start, FrameTime end) = 0; + virtual void process(SampleCount nframes, FrameTime start, FrameTime end); /** Empty buffer contents completely (ie silence) */ - virtual void clear_buffers() = 0; + virtual void clear_buffers(); virtual bool is_input() const = 0; virtual bool is_output() const = 0; - bool is_sample() const { return false; } size_t num() const { return _index; } size_t poly() const { return _poly; } DataType type() const { return _type; } size_t buffer_size() const { return _buffer_size; } - virtual void set_buffer_size(size_t size) = 0; - virtual void connect_buffers() = 0; + virtual void set_buffer_size(size_t size); + + void fixed_buffers(bool b) { _fixed_buffers = b; } + bool fixed_buffers() { return _fixed_buffers; } protected: Port(Node* const node, const string& name, size_t index, size_t poly, DataType type, size_t buffer_size); + virtual void allocate_buffers(); + virtual void connect_buffers(); + size_t _index; size_t _poly; DataType _type; size_t _buffer_size; + bool _fixed_buffers; + + Raul::Array<Buffer*> _buffers; }; |