1 //
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.
5 //
6 // NodeSearch.h: Utilities for searching translator node graphs
7 //
8 
9 #ifndef COMPILER_TRANSLATOR_NODESEARCH_H_
10 #define COMPILER_TRANSLATOR_NODESEARCH_H_
11 
12 #include "compiler/translator/IntermTraverse.h"
13 
14 namespace sh
15 {
16 
17 template <class Parent>
18 class NodeSearchTraverser : public TIntermTraverser
19 {
20   public:
NodeSearchTraverser()21     NodeSearchTraverser() : TIntermTraverser(true, false, false), mFound(false) {}
22 
found()23     bool found() const { return mFound; }
24 
search(TIntermNode * node)25     static bool search(TIntermNode *node)
26     {
27         Parent searchTraverser;
28         node->traverse(&searchTraverser);
29         return searchTraverser.found();
30     }
31 
32   protected:
33     bool mFound;
34 };
35 
36 class FindDiscard : public NodeSearchTraverser<FindDiscard>
37 {
38   public:
visitBranch(Visit visit,TIntermBranch * node)39     virtual bool visitBranch(Visit visit, TIntermBranch *node)
40     {
41         switch (node->getFlowOp())
42         {
43             case EOpKill:
44                 mFound = true;
45                 break;
46 
47             default:
48                 break;
49         }
50 
51         return !mFound;
52     }
53 };
54 }
55 
56 #endif  // COMPILER_TRANSLATOR_NODESEARCH_H_
57