Program Listing for File DataFlowAnalysis.h

Program Listing for File DataFlowAnalysis.h#

Return to documentation for file (src/midend/programAnalysis/bitvectorDataflow/DataFlowAnalysis.h)

#ifndef DATA_FLOW_ANALYSIS
#define DATA_FLOW_ANALYSIS

#include "CFGImpl.h"

template <class Data>
class DataFlowNode : public CFGNodeImpl
{
 protected:
  DataFlowNode( MultiGraphCreate* c)
    : CFGNodeImpl(c) {}
 public:
  virtual Data get_entry_data() const = 0;
  virtual void set_entry_data( const Data& d) = 0;
  virtual Data get_exit_data() const = 0;
  virtual void apply_transfer_function() = 0;
};

template<class Node,class Data>
class DataFlowAnalysis  : public CFGImplTemplate<Node, CFGEdgeImpl>
{
  virtual Data meet_data( const Data& d1, const Data& d2) = 0;
  virtual Data get_empty_data() const = 0;
  virtual void FinalizeCFG( AstInterface& fa) = 0;
 public:
  typedef typename CFGImplTemplate<Node, CFGEdgeImpl>::NodeIterator NodeIterator;
  typedef typename CFGImplTemplate<Node, CFGEdgeImpl>::EdgeIterator EdgeIterator;

  DataFlowAnalysis();
  void operator()( AstInterface& fa, const AstNodePtr& head);
  using CFGImplTemplate<Node, CFGEdgeImpl>::GetNodeIterator;
};

#endif