1//
2// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
3// Use of this source code is governed by a BSD-style license that can be
4// found in the LICENSE file.
5//
6
7#include "compiler/depgraph/DependencyGraph.h"
8
9// These methods do a breadth-first traversal through the graph and mark visited nodes.
10
11void TGraphNode::traverse(TDependencyGraphTraverser* graphTraverser)
12{
13    graphTraverser->markVisited(this);
14}
15
16void TGraphParentNode::traverse(TDependencyGraphTraverser* graphTraverser)
17{
18    TGraphNode::traverse(graphTraverser);
19
20    graphTraverser->incrementDepth();
21
22    // Visit the parent node's children.
23    for (TGraphNodeSet::const_iterator iter = mDependentNodes.begin();
24         iter != mDependentNodes.end();
25         ++iter)
26    {
27        TGraphNode* node = *iter;
28        if (!graphTraverser->isVisited(node))
29            node->traverse(graphTraverser);
30    }
31
32    graphTraverser->decrementDepth();
33}
34
35void TGraphArgument::traverse(TDependencyGraphTraverser* graphTraverser)
36{
37    graphTraverser->visitArgument(this);
38    TGraphParentNode::traverse(graphTraverser);
39}
40
41void TGraphFunctionCall::traverse(TDependencyGraphTraverser* graphTraverser)
42{
43    graphTraverser->visitFunctionCall(this);
44    TGraphParentNode::traverse(graphTraverser);
45}
46
47void TGraphSymbol::traverse(TDependencyGraphTraverser* graphTraverser)
48{
49    graphTraverser->visitSymbol(this);
50    TGraphParentNode::traverse(graphTraverser);
51}
52
53void TGraphSelection::traverse(TDependencyGraphTraverser* graphTraverser)
54{
55    graphTraverser->visitSelection(this);
56    TGraphNode::traverse(graphTraverser);
57}
58
59void TGraphLoop::traverse(TDependencyGraphTraverser* graphTraverser)
60{
61    graphTraverser->visitLoop(this);
62    TGraphNode::traverse(graphTraverser);
63}
64
65void TGraphLogicalOp::traverse(TDependencyGraphTraverser* graphTraverser)
66{
67    graphTraverser->visitLogicalOp(this);
68    TGraphNode::traverse(graphTraverser);
69}
70