Skip to content

Commit 3a9c0de

Browse files
committed
Fix various issues with updateConnections
1 parent b819945 commit 3a9c0de

1 file changed

Lines changed: 49 additions & 25 deletions

File tree

Source/Processors/ProcessorGraph/ProcessorGraph.cpp

Lines changed: 49 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,10 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
261261
std::cout << std::endl;
262262

263263
Array<GenericProcessor*> splitters;
264-
// GenericProcessor* activeSplitter = nullptr;
264+
265+
// keep track of which splitter is currently being explored, in case there's another
266+
// splitter between the one being explored and its source.
267+
GenericProcessor* activeSplitter = nullptr;
265268

266269
for (int n = 0; n < tabs.size(); n++) // cycle through the tabs
267270
{
@@ -282,8 +285,8 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
282285
if (!(source->isSink() ||
283286
source->isSplitter() ||
284287
source->isMerger() ||
285-
source->isUtility())
286-
&& !(source->wasConnected))
288+
source->isUtility() ||
289+
source->wasConnected))
287290
{
288291
std::cout << " Connecting to audio and record nodes." << std::endl;
289292
connectProcessorToAudioAndRecordNodes(source);
@@ -294,23 +297,23 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
294297
}
295298

296299
// find the next dest that's not a merger or splitter
300+
GenericProcessor* prev = source;
297301
while (dest != nullptr && (dest->isMerger() || dest->isSplitter()))
298302
{
299-
if (dest->isSplitter() && !dest->wasConnected)
303+
if (dest->isSplitter() && dest != activeSplitter && !splitters.contains(dest))
304+
{
305+
// add to stack of splitters to explore
306+
splitters.add(dest);
307+
dest->switchIO(0); // go down first path
308+
}
309+
else if (dest->isMerger() && dest->getSourceNode() != prev)
300310
{
301-
if (!splitters.contains(dest))
302-
{
303-
splitters.add(dest);
304-
dest->switchIO(0); // go down first path
305-
}
306-
else
307-
{
308-
int splitterIndex = splitters.indexOf(dest);
309-
splitters.remove(splitterIndex);
310-
dest->switchIO(1); // go down second path
311-
dest->wasConnected = true; // make sure we don't re-use this splitter
312-
}
311+
// keep the input aligned with the current path
312+
dest->switchIO();
313+
jassert(dest->getSourceNode() == prev);
313314
}
315+
316+
prev = dest;
314317
dest = dest->getDestNode();
315318
}
316319

@@ -330,21 +333,42 @@ void ProcessorGraph::updateConnections(Array<SignalChainTabButton*, CriticalSect
330333
std::cout << std::endl;
331334

332335
source->wasConnected = true;
333-
source = dest; // switch source and dest
334336

335-
if (source == nullptr && splitters.size() > 0)
337+
if (dest != nullptr && dest->wasConnected)
336338
{
339+
// don't bother retraversing downstream of a dest that has already been connected
340+
// (but if it leads to a splitter that is still in the stack, it may still be
341+
// used as a source for the unexplored branch.)
342+
343+
std::cout << dest->getName() << " " << dest->getNodeId() <<
344+
" has already been connected." << std::endl;
345+
std::cout << std::endl;
346+
dest = nullptr;
347+
}
337348

338-
source = splitters.getLast();
339-
GenericProcessor* newSource;// = source->getSourceNode();
349+
source = dest; // switch source and dest
340350

341-
while (source->isSplitter() || source->isMerger())
351+
if (source == nullptr)
352+
{
353+
if (splitters.size() > 0)
342354
{
343-
newSource = source->getSourceNode();
344-
newSource->setPathToProcessor(source);
345-
source = newSource;
346-
}
355+
activeSplitter = splitters.getLast();
356+
splitters.removeLast();
357+
activeSplitter->switchIO(1);
347358

359+
source = activeSplitter;
360+
GenericProcessor* newSource;
361+
while (source->isSplitter() || source->isMerger())
362+
{
363+
newSource = source->getSourceNode();
364+
newSource->setPathToProcessor(source);
365+
source = newSource;
366+
}
367+
}
368+
else
369+
{
370+
activeSplitter = nullptr;
371+
}
348372
}
349373

350374
} // end while source != 0

0 commit comments

Comments
 (0)