blob: a2f399baa0d327903f763793afdc3dff9ed6f933 [file] [log] [blame]
#include "rive/dependency_sorter.hpp"
#include "rive/component.hpp"
using namespace rive;
void DependencySorter::sort(Component* root, std::vector<Component*>& order) {
order.clear();
visit(root, order);
}
bool DependencySorter::visit(Component* component, std::vector<Component*>& order) {
if (m_Perm.find(component) != m_Perm.end()) {
return true;
}
if (m_Temp.find(component) != m_Temp.end()) {
fprintf(stderr, "Dependency cycle!\n");
return false;
}
m_Temp.emplace(component);
auto dependents = component->dependents();
for (auto dependent : dependents) {
if (!visit(dependent, order)) {
return false;
}
}
m_Perm.emplace(component);
order.insert(order.begin(), component);
return true;
}