summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2016-12-13 18:01:15 -0500
committerDavid Robillard <d@drobilla.net>2016-12-14 01:10:29 -0500
commit4df8895cf62db13f03ad7165c9d2b1060b04de4c (patch)
treeb3f5a25e67e901f1091eca0b8072e050c568a351
parentad43d2e08cea225635b56c5473a768bc853ecda3 (diff)
downloadingen-4df8895cf62db13f03ad7165c9d2b1060b04de4c.tar.gz
ingen-4df8895cf62db13f03ad7165c9d2b1060b04de4c.tar.bz2
ingen-4df8895cf62db13f03ad7165c9d2b1060b04de4c.zip
Don't use path to determine if nodes are the main graph
Doing so is slower and touches std::string code that could in theory not be RT-safe (though always is in practice).
-rw-r--r--src/server/InputPort.cpp4
-rw-r--r--src/server/NodeImpl.hpp8
-rw-r--r--src/server/PortImpl.cpp6
3 files changed, 13 insertions, 5 deletions
diff --git a/src/server/InputPort.cpp b/src/server/InputPort.cpp
index 61ce0c05..fc2abd56 100644
--- a/src/server/InputPort.cpp
+++ b/src/server/InputPort.cpp
@@ -152,7 +152,7 @@ InputPort::pre_process(RunContext& context)
update_set_state(context, v);
// Prepare for write in case a set event executes this cycle
- if (!_parent->path().is_root()) {
+ if (!_parent->is_main()) {
buffer(v)->prepare_write(context);
}
}
@@ -251,7 +251,7 @@ bool
InputPort::direct_connect() const
{
return _arcs.size() == 1
- && !_parent->path().is_root()
+ && !_parent->is_main()
&& !_arcs.front().must_mix()
&& buffer(0)->type() != _bufs.uris().atom_Sequence;
}
diff --git a/src/server/NodeImpl.hpp b/src/server/NodeImpl.hpp
index dc85a757..517fbdb6 100644
--- a/src/server/NodeImpl.hpp
+++ b/src/server/NodeImpl.hpp
@@ -89,6 +89,14 @@ public:
virtual bool apply_poly(
RunContext& context, Raul::Maid& maid, uint32_t poly) = 0;
+ /** Return true iff this is main (the top level Node).
+ *
+ * This is sometimes called "the root graph", but the term "main" is used
+ * to avoid ambiguity with the root path, since main does not have the path
+ * "/", but usually "/main" to leave namespace for non-node things.
+ */
+ bool is_main() const { return !_parent; }
+
protected:
NodeImpl(const Ingen::URIs& uris,
NodeImpl* parent,
diff --git a/src/server/PortImpl.cpp b/src/server/PortImpl.cpp
index 669e4b9d..c27cdb9e 100644
--- a/src/server/PortImpl.cpp
+++ b/src/server/PortImpl.cpp
@@ -298,7 +298,7 @@ PortImpl::update_set_state(RunContext& context, uint32_t v)
if (state.time < context.start() &&
buf->is_sequence() &&
buf->value_type() == _bufs.uris().atom_Float &&
- !_parent->path().is_root()) {
+ !_parent->is_main()) {
buf->clear();
state.time = context.start();
}
@@ -325,7 +325,7 @@ bool
PortImpl::prepare_poly(BufferFactory& bufs, uint32_t poly)
{
ThreadManager::assert_thread(THREAD_PRE_PROCESS);
- if (_is_driver_port || _parent->path().is_root() ||
+ if (_is_driver_port || _parent->is_main() ||
(_type == PortType::ATOM && !_value.is_valid())) {
return false;
}
@@ -353,7 +353,7 @@ PortImpl::prepare_poly(BufferFactory& bufs, uint32_t poly)
bool
PortImpl::apply_poly(RunContext& context, Raul::Maid& maid, uint32_t poly)
{
- if (_parent->path().is_root() ||
+ if (_parent->is_main() ||
(_type == PortType::ATOM && !_value.is_valid())) {
return false;
}