2 // Copyright (c) 2002-2013 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.
6 // NodeSearch.h: Utilities for searching translator node graphs
9 #ifndef TRANSLATOR_NODESEARCH_H_
10 #define TRANSLATOR_NODESEARCH_H_
15 template <class Parent>
16 class NodeSearchTraverser : public TIntermTraverser
23 bool found() const { return mFound; }
25 static bool search(TIntermNode *node)
27 Parent searchTraverser;
28 node->traverse(&searchTraverser);
29 return searchTraverser.found();
36 class FindDiscard : public NodeSearchTraverser<FindDiscard>
39 virtual bool visitBranch(Visit visit, TIntermBranch *node)
41 switch (node->getFlowOp())
54 class FindSideEffectRewriting : public NodeSearchTraverser<FindSideEffectRewriting>
57 virtual bool visitBinary(Visit visit, TIntermBinary *node)
59 switch (node->getOp())
63 if (node->getRight()->hasSideEffects())
78 #endif // TRANSLATOR_NODESEARCH_H_