DFAGenReachingDefinitionsStandard.cpp

Go to the documentation of this file.
00001 
00002 // DFAGenReachingDefinitionsStandard.cpp
00003 
00004 
00005 #include <OpenAnalysis/DataFlow/ReachDefs/DFAGenReachingDefinitionsStandard.hpp>
00006 
00007 namespace OA {
00008   namespace DFAGenReachingDefinitions {
00009 
00010 OA_ptr<LocIterator> DFAGenReachingDefinitionsStandard::getDFAGenReachingDefinitionsIterator(StmtHandle s) 
00011 { 
00012     OA_ptr<LocIterator> retval;
00013 
00014     if (mDFAGenReachingDefinitions[s].ptrEqual(0)) {
00015         OA_ptr<LocSet> emptySet; emptySet = new LocSet;
00016         retval = new LocSetIterator(emptySet);
00017     } else {
00018     retval = new LocSetIterator(mDFAGenReachingDefinitions[s]);
00019     }
00020     return retval;
00021 }
00022 
00023 OA_ptr<LocIterator> DFAGenReachingDefinitionsStandard::getExitDFAGenReachingDefinitionsIterator() 
00024 { 
00025     OA_ptr<LocIterator> retval;
00026      if (mExitDFAGenReachingDefinitions.ptrEqual(0)) {
00027         OA_ptr<LocSet> emptySet; emptySet = new LocSet;
00028         retval = new LocSetIterator(emptySet);
00029     }
00030     else {
00031     retval = new LocSetIterator(mExitDFAGenReachingDefinitions);
00032     }
00033     return retval;
00034 }
00035 
00036 void DFAGenReachingDefinitionsStandard::output(IRHandlesIRInterface& ir)
00037 {    
00038     sOutBuild->objStart("DFAGenReachingDefinitionsStandard");
00039 
00040     sOutBuild->mapStart("mDFAGenReachingDefinitions", "StmtHandle", "OA_ptr<LocSet>");
00041     std::map<StmtHandle,OA_ptr<LocSet> >::iterator mapIter;
00042     for (mapIter = mDFAGenReachingDefinitions.begin(); mapIter != mDFAGenReachingDefinitions.end(); mapIter++) {
00043         StmtHandle s = mapIter->first;
00044         OA_ptr<LocSet> rdset = mapIter->second;
00045         if ( rdset.ptrEqual(0) ) continue;
00046 
00047         sOutBuild->mapEntryStart();
00048         sOutBuild->mapKeyStart();
00049         sOutBuild->outputIRHandle(s, ir);
00050         sOutBuild->mapKeyEnd();
00051         sOutBuild->mapValueStart();
00052        
00053        
00054         sOutBuild->listStart();
00055         OA_ptr<LocIterator> setIter;
00056         setIter = getDFAGenReachingDefinitionsIterator(s);
00057         for ( ; setIter->isValid(); (*setIter)++ ) {
00058              sOutBuild->listItemStart(); {
00059              setIter->current()->output(ir);  
00060             } sOutBuild->listItemEnd();
00061         }
00062         sOutBuild->listEnd();  
00063         sOutBuild->mapValueEnd();
00064         sOutBuild->mapEntryEnd();
00065     }
00066     sOutBuild->mapEnd("mDFAGenReachingDefinitions");
00067     sOutBuild->objEnd("DFAGenReachingDefinitionsStandard");
00068 }
00069 
00070 
00071 
00072 void DFAGenReachingDefinitionsStandard::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir)
00073 {
00074     std::cout<< "======DFAGenReachingDefinitions===="<< std::endl;
00075     OA_ptr<LocIterator> locIterPtr;
00076     std::map<StmtHandle,OA_ptr<LocSet> > ::iterator mapIter;
00077     for (mapIter = mDFAGenReachingDefinitions.begin(); mapIter != mDFAGenReachingDefinitions.end(); mapIter++) {
00078         std::cout<< "\tstmt = " << ir->toString(mapIter->first) << std::endl; 
00079          locIterPtr = getDFAGenReachingDefinitionsIterator(mapIter->first);
00080         for ( ; locIterPtr->isValid(); (*locIterPtr)++ ) {
00081             std::cout << "\t\t";
00082             locIterPtr->current()->dump(std::cout,ir);
00083             std::cout << std::endl;
00084         }
00085 
00086     }
00087 }
00088 
00089 
00090 
00091   } // end of DFAGenReachingDefinitions namespace
00092 } // end of OA namespace