MCPcopy Create free account
hub / github.com/BespokeSynth/BespokeSynth / FindCircularDependencySearch

Method FindCircularDependencySearch

Source/ModularSynth.cpp:2295–2344  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2293}
2294
2295bool ModularSynth::FindCircularDependencySearch(std::list<IAudioSource*> chain, IAudioSource* searchFrom)
2296{
2297 /*std::string debugString = "FindCircularDependencySearch(): ";
2298 for (auto& element : chain)
2299 debugString += dynamic_cast<IDrawableModule*>(element)->GetDisplayName() + "->";
2300 debugString += dynamic_cast<IDrawableModule*>(searchFrom)->GetDisplayName();
2301 ofLog() << debugString;*/
2302
2303 chain.push_back(searchFrom);
2304 IAudioSource* end = chain.back();
2305 for (int i = 0; i < end->GetNumTargets(); ++i)
2306 {
2307 IAudioReceiver* receiver = end->GetTarget(i);
2308 IAudioSource* targetAsSource = dynamic_cast<IAudioSource*>(receiver);
2309 if (targetAsSource != nullptr)
2310 {
2311 if (ListContains(targetAsSource, chain)) //found a circular dependency
2312 {
2313 std::string debugString = "FindCircularDependencySearch(): found! ";
2314 for (auto& element : chain)
2315 debugString += dynamic_cast<IDrawableModule*>(element)->GetDisplayName() + "->";
2316 debugString += dynamic_cast<IDrawableModule*>(targetAsSource)->GetDisplayName();
2317 ofLog() << debugString;
2318
2319 chain.push_back(targetAsSource);
2320 std::vector<IAudioSource*> chainVec;
2321 for (auto& element : chain)
2322 chainVec.push_back(element);
2323 for (int j = 0; j < (int)chainVec.size() - 1; ++j)
2324 {
2325 IDrawableModule* module = dynamic_cast<IDrawableModule*>(chainVec[j]);
2326 for (int k = 0; k < (int)module->GetPatchCableSources().size(); ++k)
2327 {
2328 if (dynamic_cast<IAudioSource*>(module->GetPatchCableSource(k)->GetTarget()) == chainVec[j + 1])
2329 module->GetPatchCableSource(k)->SetIsPartOfCircularDependency(true);
2330 }
2331 }
2332
2333 return true;
2334 }
2335 else
2336 {
2337 if (FindCircularDependencySearch(chain, targetAsSource))
2338 return true;
2339 }
2340 }
2341 }
2342
2343 return false;
2344}
2345
2346void ModularSynth::ClearCircularDependencyMarkers()
2347{

Callers

nothing calls this directly

Calls 9

ListContainsFunction · 0.85
ofLogClass · 0.85
GetDisplayNameMethod · 0.80
sizeMethod · 0.80
GetPatchCableSourcesMethod · 0.80
GetNumTargetsMethod · 0.45
GetTargetMethod · 0.45
GetPatchCableSourceMethod · 0.45

Tested by

no test coverage detected