blob: 1bf9f44d3098e67a144a42dc525a18dc29993346 [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;
}