MemRefsVisitor.hpp

Go to the documentation of this file.
00001 
00016 #ifndef MemRefsVisitor_H
00017 #define MemRefsVisitor_H
00018 
00019 #include <OpenAnalysis/ExprTree/ExprTreeVisitor.hpp>
00020 //#include <OpenAnalysis/Alias/Interface.hpp>
00021 
00022 namespace OA {
00023 
00024   // Seems like there should already be a MemRefIterator in the OA namespace
00025   // but I cannot seem to locate it, so here it is:
00027   class MemRefIterator : public virtual OA::MemRefHandleIterator,
00028                          public OA::IRHandleSetIterator<OA::MemRefHandle>
00029   {
00030   public:
00031     MemRefIterator(OA::OA_ptr<std::set<OA::MemRefHandle> > pList) 
00032       : OA::IRHandleSetIterator<OA::MemRefHandle>(pList) {}
00033     ~MemRefIterator() {}
00034 
00035     void operator++() { OA::IRHandleSetIterator<OA::MemRefHandle>::operator++(); }
00036     bool isValid() const
00037       { return OA::IRHandleSetIterator<OA::MemRefHandle>::isValid(); }
00038     OA::MemRefHandle current() const
00039       { return OA::IRHandleSetIterator<OA::MemRefHandle>::current(); }
00040     void reset() { OA::IRHandleSetIterator<OA::MemRefHandle>::reset(); }
00041   };
00042 
00043 //--------------------------------------------------------------------
00046 
00047 class MemRefsVisitor : public ExprTreeVisitor {
00048 public:
00049   MemRefsVisitor() : mHasMemRef(false) { }
00050   ~MemRefsVisitor() {}
00051 
00052   void visitExprTreeBefore(ExprTree&) 
00053   { mMemRefSet = new std::set<MemRefHandle>; }
00054   void visitExprTreeAfter(ExprTree&) { }
00055 
00056   //---------------------------------------
00057   // method for each ExprTree::Node subclass
00058   //---------------------------------------
00059   // default base class so that visitors can handle unknown
00060   // node sub-classes in a generic fashion
00061   void visitNode(ExprTree::Node&);
00062 
00063   void visitOpNode(ExprTree::OpNode& n);
00064   void visitCallNode(ExprTree::CallNode& n);
00065   void visitMemRefNode(ExprTree::MemRefNode& n);
00066   void visitConstSymNode(ExprTree::ConstSymNode& n);
00067   void visitConstValNode(ExprTree::ConstValNode& n);
00068 
00070   bool hasMemRef() { return mHasMemRef; }
00071   OA_ptr<MemRefHandleIterator> getMemRefsIterator()
00072   { OA_ptr<MemRefIterator> retval;
00073     retval = new MemRefIterator(mMemRefSet);
00074     return retval;
00075   }
00076 
00077 private:
00078   bool mHasMemRef;
00079   OA_ptr<std::set<MemRefHandle> > mMemRefSet;
00080   //OA_ptr<Alias::Interface> mAlias;
00081 };
00082 
00083 
00084 
00085 } // end of OA namespace
00086 
00087 #endif

Generated on Sat Oct 31 05:21:24 2009 for OpenAnalysis by  doxygen 1.6.1