Go to the documentation of this file.00001
00015 #include "ReachDefsStandard.hpp"
00016
00017 namespace OA {
00018 namespace ReachDefs {
00019
00022 OA_ptr<Interface::ReachDefsIterator>
00023 ReachDefsStandard::getReachDefsIterator(StmtHandle s)
00024 {
00025 OA_ptr<ReachDefsStandardReachDefsIterator> retval;
00026
00027 if (mReachDefs[s].ptrEqual(0)) {
00028 mReachDefs[s] = new std::set<StmtHandle>;
00029 }
00030 retval = new ReachDefsStandardReachDefsIterator(mReachDefs[s]);
00031 return retval;
00032 }
00033
00036 OA_ptr<Interface::ReachDefsIterator>
00037 ReachDefsStandard::getExitReachDefsIterator()
00038 {
00039 OA_ptr<ReachDefsStandardReachDefsIterator> retval;
00040 retval = new ReachDefsStandardReachDefsIterator(mExitReachDefs);
00041 return retval;
00042 }
00043
00044 void ReachDefsStandard::output(IRHandlesIRInterface& ir)
00045 {
00046 sOutBuild->objStart("ReachDefsStandard");
00047
00048 sOutBuild->mapStart("mReachDefs", "StmtHandle", "OA_ptr<std::set<StmtHandle> >");
00049 std::map<StmtHandle,OA_ptr<std::set<StmtHandle> > >::iterator mapIter;
00050 for (mapIter = mReachDefs.begin(); mapIter != mReachDefs.end(); mapIter++) {
00051 StmtHandle s = mapIter->first;
00052 OA_ptr<std::set<StmtHandle> > rdset = mapIter->second;
00053 if ( rdset.ptrEqual(0) ) continue;
00054
00055 sOutBuild->mapEntryStart();
00056 sOutBuild->mapKeyStart();
00057 sOutBuild->outputIRHandle(s, ir);
00058 sOutBuild->mapKeyEnd();
00059 sOutBuild->mapValueStart();
00060
00061 sOutBuild->listStart();
00062 std::set<StmtHandle>::iterator setIter;
00063 for (setIter=rdset->begin(); setIter!=rdset->end(); setIter++) {
00064 sOutBuild->listItemStart();
00065 sOutBuild->outputIRHandle(*setIter, ir);
00066 sOutBuild->listItemEnd();
00067 }
00068 sOutBuild->listEnd();
00069
00070 sOutBuild->mapValueEnd();
00071 sOutBuild->mapEntryEnd();
00072 }
00073 sOutBuild->mapEnd("mReachDefs");
00074
00075 sOutBuild->fieldStart("mExitReachDefs");
00076 sOutBuild->listStart();
00077 std::set<StmtHandle>::iterator setIter;
00078 for (setIter=mExitReachDefs->begin();
00079 setIter!=mExitReachDefs->end(); setIter++)
00080 {
00081 sOutBuild->listItemStart();
00082 sOutBuild->outputIRHandle(*setIter, ir);
00083 sOutBuild->listItemEnd();
00084 }
00085 sOutBuild->listEnd();
00086 sOutBuild->fieldEnd("mExitReachDefs");
00087
00088 sOutBuild->objEnd("ReachDefsStandard");
00089 }
00090
00091
00092
00095 void ReachDefsStandard::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir)
00096 {
00097 std::map<StmtHandle,OA_ptr<std::set<StmtHandle> > >::iterator mapIter;
00098 for (mapIter = mReachDefs.begin(); mapIter != mReachDefs.end(); mapIter++) {
00099 StmtHandle s = mapIter->first;
00100
00101 os << "StmtHandle(" << s.hval() << ") " << ir->toString(s)
00102 << std::endl << "\treachdefs: " << std::endl;
00103
00104 OA_ptr<Interface::ReachDefsIterator> setIterPtr
00105 = getReachDefsIterator(s);
00106 for (; setIterPtr->isValid(); (*setIterPtr)++) {
00107 os << "\t" << ir->toString(setIterPtr->current()) << std::endl;
00108 }
00109
00110 }
00111 }
00112
00113
00114
00115 }
00116 }