UsefulStandard.cpp

Go to the documentation of this file.
00001 
00015 #include <OpenAnalysis/Activity/UsefulStandard.hpp>
00016 
00017 
00018 namespace OA {
00019   namespace Activity {
00020 
00021 UsefulStandard::UsefulStandard(ProcHandle p)
00022 { 
00023     mDepLocSet = new DataFlow::LocDFSet; 
00024     //mFinalInUseful = new DataFlow::LocDFSet;
00025     mNumIter = 0;
00026 }
00027 
00028 OA_ptr<LocIterator> UsefulStandard::getDepSetIterator() 
00029 { 
00030     OA_ptr<LocIterator> retval;
00031     retval = new DataFlow::LocDFSetIterator(*mDepLocSet);
00032     return retval;
00033 }
00034 
00035 OA_ptr<LocIterator> UsefulStandard::getInUsefulIterator(StmtHandle s)
00036 {
00037     OA_ptr<LocIterator> retval;
00038     if (mInUseful[s].ptrEqual(0)) {
00039         mInUseful[s] = new DataFlow::LocDFSet;
00040     }
00041     retval = new DataFlow::LocDFSetIterator(*mInUseful[s]);
00042     return retval;
00043 }
00044 
00045 OA_ptr<LocIterator> UsefulStandard::getOutUsefulIterator(StmtHandle s)
00046 {
00047     OA_ptr<LocIterator> retval;
00048     if (mOutUseful[s].ptrEqual(0)) {
00049         mOutUseful[s] = new DataFlow::LocDFSet;
00050     }
00051     retval = new DataFlow::LocDFSetIterator(*mOutUseful[s]);
00052     return retval;
00053 }
00054 
00055 //OA_ptr<DataFlow::LocDFSet> UsefulStandard::getFinalUseful()
00056 //{
00057 //    return mFinalInUseful;
00058 //}
00059 
00060   //void UsefulStandard::mapFinalUseful(OA_ptr<DataFlow::LocDFSet> final)
00061   //{
00062   //    mFinalInUseful = final;
00063   //}
00064 
00065 //*****************************************************************
00066 // Output 
00067 //*****************************************************************
00068 
00070 void UsefulStandard::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir)
00071 {
00072     os << "=================================== UsefulStandard" << std::endl;
00073     os << "DepSet = " << std::endl;
00074     mDepLocSet->dump(os,ir);
00075 
00076     // iterate over all stmts we know about
00077     std::map<StmtHandle, 
00078              OA_ptr<DataFlow::LocDFSet> >::iterator mapIter;
00079     for (mapIter = mInUseful.begin(); mapIter != mInUseful.end(); mapIter++) {
00080         StmtHandle s = mapIter->first;
00081 
00082         os << "StmtHandle(" << s.hval() << ") " << ir->toString(s) 
00083            << std::endl << "\tInUseful: " << std::endl;
00084         mapIter->second->dump(os,ir);
00085     }
00086 }
00087 
00088 //*****************************************************************
00089 // Annotation Interface
00090 //*****************************************************************
00091 void UsefulStandard::output(IRHandlesIRInterface &ir)
00092 {
00093   sOutBuild->objStart("mNumIter"); {
00094     ostringstream oss;
00095     oss << mNumIter;
00096     sOutBuild->outputString( oss.str() );
00097   } sOutBuild->objEnd("mNumIter");
00098 
00099   sOutBuild->objStart("mDepLocSet"); {
00100     mDepLocSet->output(ir);
00101   } sOutBuild->objEnd("mDepLocSet");
00102 
00103   sOutBuild->mapStart("mStmtToUsefulSetsMap","StmtHandle","UsefulSets"); {
00104     std::map<StmtHandle,
00105       OA_ptr<DataFlow::LocDFSet> >::iterator mapIter;
00106     for (mapIter = mInUseful.begin(); mapIter != mInUseful.end(); mapIter++) {
00107       StmtHandle stmt = mapIter->first;
00108       OA_ptr<DataFlow::LocDFSet> inUsefulSet = mapIter->second;
00109       OA_ptr<DataFlow::LocDFSet> outUsefulSet = mOutUseful[stmt];
00110       // should have a outUseful for every inUseful, but just in case ...
00111       if (outUsefulSet.ptrEqual(0)) { 
00112         outUsefulSet = new DataFlow::LocDFSet(); 
00113       }
00114 
00115       sOutBuild->mapEntryStart(); {
00116         sOutBuild->mapKeyStart(); {
00117           sOutBuild->outputIRHandle(stmt,ir);
00118         } sOutBuild->mapKeyEnd();
00119         sOutBuild->mapValueStart(); {
00120           sOutBuild->fieldStart("InUsefulSet"); {
00121             inUsefulSet->output(ir);
00122           } sOutBuild->fieldEnd("InUsefulSet");
00123           sOutBuild->fieldStart("OutUsefulSet"); {
00124             outUsefulSet->output(ir);
00125           } sOutBuild->fieldEnd("OutUsefulSet");
00126         } sOutBuild->mapValueEnd();
00127       } sOutBuild->mapEntryEnd();
00128     }
00129   } sOutBuild->mapEnd("mStmtToInUsefulSetMap");
00130   
00131 }
00132 
00133 
00134   } // end of Activity namespace
00135 } // end of OA namespace