00001 00015 #ifndef LocationVisitor_H 00016 #define LocationVisitor_H 00017 00018 #include "NamedLoc.hpp" 00019 #include "UnnamedLoc.hpp" 00020 #include "InvisibleLoc.hpp" 00021 #include "UnknownLoc.hpp" 00022 #include "LocSubSet.hpp" 00023 #include "LocIdxSubSet.hpp" 00024 #include "LocFieldSubSet.hpp" 00025 namespace OA { 00026 00027 //-------------------------------------------------------------------- 00045 class LocationVisitor { 00046 protected: 00047 LocationVisitor() {} 00048 public: 00049 virtual ~LocationVisitor() {} 00050 00051 //--------------------------------------- 00052 // methods for each Location subclasses 00053 //--------------------------------------- 00054 00055 virtual void visitNamedLoc(NamedLoc& loc) = 0; 00056 virtual void visitUnnamedLoc(UnnamedLoc& loc) = 0; 00057 virtual void visitInvisibleLoc(InvisibleLoc& loc) = 0; 00058 virtual void visitUnknownLoc(UnknownLoc& loc) = 0; 00059 00060 // default LocSubSet base class so that visitors can handle 00061 // LocSubSet sub-classes added later in a generic fasion 00062 // and direct instances of LocSubSet 00063 virtual void visitLocSubSet(LocSubSet& loc) = 0; 00064 00065 // each subclass of LocSubSet should call visitLocSubSet 00066 // as default 00067 virtual void visitLocIdxSubSet(LocIdxSubSet& loc); 00068 virtual void visitLocFieldSubSet(LocFieldSubSet& loc); 00069 }; 00070 00071 } // end of OA namespace 00072 00073 #endif
1.6.1