From: <ag...@us...> - 2012-01-26 17:20:26
|
Revision: 2687 http://zoolib.svn.sourceforge.net/zoolib/?rev=2687&view=rev Author: agreen Date: 2012-01-26 17:20:15 +0000 (Thu, 26 Jan 2012) Log Message: ----------- ZVisitee::Accept now takes a const ZVisitor&, so we can easily pass in a temporary visitor and don't *have* to declare it as a local. Use DynNonConst to get the pointer to which real dispatch happens. Modified Paths: -------------- trunk/zoolib/source/cxx/zoolib/ZExpr.cpp trunk/zoolib/source/cxx/zoolib/ZExpr.h trunk/zoolib/source/cxx/zoolib/ZVisitor.cpp trunk/zoolib/source/cxx/zoolib/ZVisitor.h trunk/zoolib/source/cxx/zoolib/ZYad.cpp trunk/zoolib/source/cxx/zoolib/ZYad.h Modified: trunk/zoolib/source/cxx/zoolib/ZExpr.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZExpr.cpp 2012-01-26 17:17:25 UTC (rev 2686) +++ trunk/zoolib/source/cxx/zoolib/ZExpr.cpp 2012-01-26 17:20:15 UTC (rev 2687) @@ -25,9 +25,9 @@ // ================================================================================================= // MARK: - ZExpr -void ZExpr::Accept(ZVisitor& iVisitor) +void ZExpr::Accept(const ZVisitor& iVisitor) { - if (ZVisitor_Expr* theVisitor = dynamic_cast<ZVisitor_Expr*>(&iVisitor)) + if (ZVisitor_Expr* theVisitor = DynNonConst<ZVisitor_Expr*>(&iVisitor)) this->Accept_Expr(*theVisitor); else ZVisitee::Accept(iVisitor); Modified: trunk/zoolib/source/cxx/zoolib/ZExpr.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZExpr.h 2012-01-26 17:17:25 UTC (rev 2686) +++ trunk/zoolib/source/cxx/zoolib/ZExpr.h 2012-01-26 17:20:15 UTC (rev 2687) @@ -35,7 +35,7 @@ { public: // From ZVisitee - virtual void Accept(ZVisitor& iVisitor); + virtual void Accept(const ZVisitor& iVisitor); // Our protocol virtual void Accept_Expr(ZVisitor_Expr& iVisitor); Modified: trunk/zoolib/source/cxx/zoolib/ZVisitor.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZVisitor.cpp 2012-01-26 17:17:25 UTC (rev 2686) +++ trunk/zoolib/source/cxx/zoolib/ZVisitor.cpp 2012-01-26 17:20:15 UTC (rev 2687) @@ -25,8 +25,8 @@ // ================================================================================================= // MARK: - ZVisitee -void ZVisitee::Accept(ZVisitor& iVisitor) - { iVisitor.Visit(this); } +void ZVisitee::Accept(const ZVisitor& iVisitor) + { const_cast<ZVisitor&>(iVisitor).Visit(this); } // ================================================================================================= // MARK: - ZVisitor Modified: trunk/zoolib/source/cxx/zoolib/ZVisitor.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZVisitor.h 2012-01-26 17:17:25 UTC (rev 2686) +++ trunk/zoolib/source/cxx/zoolib/ZVisitor.h 2012-01-26 17:20:15 UTC (rev 2687) @@ -35,7 +35,7 @@ { public: // Our protocol - virtual void Accept(ZVisitor& iVisitor); + virtual void Accept(const ZVisitor& iVisitor) = 0; }; // ================================================================================================= Modified: trunk/zoolib/source/cxx/zoolib/ZYad.cpp =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad.cpp 2012-01-26 17:17:25 UTC (rev 2686) +++ trunk/zoolib/source/cxx/zoolib/ZYad.cpp 2012-01-26 17:20:15 UTC (rev 2687) @@ -90,17 +90,12 @@ ZYadR::ZYadR() {} -void ZYadR::Accept(ZVisitor& iVisitor) +void ZYadR::Accept(const ZVisitor& iVisitor) { - if (ZVisitor_Yad* theVisitor = - dynamic_cast<ZVisitor_Yad*>(&iVisitor)) - { + if (ZVisitor_Yad* theVisitor = DynNonConst<ZVisitor_Yad*>(&iVisitor)) this->Accept_Yad(*theVisitor); - } else - { ZVisitee::Accept(iVisitor); - } } void ZYadR::Finish() Modified: trunk/zoolib/source/cxx/zoolib/ZYad.h =================================================================== --- trunk/zoolib/source/cxx/zoolib/ZYad.h 2012-01-26 17:17:25 UTC (rev 2686) +++ trunk/zoolib/source/cxx/zoolib/ZYad.h 2012-01-26 17:20:15 UTC (rev 2687) @@ -79,7 +79,7 @@ public: // From ZVisitee - virtual void Accept(ZVisitor& iVisitor); + virtual void Accept(const ZVisitor& iVisitor); // Our protocol virtual void Finish(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |