summaryrefslogtreecommitdiffstats
path: root/src/server/GraphImpl.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/GraphImpl.cpp')
-rw-r--r--src/server/GraphImpl.cpp38
1 files changed, 32 insertions, 6 deletions
diff --git a/src/server/GraphImpl.cpp b/src/server/GraphImpl.cpp
index adfb433d..389fd182 100644
--- a/src/server/GraphImpl.cpp
+++ b/src/server/GraphImpl.cpp
@@ -312,6 +312,27 @@ GraphImpl::num_ports_non_rt() const
return _inputs.size() + _outputs.size();
}
+bool
+GraphImpl::has_port_with_index(uint32_t index) const
+{
+ BufferFactory& bufs = *_engine.buffer_factory();
+ const auto index_atom = bufs.forge().make(int32_t(index));
+
+ for (auto p = _inputs.begin(); p != _inputs.end(); ++p) {
+ if (p->has_property(bufs.uris().lv2_index, index_atom)) {
+ return true;
+ }
+ }
+
+ for (auto p = _outputs.begin(); p != _outputs.end(); ++p) {
+ if (p->has_property(bufs.uris().lv2_index, index_atom)) {
+ return true;
+ }
+ }
+
+ return false;
+}
+
void
GraphImpl::remove_port(DuplexPort& port)
{
@@ -337,13 +358,18 @@ GraphImpl::build_ports_array(Raul::Maid& maid)
const size_t n = _inputs.size() + _outputs.size();
MPtr<Ports> result = maid.make_managed<Ports>(n);
- size_t i = 0;
-
- for (PortList::iterator p = _inputs.begin(); p != _inputs.end(); ++p, ++i)
- result->at(i) = &*p;
+ std::map<size_t, DuplexPort*> ports;
+ for (PortList::iterator p = _inputs.begin(); p != _inputs.end(); ++p) {
+ ports.emplace(p->index(), &*p);
+ }
+ for (PortList::iterator p = _outputs.begin(); p != _outputs.end(); ++p) {
+ ports.emplace(p->index(), &*p);
+ }
- for (PortList::iterator p = _outputs.begin(); p != _outputs.end(); ++p, ++i)
- result->at(i) = &*p;
+ size_t i = 0;
+ for (const auto& p : ports) {
+ result->at(i++) = p.second;
+ }
assert(i == n);