00001 00016 #ifndef ActiveStandard_hpp 00017 #define ActiveStandard_hpp 00018 00019 #include <cassert> 00020 #include <iostream> 00021 #include <list> 00022 #include <OpenAnalysis/Utils/OA_ptr.hpp> 00023 #include <OpenAnalysis/IRInterface/IRHandles.hpp> 00024 #include <OpenAnalysis/ReachDefs/Interface.hpp> 00025 #include <OpenAnalysis/DataFlow/LocDFSet.hpp> 00026 00027 namespace OA { 00028 namespace Activity { 00029 00030 00031 class ActiveStandard { 00032 public: 00033 ActiveStandard(ProcHandle p); 00034 ~ActiveStandard() {} 00035 00040 OA_ptr<SymHandleIterator> getActiveSymIterator(); 00041 00044 //getActiveUnnamedIterator 00045 00047 bool isActive(SymHandle sym); 00048 00050 bool isActive(StmtHandle stmt); 00051 00053 bool isActive(MemRefHandle memref); 00054 00056 OA_ptr<StmtHandleIterator> getActiveStmtIterator(); 00057 00059 OA_ptr<MemRefHandleIterator> getActiveMemRefIterator(); 00060 00062 OA_ptr<LocIterator> getActiveLocsIterator(); 00063 00064 00065 //***************************************************************** 00066 // Construction methods 00067 //***************************************************************** 00068 00070 void insertLoc(OA_ptr<Location> loc); 00071 00073 void insertStmt(StmtHandle stmt); 00074 00076 void insertMemRef(MemRefHandle memref); 00077 00079 bool getUnknownLocActive() { return mUnknownLocActive; } 00080 00081 //***************************************************************** 00082 // Output 00083 //***************************************************************** 00084 00087 void dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir); 00088 00089 private: 00090 // data members 00091 OA_ptr<DataFlow::LocDFSet> mActiveLocSet; 00092 OA_ptr<std::set<SymHandle> > mActiveSymSet; 00093 bool mUnknownLocActive; 00094 00095 OA_ptr<std::set<StmtHandle> > mActiveStmtSet; 00096 OA_ptr<std::set<MemRefHandle> > mActiveMemRefSet; 00097 00098 }; 00099 00101 class ActiveSymIterator : public virtual OA::SymHandleIterator, 00102 public OA::IRHandleSetIterator<OA::SymHandle> 00103 { 00104 public: 00105 ActiveSymIterator(OA::OA_ptr<std::set<OA::SymHandle> > pList) 00106 : OA::IRHandleSetIterator<OA::SymHandle>(pList) {} 00107 ~ActiveSymIterator() {} 00108 00109 void operator++() { OA::IRHandleSetIterator<OA::SymHandle>::operator++(); } 00110 bool isValid() const 00111 { return OA::IRHandleSetIterator<OA::SymHandle>::isValid(); } 00112 OA::SymHandle current() const 00113 { return OA::IRHandleSetIterator<OA::SymHandle>::current(); } 00114 void reset() { OA::IRHandleSetIterator<OA::SymHandle>::current(); } 00115 }; 00116 00117 00119 class ActiveMemRefIterator : public virtual OA::MemRefHandleIterator, 00120 public OA::IRHandleSetIterator<OA::MemRefHandle> 00121 { 00122 public: 00123 ActiveMemRefIterator(OA::OA_ptr<std::set<OA::MemRefHandle> > pList) 00124 : OA::IRHandleSetIterator<OA::MemRefHandle>(pList) {} 00125 ~ActiveMemRefIterator() {} 00126 00127 void operator++() { OA::IRHandleSetIterator<OA::MemRefHandle>::operator++(); } 00128 bool isValid() const 00129 { return OA::IRHandleSetIterator<OA::MemRefHandle>::isValid(); } 00130 OA::MemRefHandle current() const 00131 { return OA::IRHandleSetIterator<OA::MemRefHandle>::current(); } 00132 void reset() { OA::IRHandleSetIterator<OA::MemRefHandle>::current(); } 00133 }; 00134 00135 00137 class ActiveStmtIterator : public virtual OA::IRStmtIterator, 00138 public OA::IRHandleSetIterator<OA::StmtHandle> 00139 { 00140 public: 00141 ActiveStmtIterator(OA::OA_ptr<std::set<OA::StmtHandle> > pList) 00142 : OA::IRHandleSetIterator<OA::StmtHandle>(pList) {} 00143 ~ActiveStmtIterator() {} 00144 00145 void operator++() { OA::IRHandleSetIterator<OA::StmtHandle>::operator++(); } 00146 bool isValid() const 00147 { return OA::IRHandleSetIterator<OA::StmtHandle>::isValid(); } 00148 OA::StmtHandle current() const 00149 { return OA::IRHandleSetIterator<OA::StmtHandle>::current(); } 00150 void reset() { OA::IRHandleSetIterator<OA::StmtHandle>::current(); } 00151 }; 00152 00153 00154 00155 } // end of Activity namespace 00156 } // end of OA namespace 00157 00158 #endif 00159
1.7.1