CallGraphDFProblem.hpp

Go to the documentation of this file.
00001 
00026 #ifndef CallGraphDFProblem_h
00027 #define CallGraphDFProblem_h
00028 
00029 #include <OpenAnalysis/Utils/OA_ptr.hpp>
00030 #include <OpenAnalysis/DataFlow/DataFlowSet.hpp>
00031 #include <OpenAnalysis/CallGraph/CallGraphInterface.hpp>
00032 
00033 namespace OA {
00034   namespace DataFlow {
00035 
00036   
00037 //*********************************************************************
00038 // class CallGraphDFProblemNew
00039 //*********************************************************************
00040 class CallGraphDFProblem {
00041 public:
00042      //--------------------------------------------------------
00043      // constructor/destructor
00044      //--------------------------------------------------------
00045      CallGraphDFProblem() {}
00046      virtual ~CallGraphDFProblem() {}
00047 
00048        
00049 
00050   //--------------------------------------------------------
00051   // initialization callbacks
00052   //--------------------------------------------------------
00053 
00055   virtual OA_ptr<DataFlowSet>  initializeTop() = 0;
00056 
00058   virtual OA_ptr<DataFlowSet>  initializeBottom() = 0;
00059 
00061   virtual OA_ptr<DataFlowSet>
00062       initializeNodeIN(OA_ptr<CallGraph::NodeInterface> n)  = 0;
00063   virtual OA_ptr<DataFlowSet>
00064       initializeNodeOUT(OA_ptr<CallGraph::NodeInterface> n)  = 0;
00065 
00068   virtual OA_ptr<DataFlowSet> initializeNode(ProcHandle proc) = 0;
00071   virtual OA_ptr<DataFlowSet> initializeEdge(CallHandle call,
00072                                              ProcHandle caller,
00073                                              ProcHandle callee) = 0;
00077   virtual OA_ptr<DataFlowSet> initializeEdge(CallHandle call,
00078                                              ProcHandle caller,
00079                                              SymHandle callee) = 0;
00080 
00081   //--------------------------------------------------------
00082   // solver callbacks
00083   //--------------------------------------------------------
00084 
00087   virtual OA_ptr<DataFlowSet> meet(OA_ptr<DataFlowSet> set1,
00088                                    OA_ptr<DataFlowSet> set2)  = 0;
00089 
00091   virtual OA_ptr<DataFlowSet>
00092        atCallGraphNode(OA_ptr<DataFlowSet> inSet, OA::ProcHandle proc) = 0;
00093   
00096   virtual OA_ptr<DataFlowSet>
00097        atCallGraphEdge(OA_ptr<DataFlowSet> inSet, CallHandle call,
00098                             ProcHandle caller, ProcHandle callee) = 0;
00100   virtual OA_ptr<DataFlowSet>
00101        atCallGraphEdge(OA_ptr<DataFlowSet> inSet, CallHandle call,
00102                             ProcHandle caller, SymHandle callee) = 0;
00103   
00108   virtual OA_ptr<DataFlowSet>  nodeToEdge(ProcHandle proc,
00109                           OA_ptr<DataFlow::DataFlowSet> procDFSet, CallHandle call) = 0;
00110   
00113   virtual OA_ptr<DataFlowSet>  edgeToNode(CallHandle call,
00114                           OA_ptr<DataFlow::DataFlowSet> callDFSet, ProcHandle proc) = 0;
00115   
00116   
00117    };
00118 
00119   } // end of DataFlow namespace
00120 }  // end of OA namespace
00121 
00122 #endif

Generated on Sat Oct 31 05:21:20 2009 for OpenAnalysis by  doxygen 1.6.1