00001 00030 #ifndef UDDUChainsXAIF_hpp 00031 #define UDDUChainsXAIF_hpp 00032 00033 #include <cassert> 00034 #include <iostream> 00035 #include <map> 00036 #include <set> 00037 #include <vector> 00038 #include "OpenAnalysis/Utils/OA_ptr.hpp" 00039 #include "OpenAnalysis/Utils/SetIterator.hpp" 00040 #include "OpenAnalysis/IRInterface/IRHandles.hpp" 00041 #include "OpenAnalysis/UDDUChains/Interface.hpp" 00042 #include "OpenAnalysis/XAIF/ChainsXAIF.hpp" 00043 00044 namespace OA { 00045 00050 namespace XAIF { 00051 00052 00061 class UDDUChainsXAIF : public ChainsXAIF { 00062 00063 public: 00064 00065 UDDUChainsXAIF(); 00066 00067 ~UDDUChainsXAIF() {} 00068 00069 class MemRefsWithChainIterator; 00070 00076 OA_ptr<ChainIterator> getUDChainIterator(MemRefHandle h); 00077 00083 OA_ptr<ChainIterator> getDUChainIterator(MemRefHandle h); 00084 00089 OA_ptr<MemRefsWithChainIterator> getMemRefsWithChainIterator(); 00090 00097 int getUDDUChainId(MemRefHandle ref); 00098 00102 void insertInto(MemRefHandle ref, int Id); 00103 00104 void dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir); 00105 00106 private: 00107 00108 OA_ptr<std::map<MemRefHandle,int> > mMemRefToIdMap; 00109 00110 public: 00111 00112 class MemRefsWithChainIterator { 00113 public: 00114 MemRefsWithChainIterator(OA_ptr<std::map<MemRefHandle,int> > pMap) 00115 : mMap(pMap), mIter(pMap->begin()) {} 00116 ~MemRefsWithChainIterator() {} 00117 00118 MemRefHandle current() { return mIter->first; } 00119 bool isValid() { return (mIter != mMap->end()); } 00120 void operator++() { if (isValid()) mIter++; } 00121 void operator++(int) { ++*this; } 00122 void reset() { mIter = mMap->begin(); } 00123 00124 private: 00125 OA_ptr<std::map<MemRefHandle,int> > mMap; 00126 std::map<MemRefHandle,int>::iterator mIter; 00127 }; 00128 00129 }; 00130 00131 } 00132 } 00133 00134 #endif 00135
1.7.1