166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com//
266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved.
366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com// Use of this source code is governed by a BSD-style license that can be
466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com// found in the LICENSE file.
566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com//
666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
7dcefb75e81f3eec28fb1d2d3b3847682659e7378Geoff Lang#include "compiler/translator/depgraph/DependencyGraph.h"
866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com// These methods do a breadth-first traversal through the graph and mark visited nodes.
1066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
1166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TGraphNode::traverse(TDependencyGraphTraverser* graphTraverser)
1266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
1366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->markVisited(this);
1466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
1566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
1666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TGraphParentNode::traverse(TDependencyGraphTraverser* graphTraverser)
1766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
1866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    TGraphNode::traverse(graphTraverser);
1966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
2066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->incrementDepth();
2166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
2266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    // Visit the parent node's children.
2366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    for (TGraphNodeSet::const_iterator iter = mDependentNodes.begin();
2466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com         iter != mDependentNodes.end();
2566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com         ++iter)
2666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    {
2766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com        TGraphNode* node = *iter;
2866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com        if (!graphTraverser->isVisited(node))
2966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com            node->traverse(graphTraverser);
3066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    }
3166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
3266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->decrementDepth();
3366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
3466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
3566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TGraphArgument::traverse(TDependencyGraphTraverser* graphTraverser)
3666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
3766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->visitArgument(this);
3866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    TGraphParentNode::traverse(graphTraverser);
3966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
4066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
4166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TGraphFunctionCall::traverse(TDependencyGraphTraverser* graphTraverser)
4266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
4366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->visitFunctionCall(this);
4466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    TGraphParentNode::traverse(graphTraverser);
4566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
4666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
4766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TGraphSymbol::traverse(TDependencyGraphTraverser* graphTraverser)
4866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
4966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->visitSymbol(this);
5066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    TGraphParentNode::traverse(graphTraverser);
5166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
5266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
5366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TGraphSelection::traverse(TDependencyGraphTraverser* graphTraverser)
5466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
5566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->visitSelection(this);
5666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    TGraphNode::traverse(graphTraverser);
5766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
5866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
5966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TGraphLoop::traverse(TDependencyGraphTraverser* graphTraverser)
6066ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
6166ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->visitLoop(this);
6266ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    TGraphNode::traverse(graphTraverser);
6366ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
6466ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com
6566ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.comvoid TGraphLogicalOp::traverse(TDependencyGraphTraverser* graphTraverser)
6666ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com{
6766ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    graphTraverser->visitLogicalOp(this);
6866ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com    TGraphNode::traverse(graphTraverser);
6966ebd0143ea40a9beb83eab5d86e24f52825b3famaxvujovic@gmail.com}
70