00001 00016 #ifndef UsefulStandard_hpp 00017 #define UsefulStandard_hpp 00018 00019 #include <cassert> 00020 #include <iostream> 00021 #include <map> 00022 #include <set> 00023 #include <vector> 00024 #include <OpenAnalysis/Utils/OA_ptr.hpp> 00025 #include <OpenAnalysis/IRInterface/IRHandles.hpp> 00026 #include <OpenAnalysis/ReachDefs/Interface.hpp> 00027 #include <OpenAnalysis/DataFlow/LocDFSet.hpp> 00028 #include <OpenAnalysis/OABase/Annotation.hpp> 00029 00030 namespace OA { 00031 namespace Activity { 00032 00033 00034 00035 class UsefulStandard : public virtual Annotation { 00036 public: 00037 UsefulStandard(ProcHandle p); 00038 ~UsefulStandard() {} 00039 00042 OA_ptr<LocIterator> getDepSetIterator(); 00043 00046 OA_ptr<LocIterator> getInUsefulIterator(StmtHandle s); 00047 00050 OA_ptr<LocIterator> getOutUsefulIterator(StmtHandle s); 00051 00052 //OA_ptr<DataFlow::LocDFSet> getFinalUseful(); 00053 00055 int getNumIter() { return mNumIter; } 00056 00057 //***************************************************************** 00058 // Construction methods 00059 //***************************************************************** 00060 00062 void insertDepLoc(OA_ptr<Location> loc) 00063 { mDepLocSet->insert(loc); } 00064 00066 void copyIntoInUseful(StmtHandle s, 00067 OA_ptr<DataFlow::LocDFSet> dfset) 00068 { 00069 OA_ptr<DataFlow::DataFlowSet> cloneDFset = dfset->clone(); 00070 mInUseful[s] = cloneDFset.convert<DataFlow::LocDFSet>(); 00071 } 00072 00074 void copyIntoOutUseful(StmtHandle s, 00075 OA_ptr<DataFlow::LocDFSet> dfset) 00076 { 00077 OA_ptr<DataFlow::DataFlowSet> cloneDFset = dfset->clone(); 00078 mOutUseful[s] = cloneDFset.convert<DataFlow::LocDFSet>(); 00079 } 00080 00082 void copyIntoCallOutUseful(CallHandle c, 00083 OA_ptr<DataFlow::LocDFSet> dfset) 00084 { 00085 OA_ptr<DataFlow::DataFlowSet> cloneDFset = dfset->clone(); 00086 mCallOutUseful[c] = cloneDFset.convert<DataFlow::LocDFSet>(); 00087 } 00088 00090 //void mapFinalUseful(OA_ptr<DataFlow::LocDFSet> final); 00091 00093 void setNumIter(int n) { mNumIter = n; } 00094 00096 //void mapProcToUseful(ProcHandle proc, OA_ptr<UsefulStandard> useful) 00097 // { mProcToUsefulMap[proc] = useful; } 00098 00099 //***************************************************************** 00100 // Output 00101 //***************************************************************** 00102 00105 void dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir); 00106 00107 //***************************************************************** 00108 // Annotation Interface 00109 //***************************************************************** 00110 void output(IRHandlesIRInterface &ir); 00111 00112 private: 00113 // data members 00114 std::map<StmtHandle,OA_ptr<DataFlow::LocDFSet> > mInUseful; 00115 std::map<StmtHandle,OA_ptr<DataFlow::LocDFSet> > mOutUseful; 00116 std::map<CallHandle,OA_ptr<DataFlow::LocDFSet> > mCallOutUseful; 00117 OA_ptr<DataFlow::LocDFSet> mDepLocSet; 00118 //OA_ptr<DataFlow::LocDFSet> mFinalInUseful; 00119 //std::map<ProcHandle,OA_ptr<UsefulStandard> > mProcToUsefulMap; 00120 int mNumIter; 00121 00122 }; 00123 00124 } // end of Activity namespace 00125 } // end of OA namespace 00126 00127 #endif 00128
1.7.1