ICFGDFProblem.hpp

Go to the documentation of this file.
00001 
00015 #ifndef ICFGDFProblem_h
00016 #define ICFGDFProblem_h
00017 
00018 #include <OpenAnalysis/Utils/OA_ptr.hpp>
00019 #include <OpenAnalysis/DataFlow/DataFlowSet.hpp>
00020 #include <OpenAnalysis/ICFG/ICFGInterface.hpp>
00021 //#include <OpenAnalysis/IRInterface/CFGIRInterface.hpp>
00022 
00023 namespace OA {
00024   namespace DataFlow {
00025 
00026 //*********************************************************************
00027 // class ICFGDFProblem
00028 //*********************************************************************
00029 class ICFGDFProblem  {
00030 public:
00031   //--------------------------------------------------------
00032   // constructor/destructor
00033   //--------------------------------------------------------
00034   ICFGDFProblem() {}
00035   virtual ~ICFGDFProblem() {}
00036 
00037   //--------------------------------------------------------
00038   // initialization callbacks
00039   //--------------------------------------------------------
00040 
00042   virtual OA_ptr<DataFlowSet>  initializeTop() = 0;
00043 
00045   //virtual OA_ptr<DataFlowSet>  initializeBottom() = 0;
00046 
00048   virtual OA_ptr<DataFlowSet> 
00049       initializeNodeIN(OA_ptr<ICFG::NodeInterface> n)  = 0;
00050   virtual OA_ptr<DataFlowSet> 
00051       initializeNodeOUT(OA_ptr<ICFG::NodeInterface> n)  = 0;
00052   //virtual void initializeEdge(DGraph::Interface::Edge *e)  = 0;
00053 
00054   //--------------------------------------------------------
00055   // solver callbacks 
00056   //--------------------------------------------------------
00057   
00060   virtual OA_ptr<DataFlowSet> meet(OA_ptr<DataFlowSet> set1, 
00061                                    OA_ptr<DataFlowSet> set2) = 0; 
00062 
00066   virtual OA_ptr<DataFlowSet> transfer(ProcHandle proc,
00067                                        OA_ptr<DataFlowSet> in, 
00068                                        OA::StmtHandle stmt) = 0; 
00069   
00073   virtual OA_ptr<DataFlowSet> entryTransfer(ProcHandle proc,
00074                                             OA_ptr<DataFlowSet> in) = 0; 
00075 
00079   virtual OA_ptr<DataFlowSet> exitTransfer(ProcHandle proc,
00080                                            OA_ptr<DataFlowSet> out) = 0; 
00081 
00083   virtual OA_ptr<DataFlowSet> callerToCallee(ProcHandle caller,
00084     OA_ptr<DataFlowSet> dfset, CallHandle call, ProcHandle callee) = 0;
00085   
00087   virtual OA_ptr<DataFlowSet> calleeToCaller(ProcHandle callee,
00088     OA_ptr<DataFlowSet> dfset, CallHandle call, ProcHandle caller) = 0;
00089 
00090   // MMA
00092   virtual OA_ptr<DataFlowSet> callToReturn(ProcHandle caller,
00093     OA_ptr<DataFlowSet> dfset, CallHandle call, ProcHandle callee) = 0;
00094 
00095 };
00096                             
00097   } // end of DataFlow namespace
00098 }  // end of OA namespace
00099 
00100 #endif