1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/gfx/angle/src/compiler/depgraph/DependencyGraphTraverse.cpp Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,69 @@ 1.4 +// 1.5 +// Copyright (c) 2012 The ANGLE Project Authors. All rights reserved. 1.6 +// Use of this source code is governed by a BSD-style license that can be 1.7 +// found in the LICENSE file. 1.8 +// 1.9 + 1.10 +#include "compiler/depgraph/DependencyGraph.h" 1.11 + 1.12 +// These methods do a breadth-first traversal through the graph and mark visited nodes. 1.13 + 1.14 +void TGraphNode::traverse(TDependencyGraphTraverser* graphTraverser) 1.15 +{ 1.16 + graphTraverser->markVisited(this); 1.17 +} 1.18 + 1.19 +void TGraphParentNode::traverse(TDependencyGraphTraverser* graphTraverser) 1.20 +{ 1.21 + TGraphNode::traverse(graphTraverser); 1.22 + 1.23 + graphTraverser->incrementDepth(); 1.24 + 1.25 + // Visit the parent node's children. 1.26 + for (TGraphNodeSet::const_iterator iter = mDependentNodes.begin(); 1.27 + iter != mDependentNodes.end(); 1.28 + ++iter) 1.29 + { 1.30 + TGraphNode* node = *iter; 1.31 + if (!graphTraverser->isVisited(node)) 1.32 + node->traverse(graphTraverser); 1.33 + } 1.34 + 1.35 + graphTraverser->decrementDepth(); 1.36 +} 1.37 + 1.38 +void TGraphArgument::traverse(TDependencyGraphTraverser* graphTraverser) 1.39 +{ 1.40 + graphTraverser->visitArgument(this); 1.41 + TGraphParentNode::traverse(graphTraverser); 1.42 +} 1.43 + 1.44 +void TGraphFunctionCall::traverse(TDependencyGraphTraverser* graphTraverser) 1.45 +{ 1.46 + graphTraverser->visitFunctionCall(this); 1.47 + TGraphParentNode::traverse(graphTraverser); 1.48 +} 1.49 + 1.50 +void TGraphSymbol::traverse(TDependencyGraphTraverser* graphTraverser) 1.51 +{ 1.52 + graphTraverser->visitSymbol(this); 1.53 + TGraphParentNode::traverse(graphTraverser); 1.54 +} 1.55 + 1.56 +void TGraphSelection::traverse(TDependencyGraphTraverser* graphTraverser) 1.57 +{ 1.58 + graphTraverser->visitSelection(this); 1.59 + TGraphNode::traverse(graphTraverser); 1.60 +} 1.61 + 1.62 +void TGraphLoop::traverse(TDependencyGraphTraverser* graphTraverser) 1.63 +{ 1.64 + graphTraverser->visitLoop(this); 1.65 + TGraphNode::traverse(graphTraverser); 1.66 +} 1.67 + 1.68 +void TGraphLogicalOp::traverse(TDependencyGraphTraverser* graphTraverser) 1.69 +{ 1.70 + graphTraverser->visitLogicalOp(this); 1.71 + TGraphNode::traverse(graphTraverser); 1.72 +}