| 2293 | } |
| 2294 | |
| 2295 | bool 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 | |
| 2346 | void ModularSynth::ClearCircularDependencyMarkers() |
| 2347 | { |
nothing calls this directly
no test coverage detected