VaryStandard.cpp

Go to the documentation of this file.
00001 
00015 #include "VaryStandard.hpp"
00016 
00017 namespace OA {
00018   namespace Activity {
00019 
00020 VaryStandard::VaryStandard(ProcHandle p) 
00021 { 
00022     mIndepLocSet = new DataFlow::LocDFSet; 
00023 }
00024 
00025 OA_ptr<LocIterator> VaryStandard::getIndepSetIterator() 
00026 { 
00027   OA_ptr<LocIterator> retval;
00028   retval = new DataFlow::LocDFSetIterator(*mIndepLocSet);
00029   return retval;
00030 }
00031 
00032 OA_ptr<LocIterator> VaryStandard::getOutVaryIterator(StmtHandle s)
00033 { 
00034     OA_ptr<LocIterator> retval;
00035     if (mOutVary[s].ptrEqual(0)) {
00036         mOutVary[s] = new DataFlow::LocDFSet;
00037     }
00038     retval = new DataFlow::LocDFSetIterator(*mOutVary[s]);
00039     return retval;
00040 }
00041 
00042 OA_ptr<DataFlow::LocDFSet> VaryStandard::getInVarySet(ExprHandle call)
00043 {
00044     if (mInVary.find(call)!=mInVary.end()) {
00045         return mInVary[call];
00046     } else {
00047         OA_ptr<DataFlow::LocDFSet> emptySet; 
00048         emptySet = new DataFlow::LocDFSet;
00049         return emptySet;
00050     }
00051 }
00052 
00053 //*****************************************************************
00054 // Construction methods 
00055 //*****************************************************************
00056 
00057 void VaryStandard::insertIndepLoc(OA_ptr<Location> loc) 
00058 { 
00059     mIndepLocSet->insert(loc); 
00060 }
00061 
00062 void VaryStandard::copyIntoOutVary(StmtHandle s, 
00063                                    OA_ptr<DataFlow::LocDFSet> dfset)
00064 {
00065     OA_ptr<DataFlow::DataFlowSet> cloneDFset = dfset->clone();
00066     mOutVary[s] = cloneDFset.convert<DataFlow::LocDFSet>();
00067 }
00068 
00069 void VaryStandard::copyIntoInVary(ExprHandle call, 
00070                                   OA_ptr<DataFlow::LocDFSet> dfset)
00071 {
00072     OA_ptr<DataFlow::DataFlowSet> cloneDFset = dfset->clone();
00073     mInVary[call] = cloneDFset.convert<DataFlow::LocDFSet>();
00074 }
00075 
00076    
00077 //*****************************************************************
00078 // Output
00079 //*****************************************************************
00080 
00082 void VaryStandard::dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir)
00083 {
00084     os << "============================ VaryStandard" << std::endl;
00085     os << "IndepSet = " << std::endl;
00086     mIndepLocSet->dump(os,ir);
00087 
00088     // iterate over all stmts we know about
00089     std::map<StmtHandle, 
00090              OA_ptr<DataFlow::LocDFSet> >::iterator mapIter;
00091     for (mapIter = mOutVary.begin(); mapIter != mOutVary.end(); mapIter++) {
00092         StmtHandle s = mapIter->first;
00093 
00094         os << "StmtHandle(" << s.hval() << ") " << ir->toString(s) 
00095            << std::endl << "\tOutVary: " << std::endl;
00096         mapIter->second->dump(os,ir);
00097     }
00098 }
00099 
00100 
00101 
00102   } // end of Activity namespace
00103 } // end of OA namespace