ROSE  0.9.6a
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
DataFlowAnalysis.h
Go to the documentation of this file.
1 #ifndef DATA_FLOW_ANALYSIS
2 #define DATA_FLOW_ANALYSIS
3 
4 #include "CFGImpl.h"
5 
6 template <class Data>
7 class DataFlowNode : public CFGNodeImpl
8 {
9  protected:
10  DataFlowNode( MultiGraphCreate* c)
11  : CFGNodeImpl(c) {}
12  public:
13  virtual Data get_entry_data() const = 0;
14  virtual void set_entry_data( const Data& d) = 0;
15  virtual Data get_exit_data() const = 0;
16  virtual void apply_transfer_function() = 0;
17 };
18 
19 template<class Node,class Data>
20 class DataFlowAnalysis : public CFGImplTemplate<Node, CFGEdgeImpl>
21 {
22  virtual Data meet_data( const Data& d1, const Data& d2) = 0;
23  virtual Data get_empty_data() const = 0;
24  virtual void FinalizeCFG( AstInterface& fa) = 0;
25  public:
26  typedef typename CFGImplTemplate<Node, CFGEdgeImpl>::NodeIterator NodeIterator;
27  typedef typename CFGImplTemplate<Node, CFGEdgeImpl>::EdgeIterator EdgeIterator;
28 
30  void operator()( AstInterface& fa, const AstNodePtr& head);
31  CFGImplTemplate<Node, CFGEdgeImpl>::GetNodeIterator;
32 };
33 
34 #endif