From 87b998c9ee3fdb442ee68d201ca897c28d99884a Mon Sep 17 00:00:00 2001 From: JoelKatz Date: Sat, 12 May 2012 22:40:34 -0700 Subject: [PATCH] Use polymorphic downcast. --- src/LedgerAcquire.cpp | 11 +++++------ src/LedgerAcquire.h | 10 +++++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/LedgerAcquire.cpp b/src/LedgerAcquire.cpp index ee8fcb7a2..d48212906 100644 --- a/src/LedgerAcquire.cpp +++ b/src/LedgerAcquire.cpp @@ -56,13 +56,13 @@ void PeerSet::badPeer(Peer::pointer ptr) void PeerSet::resetTimer() { mTimer.expires_from_now(boost::posix_time::seconds(mTimerInterval)); - mTimer.async_wait(getTimerLamba()); + mTimer.async_wait(boost::bind(&PeerSet::TimerEntry, pmDowncast(), boost::asio::placeholders::error)); } -void LedgerAcquire::LATimerEntry(boost::weak_ptr wptr, const boost::system::error_code& result) +void PeerSet::TimerEntry(boost::weak_ptr wptr, const boost::system::error_code& result) { if (result == boost::asio::error::operation_aborted) return; - boost::shared_ptr ptr = wptr.lock(); + boost::shared_ptr ptr = wptr.lock(); if (!!ptr) ptr->onTimer(); } @@ -74,10 +74,9 @@ LedgerAcquire::LedgerAcquire(const uint256& hash) : PeerSet(hash, LEDGER_ACQUIRE #endif } -boost::function LedgerAcquire::getTimerLamba() +boost::weak_ptr LedgerAcquire::pmDowncast() { - return boost::bind(&LedgerAcquire::LATimerEntry, boost::weak_ptr(shared_from_this()), - boost::asio::placeholders::error); + return boost::shared_polymorphic_downcast(shared_from_this()); } void LedgerAcquire::done() diff --git a/src/LedgerAcquire.h b/src/LedgerAcquire.h index 8d75ea7d3..3fb7c0c5a 100644 --- a/src/LedgerAcquire.h +++ b/src/LedgerAcquire.h @@ -37,10 +37,14 @@ public: protected: virtual void newPeer(Peer::pointer) = 0; - virtual boost::function getTimerLamba() = 0; + virtual void onTimer(void) = 0; + virtual boost::weak_ptr pmDowncast() = 0; void setComplete() { mComplete = true; } void setFailed() { mFailed = true; } + +private: + static void TimerEntry(boost::weak_ptr, const boost::system::error_code& result); }; class LedgerAcquire : public PeerSet, public boost::enable_shared_from_this @@ -61,8 +65,8 @@ protected: void sendRequest(boost::shared_ptr message, Peer::pointer peer); void newPeer(Peer::pointer peer) { trigger(peer); } void trigger(Peer::pointer); - virtual boost::function getTimerLamba(); - static void LATimerEntry(boost::weak_ptr, const boost::system::error_code&); + + boost::weak_ptr pmDowncast(); public: LedgerAcquire(const uint256& hash);