michael@0: // michael@0: // Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. michael@0: // Use of this source code is governed by a BSD-style license that can be michael@0: // found in the LICENSE file. michael@0: // michael@0: michael@0: #include "compiler/depgraph/DependencyGraph.h" michael@0: michael@0: // These methods do a breadth-first traversal through the graph and mark visited nodes. michael@0: michael@0: void TGraphNode::traverse(TDependencyGraphTraverser* graphTraverser) michael@0: { michael@0: graphTraverser->markVisited(this); michael@0: } michael@0: michael@0: void TGraphParentNode::traverse(TDependencyGraphTraverser* graphTraverser) michael@0: { michael@0: TGraphNode::traverse(graphTraverser); michael@0: michael@0: graphTraverser->incrementDepth(); michael@0: michael@0: // Visit the parent node's children. michael@0: for (TGraphNodeSet::const_iterator iter = mDependentNodes.begin(); michael@0: iter != mDependentNodes.end(); michael@0: ++iter) michael@0: { michael@0: TGraphNode* node = *iter; michael@0: if (!graphTraverser->isVisited(node)) michael@0: node->traverse(graphTraverser); michael@0: } michael@0: michael@0: graphTraverser->decrementDepth(); michael@0: } michael@0: michael@0: void TGraphArgument::traverse(TDependencyGraphTraverser* graphTraverser) michael@0: { michael@0: graphTraverser->visitArgument(this); michael@0: TGraphParentNode::traverse(graphTraverser); michael@0: } michael@0: michael@0: void TGraphFunctionCall::traverse(TDependencyGraphTraverser* graphTraverser) michael@0: { michael@0: graphTraverser->visitFunctionCall(this); michael@0: TGraphParentNode::traverse(graphTraverser); michael@0: } michael@0: michael@0: void TGraphSymbol::traverse(TDependencyGraphTraverser* graphTraverser) michael@0: { michael@0: graphTraverser->visitSymbol(this); michael@0: TGraphParentNode::traverse(graphTraverser); michael@0: } michael@0: michael@0: void TGraphSelection::traverse(TDependencyGraphTraverser* graphTraverser) michael@0: { michael@0: graphTraverser->visitSelection(this); michael@0: TGraphNode::traverse(graphTraverser); michael@0: } michael@0: michael@0: void TGraphLoop::traverse(TDependencyGraphTraverser* graphTraverser) michael@0: { michael@0: graphTraverser->visitLoop(this); michael@0: TGraphNode::traverse(graphTraverser); michael@0: } michael@0: michael@0: void TGraphLogicalOp::traverse(TDependencyGraphTraverser* graphTraverser) michael@0: { michael@0: graphTraverser->visitLogicalOp(this); michael@0: TGraphNode::traverse(graphTraverser); michael@0: }