|
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.
|