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
1.7.1