00001 00015 #ifndef MemRefExprVisitor_H 00016 #define MemRefExprVisitor_H 00017 00018 #include <OpenAnalysis/MemRefExpr/MemRefExpr.hpp> 00019 00020 namespace OA { 00021 00022 //-------------------------------------------------------------------- 00040 class MemRefExprVisitor { 00041 protected: 00042 MemRefExprVisitor() {} 00043 public: 00044 virtual ~MemRefExprVisitor() {} 00045 00046 //--------------------------------------- 00047 // methods for each MemRefExpr subclasses 00048 //--------------------------------------- 00049 00050 virtual void visitNamedRef(NamedRef& ref) = 0; 00051 virtual void visitUnnamedRef(UnnamedRef& ref) = 0; 00052 virtual void visitUnknownRef(UnknownRef& ref) = 0; 00053 00054 // should never have a RefOp instance and will never have more 00055 // direct subclasses for RefOp 00056 //virtual void visitRefOp(RefOp& ref) = 0; 00057 00058 virtual void visitAddressOf(AddressOf& ref) = 0; 00059 virtual void visitDeref(Deref& ref) = 0; 00060 00061 // default SubSetRef base class so that visitors can handle 00062 // SubSetRef sub-classes added later in a generic fasion 00063 // and direct instances of SubSetRef 00064 virtual void visitSubSetRef(SubSetRef& ref) = 0; 00065 00066 // each subclass of SubSetRef should call visitSubSetRef 00067 // as default 00068 virtual void visitIdxAccess(IdxAccess& ref) 00069 { visitSubSetRef(ref); } 00070 virtual void visitIdxExprAccess(IdxExprAccess& ref) 00071 { visitSubSetRef(ref); } 00072 virtual void visitFieldAccess(FieldAccess& ref) 00073 { visitSubSetRef(ref); } 00074 }; 00075 00076 00077 } // end of OA namespace 00078 00079 #endif
1.6.1