@@ -271,15 +271,14 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
271271 // stores the pointer to a source leading into a particular dest node
272272 // along with a boolean vector indicating the position of this source
273273 // relative to other sources entering the dest via mergers
274- // and a vector indicating the splitter settings between the source and dest.
275274 // (when the mergerOrder vectors of all incoming nodes to a dest are
276275 // lexicographically sorted, the sources will be in the correct order)
277276 struct ConnectionInfo
278277 {
279- // give friendlier names to the pair entries
280- std::vector<bool > mergerOrder;
281- std::vector<bool > splitterSettings;
282278 GenericProcessor* source;
279+ std::vector<int > mergerOrder;
280+ bool connectContinuous;
281+ bool connectEvents;
283282
284283 // for SortedSet sorting:
285284 bool operator <(const ConnectionInfo& other) const
@@ -331,28 +330,28 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
331330
332331 ConnectionInfo conn;
333332 conn.source = source;
333+ conn.connectContinuous = true ;
334+ conn.connectEvents = true ;
334335
335336 while (dest != nullptr && (dest->isMerger () || dest->isSplitter ()))
336337 {
337- if (dest->isSplitter ())
338+ if (dest->isSplitter () && dest != activeSplitter && !splitters. contains (dest) )
338339 {
339- if (dest != activeSplitter && !splitters.contains (dest))
340- {
341- // add to stack of splitters to explore
342- splitters.add (dest);
343- dest->switchIO (0 ); // go down first path
344- }
345-
346- int path = static_cast <Splitter*>(dest)->getPath ();
347- conn.splitterSettings .push_back (bool (path));
340+ // add to stack of splitters to explore
341+ splitters.add (dest);
342+ dest->switchIO (0 ); // go down first path
348343 }
349344 else if (dest->isMerger ())
350345 {
346+ auto merger = static_cast <Merger*>(dest);
347+
351348 // keep the input aligned with the current path
352- int path = static_cast <Merger*>(dest) ->switchToSourceNode (prev);
349+ int path = merger ->switchToSourceNode (prev);
353350 jassert (path != -1 ); // merger not connected to prev?
354351
355- conn.mergerOrder .insert (conn.mergerOrder .begin (), bool (path));
352+ conn.mergerOrder .insert (conn.mergerOrder .begin (), path);
353+ conn.connectContinuous &= merger->sendContinuousForSource (prev);
354+ conn.connectEvents &= merger->sendEventsForSource (prev);
356355 }
357356
358357 prev = dest;
@@ -424,7 +423,7 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
424423
425424 for (const ConnectionInfo& conn : destSources.second )
426425 {
427- connectProcessors (conn.source , dest, conn.splitterSettings );
426+ connectProcessors (conn.source , dest, conn.connectContinuous , conn. connectEvents );
428427 }
429428 }
430429
@@ -436,7 +435,7 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
436435} // end method
437436
438437void ProcessorGraph::connectProcessors (GenericProcessor* source, GenericProcessor* dest,
439- const std::vector< bool >& splitterSettings )
438+ bool connectContinuous, bool connectEvents )
440439{
441440
442441 if (source == nullptr || dest == nullptr )
@@ -445,26 +444,6 @@ void ProcessorGraph::connectProcessors(GenericProcessor* source, GenericProcesso
445444 std::cout << " Connecting " << source->getName () << " " << source->getNodeId (); // " channel ";
446445 std::cout << " to " << dest->getName () << " " << dest->getNodeId () << std::endl;
447446
448- // determine what to connect by looking at each merger
449- bool connectContinuous = true ;
450- bool connectEvents = true ;
451- int splitterInd = 0 ;
452-
453- for (GenericProcessor* curr = source->getDestNode (); curr != dest; curr = curr->getDestNode ())
454- {
455- jassert (curr != nullptr ); // should be a path from source to dest
456- if (curr->isSplitter ())
457- {
458- curr->switchIO (int (splitterSettings[splitterInd++]));
459- }
460- else if (curr->isMerger ())
461- {
462- Merger* merger = static_cast <Merger*>(curr);
463- connectContinuous &= merger->sendContinuousForSource (source);
464- connectEvents &= merger->sendEventsForSource (source);
465- }
466- }
467-
468447 // 1. connect continuous channels
469448 if (connectContinuous)
470449 {
0 commit comments