InterActiveFortran.hpp

Go to the documentation of this file.
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