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
00022
00023 namespace OA {
00024 namespace DataFlow {
00025
00026
00027
00028
00029 class ICFGDFProblem {
00030 public:
00031
00032
00033
00034 ICFGDFProblem() {}
00035 virtual ~ICFGDFProblem() {}
00036
00037
00038
00039
00040
00042 virtual OA_ptr<DataFlowSet> initializeTop() = 0;
00043
00045
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
00053
00054
00055
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
00092 virtual OA_ptr<DataFlowSet> callToReturn(ProcHandle caller,
00093 OA_ptr<DataFlowSet> dfset, CallHandle call, ProcHandle callee) = 0;
00094
00095 };
00096
00097 }
00098 }
00099
00100 #endif