00001 00016 #ifndef InterActiveFortran_hpp 00017 #define InterActiveFortran_hpp 00018 00019 #include <cassert> 00020 #include <iostream> 00021 #include <map> 00022 #include <OpenAnalysis/Utils/OA_ptr.hpp> 00023 #include <OpenAnalysis/IRInterface/IRHandles.hpp> 00024 #include <OpenAnalysis/DataFlow/LocDFSet.hpp> 00025 #include <OpenAnalysis/Activity/ActiveStandard.hpp> 00026 #include <OpenAnalysis/OABase/Annotation.hpp> 00027 00028 namespace OA { 00029 namespace Activity { 00030 00031 00032 class InterActiveFortran : public virtual Annotation { 00033 public: 00034 InterActiveFortran(); 00035 00036 ~InterActiveFortran(); 00037 00040 OA_ptr<ProcHandleIterator> getKnownProcIterator(); 00041 00043 bool isActive(SymHandle sym); 00044 00045 00047 bool isActive(ProcHandle proc, StmtHandle stmt); 00048 00050 bool isActive(ProcHandle proc, MemRefHandle memref); 00051 00052 00054 void setActive(SymHandle sym); 00055 00060 OA_ptr<SymHandleIterator> getActiveSymIterator(); 00061 00062 OA_ptr<MemRefHandleIterator> getActiveMemRefIterator(ProcHandle proc); 00063 00064 OA_ptr<StmtHandleIterator> getActiveStmtIterator(ProcHandle proc); 00065 00067 void mapProcToActive(ProcHandle p, OA_ptr<Activity::ActiveStandard> active); 00068 00070 int getNumIterUseful(); 00071 00073 int getNumIterVary(); 00074 00076 int getNumIterActive(); 00077 00079 int getActiveSizeInBytes(); 00080 00082 void setNumIterUseful(int n); 00083 00085 void setNumIterVary(int n); 00086 00088 void setNumIterActive(int n); 00089 00091 void setActiveSizeInBytes(int size); 00092 00093 //***************************************************************** 00094 // Output 00095 //***************************************************************** 00096 void output(IRHandlesIRInterface &ir); 00097 00098 void dump(std::ostream& os, OA_ptr<IRHandlesIRInterface> ir); 00099 00100 private: 00101 // mapping of procedures to activity results 00102 std::map<ProcHandle,OA_ptr<Activity::ActiveStandard> > mProcToActiveMap; 00103 00104 // set of active symbols from all procedures 00105 std::set<SymHandle> mActiveSymSet; 00106 bool mUnknownLocActive; 00107 int mSizeInBytes; 00108 00109 // numIters: number of iterations over nodes 00110 int mNumIterUseful; 00111 int mNumIterVary; 00112 int mNumIterActive; 00113 00115 class ActivityProcIter : public virtual ProcHandleIterator, 00116 public IRHandleSetIterator<ProcHandle> 00117 { 00118 public: 00119 ActivityProcIter(OA_ptr<std::set<ProcHandle> > pSet ) 00120 : IRHandleSetIterator<ProcHandle>(pSet) {} 00121 ~ActivityProcIter() { } 00122 00123 ProcHandle current() const 00124 { return IRHandleSetIterator<ProcHandle>::current(); } 00125 bool isValid() const 00126 { return IRHandleSetIterator<ProcHandle>::isValid(); } 00127 void operator++() { IRHandleSetIterator<ProcHandle>::operator++(); } 00128 void reset() { IRHandleSetIterator<ProcHandle>::reset(); } 00129 }; 00130 00131 00132 }; 00133 00134 } // end of Activity namespace 00135 } // end of OA namespace 00136 00137 #endif 00138
1.7.1