summaryrefslogtreecommitdiffstats
path: root/src/libs/engine/events/SetPortValueEvent.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-07-28 22:14:12 +0000
committerDavid Robillard <d@drobilla.net>2008-07-28 22:14:12 +0000
commit2fd41e8d03877f454bff4943901d5c1638aac9bb (patch)
tree12699bceae6b9bf2bf33059c133ec2b86ab738b7 /src/libs/engine/events/SetPortValueEvent.cpp
parenta6fb6a0289ea47692d87f3e0200532a426f8e60d (diff)
downloadingen-2fd41e8d03877f454bff4943901d5c1638aac9bb.tar.gz
ingen-2fd41e8d03877f454bff4943901d5c1638aac9bb.tar.bz2
ingen-2fd41e8d03877f454bff4943901d5c1638aac9bb.zip
Remove near duplicate SetPortValueEvent and SetPortValueQueuedEvent classes.
git-svn-id: http://svn.drobilla.net/lad/ingen@1294 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/libs/engine/events/SetPortValueEvent.cpp')
-rw-r--r--src/libs/engine/events/SetPortValueEvent.cpp31
1 files changed, 28 insertions, 3 deletions
diff --git a/src/libs/engine/events/SetPortValueEvent.cpp b/src/libs/engine/events/SetPortValueEvent.cpp
index cf9e60c3..29f3f6c7 100644
--- a/src/libs/engine/events/SetPortValueEvent.cpp
+++ b/src/libs/engine/events/SetPortValueEvent.cpp
@@ -36,12 +36,14 @@ namespace Ingen {
/** Omni (all voices) control setting */
SetPortValueEvent::SetPortValueEvent(Engine& engine,
SharedPtr<Responder> responder,
+ bool queued,
SampleCount timestamp,
const string& port_path,
const string& data_type,
uint32_t data_size,
const void* data)
- : Event(engine, responder, timestamp)
+ : QueuedEvent(engine, responder, timestamp)
+ , _queued(queued)
, _omni(true)
, _voice_num(0)
, _port_path(port_path)
@@ -51,6 +53,9 @@ SetPortValueEvent::SetPortValueEvent(Engine& engine,
, _port(NULL)
, _error(NO_ERROR)
{
+ if (_queued)
+ pre_process();
+
memcpy(_data, data, data_size);
}
@@ -58,13 +63,15 @@ SetPortValueEvent::SetPortValueEvent(Engine& engine,
/** Voice-specific control setting */
SetPortValueEvent::SetPortValueEvent(Engine& engine,
SharedPtr<Responder> responder,
+ bool queued,
SampleCount timestamp,
uint32_t voice_num,
const string& port_path,
const string& data_type,
uint32_t data_size,
const void* data)
- : Event(engine, responder, timestamp)
+ : QueuedEvent(engine, responder, timestamp)
+ , _queued(queued)
, _omni(false)
, _voice_num(voice_num)
, _data_type(data_type)
@@ -73,6 +80,9 @@ SetPortValueEvent::SetPortValueEvent(Engine& engine,
, _port(NULL)
, _error(NO_ERROR)
{
+ if (_queued)
+ pre_process();
+
memcpy(_data, data, data_size);
}
@@ -82,6 +92,21 @@ SetPortValueEvent::~SetPortValueEvent()
free(_data);
}
+
+void
+SetPortValueEvent::pre_process()
+{
+ if (_queued) {
+ if (_port == NULL)
+ _port = _engine.object_store()->find_port(_port_path);
+
+ if (_port == NULL)
+ _error = PORT_NOT_FOUND;
+ }
+
+ QueuedEvent::pre_process();
+}
+
void
SetPortValueEvent::execute(ProcessContext& context)
@@ -94,7 +119,7 @@ SetPortValueEvent::execute(ProcessContext& context)
if (_port == NULL) {
_error = PORT_NOT_FOUND;
-/* } else if (_port->buffer(0)->size() < _data_size) {
+ /*} else if (_port->buffer(0)->capacity() < _data_size) {
_error = NO_SPACE;*/
} else {
Buffer* const buf = _port->buffer(0);