summaryrefslogtreecommitdiffstats
path: root/src/engine/PortImpl.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2009-06-03 02:30:57 +0000
committerDavid Robillard <d@drobilla.net>2009-06-03 02:30:57 +0000
commit6488ffb1a3fedb87b41add3a2a78a953755c949a (patch)
treeac2c564c1f93b207940419aea265022d48c71240 /src/engine/PortImpl.cpp
parent69ad5f645fbc1ac5c4f886a7f2daa6c354b4afe3 (diff)
downloadingen-6488ffb1a3fedb87b41add3a2a78a953755c949a.tar.gz
ingen-6488ffb1a3fedb87b41add3a2a78a953755c949a.tar.bz2
ingen-6488ffb1a3fedb87b41add3a2a78a953755c949a.zip
Clean up and shave some overhead from port value broadcasting.
Clean up duplex port code and document weird semantics. git-svn-id: http://svn.drobilla.net/lad/trunk/ingen@2075 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/PortImpl.cpp')
-rw-r--r--src/engine/PortImpl.cpp31
1 files changed, 15 insertions, 16 deletions
diff --git a/src/engine/PortImpl.cpp b/src/engine/PortImpl.cpp
index 6b0bfcad..05fcfe67 100644
--- a/src/engine/PortImpl.cpp
+++ b/src/engine/PortImpl.cpp
@@ -177,29 +177,28 @@ PortImpl::clear_buffers()
void
PortImpl::broadcast_value(ProcessContext& context, bool force)
{
- if (_type == DataType::CONTROL || _type == DataType::AUDIO) {
- const Sample value = ((AudioBuffer*)buffer(0))->value_at(0);
- if (force || value != _last_broadcasted_value) {
- const Events::SendPortValue ev(context.engine(), context.start(), this, false, 0, value);
- context.event_sink().write(sizeof(ev), &ev);
- _last_broadcasted_value = value;
+ switch (_type.symbol()) {
+ case DataType::UNKNOWN:
+ break;
+ case DataType::AUDIO:
+ case DataType::CONTROL:
+ {
+ const Sample val = ((AudioBuffer*)buffer(0))->value_at(0);
+ if (force || val != _last_broadcasted_value) {
+ _last_broadcasted_value = val;
+ const Events::SendPortValue ev(context.engine(), context.start(), this, false, 0, val);
+ context.event_sink().write(sizeof(ev), &ev);
+ }
}
- } else if (_type == DataType::EVENT) {
+ break;
+ case DataType::EVENT:
if (((EventBuffer*)buffer(0))->event_count() > 0) {
const Events::SendPortActivity ev(context.engine(), context.start(), this);
context.event_sink().write(sizeof(ev), &ev);
}
+ break;
}
}
-void
-PortImpl::broadcast(ProcessContext& context)
-{
- if (_broadcast)
- broadcast_value(context);
-}
-
-
-
} // namespace Ingen