00001 00015 #ifndef EachCFGStandard_H 00016 #define EachCFGStandard_H 00017 00018 #include <OpenAnalysis/CFG/ManagerCFG.hpp> 00019 #include <OpenAnalysis/CFG/EachCFGInterface.hpp> 00020 #include <map> 00021 00022 namespace OA { 00023 namespace CFG { 00024 00025 class EachCFGStandard : public virtual EachCFGInterface { 00026 public: 00027 EachCFGStandard(OA_ptr<ManagerCFGStandard> cfgman) 00028 : mCFGMan(cfgman) {} 00029 virtual ~EachCFGStandard() {} 00030 00032 OA_ptr<CFG::CFGInterface> getCFGResults(ProcHandle proc) 00033 { if (mProcToCFGMap[proc].ptrEqual(0)) { 00034 OA_ptr<CFG::CFGInterface> cfg = mCFGMan->performAnalysis(proc); 00035 mProcToCFGMap[proc] = cfg; 00036 } 00037 return mProcToCFGMap[proc]; 00038 } 00039 00041 /* 00042 OA_ptr<ProcHandleIterator> getKnownProcIterator() 00043 { 00044 // create a procSet 00045 OA_ptr<std::set<ProcHandle> > procSet; 00046 procSet = new std::set<ProcHandle>; 00047 00048 // loop through all maps to add to list of ProcHandle's 00049 std::map<ProcHandle,OA_ptr<CFG::Interface> >::iterator mIter; 00050 for (mIter=mProcToCFGMap.begin(); 00051 mIter != mProcToCFGMap.end(); mIter++) 00052 { 00053 procSet->insert(mIter->first); 00054 } 00055 00056 OA_ptr<KnownProcIterator> retval; 00057 retval = new KnownProcIterator(procSet); 00058 return retval; 00059 } 00060 */ 00061 00062 private: 00066 OA_ptr<ManagerCFGStandard> mCFGMan; 00067 std::map<ProcHandle,OA_ptr<CFG::CFGInterface> > mProcToCFGMap; 00068 00069 /* 00071 class KnownProcIterator : public virtual OA::ProcHandleIterator, 00072 public OA::IRHandleSetIterator<OA::ProcHandle> 00073 { 00074 public: 00075 KnownProcIterator(OA::OA_ptr<std::set<OA::ProcHandle> > pSet) 00076 : OA::IRHandleSetIterator<OA::ProcHandle>(pSet) {} 00077 ~KnownProcIterator() {} 00078 00079 void operator++() { OA::IRHandleSetIterator<OA::ProcHandle>::operator++(); } 00080 bool isValid() const 00081 { return OA::IRHandleSetIterator<OA::ProcHandle>::isValid(); } 00082 OA::ProcHandle current() const 00083 { return OA::IRHandleSetIterator<OA::ProcHandle>::current(); } 00084 void reset() { OA::IRHandleSetIterator<OA::ProcHandle>::current(); } 00085 }; 00086 */ 00087 }; 00088 00089 00090 } // end of CFG namespace 00091 } // end of OA namespace 00092 00093 #endif 00094
1.7.1