Update rive-cpp to 2.0 version
[platform/core/uifw/rive-tizen.git] / submodule / rive-cpp / src / dependency_sorter.cpp
1 #include "rive/dependency_sorter.hpp"
2 #include "rive/component.hpp"
3
4 using namespace rive;
5
6 void DependencySorter::sort(Component* root, std::vector<Component*>& order) {
7     order.clear();
8     visit(root, order);
9 }
10
11 bool DependencySorter::visit(Component* component, std::vector<Component*>& order) {
12     if (m_Perm.find(component) != m_Perm.end()) {
13         return true;
14     }
15     if (m_Temp.find(component) != m_Temp.end()) {
16         fprintf(stderr, "Dependency cycle!\n");
17         return false;
18     }
19
20     m_Temp.emplace(component);
21
22     auto dependents = component->dependents();
23     for (auto dependent : dependents) {
24         if (!visit(dependent, order)) {
25             return false;
26         }
27     }
28     m_Perm.emplace(component);
29     order.insert(order.begin(), component);
30
31     return true;
32 }