EachCFGStandard.hpp

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