Go to the source code of this file.
◆ GrTTopoSort()
template<typename
T , typename Traits = T>
bool GrTTopoSort |
( |
SkSpan< sk_sp< T > > |
graph, |
|
|
uint32_t |
offset = 0 |
|
) |
| |
Definition at line 92 of file GrTTopoSort.h.
92 {
94
95#ifdef SK_DEBUG
96 GrTTopoSort_CheckAllUnmarked<T, Traits>(graph);
97#endif
98
99 bool succeeded = true;
100
101 for (
size_t i = 0;
i < graph.
size(); ++
i) {
102 if (Traits::WasOutput(graph[
i].
get())) {
103
104
105 continue;
106 }
107
108
109 if (!GrTTopoSort_Visit<T, Traits>(graph[
i].
get(), &counter)) {
110 succeeded = false;
111 }
112 }
113
115
116
117 for (uint32_t
i = 0;
i < (uint32_t) graph.
size(); ++
i) {
118 for (uint32_t correctIndex = Traits::GetIndex(graph[
i].
get()) -
offset;
120 correctIndex = Traits::GetIndex(graph[
i].
get()) -
offset) {
121 graph[
i].swap(graph[correctIndex]);
122 }
123 }
124
125#ifdef SK_DEBUG
126 GrTTopoSort_CleanExit<T, Traits>(graph,
offset);
127#endif
128 return succeeded;
129}
constexpr size_t size() const
const myers::Point & get(const myers::Segment &)
◆ GrTTopoSort_Visit()
template<typename
T , typename Traits = T>
bool GrTTopoSort_Visit |
( |
T * |
node, |
|
|
uint32_t * |
counter |
|
) |
| |
Definition at line 36 of file GrTTopoSort.h.
36 {
37 if (Traits::IsTempMarked(node)) {
38
39 return false;
40 }
41
42
43
44 if (Traits::WasOutput(node)) {
45 return true;
46 }
47
48 bool succeeded = true;
49
50
51 Traits::SetTempMark(node);
52 for (
int i = 0;
i < Traits::NumDependencies(node); ++
i) {
53 if (!GrTTopoSort_Visit<T, Traits>(Traits::Dependency(node,
i), counter)) {
54 succeeded = false;
55 }
56 }
57
59 ++(*counter);
60 Traits::ResetTempMark(node);
61
62 return succeeded;
63}