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
00039
00040 class CallGraphDFProblem {
00041 public:
00042
00043
00044
00045 CallGraphDFProblem() {}
00046 virtual ~CallGraphDFProblem() {}
00047
00048
00049
00050
00051
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
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 }
00120 }
00121
00122 #endif