UsefulStandard.hpp

Go to the documentation of this file.
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