diff --git a/src/cpp/ripple/HashedObject.cpp b/src/cpp/ripple/HashedObject.cpp index aea25c3b0f..7e97602a8c 100644 --- a/src/cpp/ripple/HashedObject.cpp +++ b/src/cpp/ripple/HashedObject.cpp @@ -52,7 +52,7 @@ bool HashedObjectStore::store(HashedObjectType type, uint32 index, { mWritePending = true; theApp->getJobQueue().addJob(jtWRITE, "HashedObject::store", - boost::bind(&HashedObjectStore::bulkWrite, this)); + BIND_TYPE(&HashedObjectStore::bulkWrite, this)); } } // else diff --git a/src/cpp/ripple/JobQueue.cpp b/src/cpp/ripple/JobQueue.cpp index 45114723bd..8e2d618a6e 100644 --- a/src/cpp/ripple/JobQueue.cpp +++ b/src/cpp/ripple/JobQueue.cpp @@ -97,7 +97,7 @@ bool Job::operator<=(const Job& j) const return mJobIndex <= j.mJobIndex; } -void JobQueue::addJob(JobType type, const std::string& name, const boost::function& jobFunc) +void JobQueue::addJob(JobType type, const std::string& name, const FUNCTION_TYPE& jobFunc) { assert(type != jtINVALID); @@ -246,7 +246,7 @@ void JobQueue::setThreadCount(int c) while (mThreadCount < c) { ++mThreadCount; - boost::thread(boost::bind(&JobQueue::threadEntry, this)).detach(); + boost::thread(BIND_TYPE(&JobQueue::threadEntry, this)).detach(); } while (mThreadCount > c) { diff --git a/src/cpp/ripple/JobQueue.h b/src/cpp/ripple/JobQueue.h index 673499529b..705744db66 100644 --- a/src/cpp/ripple/JobQueue.h +++ b/src/cpp/ripple/JobQueue.h @@ -7,8 +7,8 @@ #include #include -#include #include +#include #include "../json/value.h" @@ -52,7 +52,7 @@ class Job protected: JobType mType; uint64 mJobIndex; - boost::function mJob; + FUNCTION_TYPE mJob; LoadEvent::pointer mLoadMonitor; std::string mName; @@ -63,7 +63,7 @@ public: Job(JobType type, uint64 index) : mType(type), mJobIndex(index) { ; } - Job(JobType type, const std::string& name, uint64 index, LoadMonitor& lm, const boost::function& job) + Job(JobType type, const std::string& name, uint64 index, LoadMonitor& lm, const FUNCTION_TYPE& job) : mType(type), mJobIndex(index), mJob(job), mName(name) { mLoadMonitor = boost::make_shared(boost::ref(lm), name, false); @@ -102,7 +102,7 @@ public: JobQueue(); - void addJob(JobType type, const std::string& name, const boost::function& job); + void addJob(JobType type, const std::string& name, const FUNCTION_TYPE& job); int getJobCount(JobType t); // Jobs waiting at this priority int getJobCountTotal(JobType t); // Jobs waiting plus running at this priority diff --git a/src/cpp/ripple/Ledger.cpp b/src/cpp/ripple/Ledger.cpp index 72ae3d5a18..2d689156e0 100644 --- a/src/cpp/ripple/Ledger.cpp +++ b/src/cpp/ripple/Ledger.cpp @@ -1540,7 +1540,7 @@ void Ledger::pendSave(bool fromConsensus) theApp->getJobQueue().addJob(fromConsensus ? jtPUBLEDGER : jtPUBOLDLEDGER, fromConsensus ? "Ledger::pendSave" : "Ledger::pendOldSave", - boost::bind(&Ledger::saveAcceptedLedger, shared_from_this(), _1, fromConsensus)); + BIND_TYPE(&Ledger::saveAcceptedLedger, shared_from_this(), P_1, fromConsensus)); } diff --git a/src/cpp/ripple/LedgerAcquire.cpp b/src/cpp/ripple/LedgerAcquire.cpp index 7db1a20afe..e6da90f82b 100644 --- a/src/cpp/ripple/LedgerAcquire.cpp +++ b/src/cpp/ripple/LedgerAcquire.cpp @@ -3,7 +3,6 @@ #include #include -#include #include "Application.h" #include "Log.h" @@ -72,14 +71,14 @@ void PeerSet::TimerEntry(boost::weak_ptr wptr, const boost::system::err { if (result == boost::asio::error::operation_aborted) return; - theApp->getJobQueue().addJob(jtLEDGER_DATA, "timerEntry", - boost::bind(&PeerSet::TimerJobEntry, _1, wptr)); -} - -void PeerSet::TimerJobEntry(Job&, boost::weak_ptr wptr) -{ boost::shared_ptr ptr = wptr.lock(); if (ptr) + theApp->getJobQueue().addJob(jtLEDGER_DATA, "timerEntry", + BIND_TYPE(&PeerSet::TimerJobEntry, P_1, ptr)); +} + +void PeerSet::TimerJobEntry(Job&, boost::shared_ptr ptr) +{ ptr->invokeOnTimer(); } @@ -254,7 +253,7 @@ void LedgerAcquire::done() assert(isComplete() || isFailed()); - std::vector< boost::function > triggers; + std::vector< FUNCTION_TYPE > triggers; { boost::recursive_mutex::scoped_lock sl(mLock); triggers.swap(mOnComplete); @@ -275,7 +274,7 @@ void LedgerAcquire::done() triggers[i](shared_from_this()); } -bool LedgerAcquire::addOnComplete(boost::function trigger) +bool LedgerAcquire::addOnComplete(FUNCTION_TYPE trigger) { boost::recursive_mutex::scoped_lock sl(mLock); if (isDone()) diff --git a/src/cpp/ripple/LedgerAcquire.h b/src/cpp/ripple/LedgerAcquire.h index cb38f797f2..c255ef6b7e 100644 --- a/src/cpp/ripple/LedgerAcquire.h +++ b/src/cpp/ripple/LedgerAcquire.h @@ -75,7 +75,7 @@ protected: private: static void TimerEntry(boost::weak_ptr, const boost::system::error_code& result); - static void TimerJobEntry(Job&, boost::weak_ptr); + static void TimerJobEntry(Job&, boost::shared_ptr); }; class LedgerAcquire : @@ -91,7 +91,7 @@ protected: std::set mRecentTXNodes; std::set mRecentASNodes; - std::vector< boost::function > mOnComplete; + std::vector< FUNCTION_TYPE > mOnComplete; void done(); void onTimer(bool progress); @@ -112,7 +112,7 @@ public: void abort() { mAborted = true; } bool setAccept() { if (mAccept) return false; mAccept = true; return true; } - bool addOnComplete(boost::function); + bool addOnComplete(FUNCTION_TYPE); bool takeBase(const std::string& data); bool takeTxNode(const std::list& IDs, const std::list >& data, diff --git a/src/cpp/ripple/LedgerEntrySet.cpp b/src/cpp/ripple/LedgerEntrySet.cpp index b7e4141400..cdf9d30f30 100644 --- a/src/cpp/ripple/LedgerEntrySet.cpp +++ b/src/cpp/ripple/LedgerEntrySet.cpp @@ -529,7 +529,7 @@ TER LedgerEntrySet::dirAdd( uint64& uNodeDir, const uint256& uRootIndex, const uint256& uLedgerIndex, - boost::function fDescriber) + FUNCTION_TYPE fDescriber) { cLog(lsDEBUG) << boost::str(boost::format("dirAdd: uRootIndex=%s uLedgerIndex=%s") @@ -1195,7 +1195,7 @@ TER LedgerEntrySet::trustCreate( uLowNode, Ledger::getOwnerDirIndex(uLowAccountID), sleRippleState->getIndex(), - boost::bind(&Ledger::ownerDirDescriber, _1, uLowAccountID)); + BIND_TYPE(&Ledger::ownerDirDescriber, P_1, uLowAccountID)); if (tesSUCCESS == terResult) { @@ -1203,7 +1203,7 @@ TER LedgerEntrySet::trustCreate( uHighNode, Ledger::getOwnerDirIndex(uHighAccountID), sleRippleState->getIndex(), - boost::bind(&Ledger::ownerDirDescriber, _1, uHighAccountID)); + BIND_TYPE(&Ledger::ownerDirDescriber, P_1, uHighAccountID)); } if (tesSUCCESS == terResult) diff --git a/src/cpp/ripple/LedgerEntrySet.h b/src/cpp/ripple/LedgerEntrySet.h index 32b641e450..c326cc5389 100644 --- a/src/cpp/ripple/LedgerEntrySet.h +++ b/src/cpp/ripple/LedgerEntrySet.h @@ -2,7 +2,6 @@ #define __LEDGERENTRYSET__ #include -#include #include "SerializedLedger.h" #include "TransactionMeta.h" @@ -106,7 +105,7 @@ public: uint64& uNodeDir, // Node of entry. const uint256& uRootIndex, const uint256& uLedgerIndex, - boost::function fDescriber); + FUNCTION_TYPE fDescriber); TER dirDelete( const bool bKeepRoot, diff --git a/src/cpp/ripple/LedgerMaster.cpp b/src/cpp/ripple/LedgerMaster.cpp index 892d70822c..6aa52fa9be 100644 --- a/src/cpp/ripple/LedgerMaster.cpp +++ b/src/cpp/ripple/LedgerMaster.cpp @@ -197,7 +197,7 @@ bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& l { cLog(lsTRACE) << "Ledger hash found in database"; theApp->getJobQueue().addJob(jtPUBOLDLEDGER, "LedgerMaster::asyncAccept", - boost::bind(&LedgerMaster::asyncAccept, this, ledger)); + BIND_TYPE(&LedgerMaster::asyncAccept, this, ledger)); return true; } @@ -224,7 +224,7 @@ bool LedgerMaster::acquireMissingLedger(Ledger::ref origLedger, const uint256& l mMissingSeq = ledgerSeq; if (mMissingLedger->setAccept()) { - if (!mMissingLedger->addOnComplete(boost::bind(&LedgerMaster::missingAcquireComplete, this, _1))) + if (!mMissingLedger->addOnComplete(BIND_TYPE(&LedgerMaster::missingAcquireComplete, this, P_1))) theApp->getIOService().post(boost::bind(&LedgerMaster::missingAcquireComplete, this, mMissingLedger)); } @@ -554,7 +554,7 @@ void LedgerMaster::tryPublish() theApp->getOPs().clearNeedNetworkLedger(); mPubThread = true; theApp->getJobQueue().addJob(jtPUBLEDGER, "Ledger::pubThread", - boost::bind(&LedgerMaster::pubThread, this)); + BIND_TYPE(&LedgerMaster::pubThread, this)); } } diff --git a/src/cpp/ripple/LedgerMaster.h b/src/cpp/ripple/LedgerMaster.h index dfc8ef3aad..d2dc0c2d57 100644 --- a/src/cpp/ripple/LedgerMaster.h +++ b/src/cpp/ripple/LedgerMaster.h @@ -18,7 +18,7 @@ class LedgerMaster { public: - typedef boost::function callback; + typedef FUNCTION_TYPE callback; protected: boost::recursive_mutex mLock; diff --git a/src/cpp/ripple/NetworkOPs.cpp b/src/cpp/ripple/NetworkOPs.cpp index 9bc3745b6f..67c2a8908e 100644 --- a/src/cpp/ripple/NetworkOPs.cpp +++ b/src/cpp/ripple/NetworkOPs.cpp @@ -1,7 +1,6 @@ #include "NetworkOPs.h" -#include #include #include "utils.h" @@ -1380,7 +1379,7 @@ void NetworkOPs::reportFeeChange() (theApp->getFeeTrack().getLoadFactor() == mLastLoadFactor)) return; - theApp->getJobQueue().addJob(jtCLIENT, "reportFeeChange->pubServer", boost::bind(&NetworkOPs::pubServer, this)); + theApp->getJobQueue().addJob(jtCLIENT, "reportFeeChange->pubServer", BIND_TYPE(&NetworkOPs::pubServer, this)); } Json::Value NetworkOPs::transJson(const SerializedTransaction& stTxn, TER terResult, bool bValidated, diff --git a/src/cpp/ripple/OfferCreateTransactor.cpp b/src/cpp/ripple/OfferCreateTransactor.cpp index f3251c0658..afff906994 100644 --- a/src/cpp/ripple/OfferCreateTransactor.cpp +++ b/src/cpp/ripple/OfferCreateTransactor.cpp @@ -534,7 +534,7 @@ TER OfferCreateTransactor::doApply() // Add offer to owner's directory. terResult = lesActive.dirAdd(uOwnerNode, Ledger::getOwnerDirIndex(mTxnAccountID), uLedgerIndex, - boost::bind(&Ledger::qualityDirDescriber, _1, saTakerPays.getCurrency(), uPaysIssuerID, + BIND_TYPE(&Ledger::qualityDirDescriber, P_1, saTakerPays.getCurrency(), uPaysIssuerID, saTakerGets.getCurrency(), uGetsIssuerID, uRate)); @@ -555,7 +555,7 @@ TER OfferCreateTransactor::doApply() // Add offer to order book. terResult = lesActive.dirAdd(uBookNode, uDirectory, uLedgerIndex, - boost::bind(&Ledger::qualityDirDescriber, _1, saTakerPays.getCurrency(), uPaysIssuerID, + BIND_TYPE(&Ledger::qualityDirDescriber, P_1, saTakerPays.getCurrency(), uPaysIssuerID, saTakerGets.getCurrency(), uGetsIssuerID, uRate)); } diff --git a/src/cpp/ripple/Peer.cpp b/src/cpp/ripple/Peer.cpp index 51cb14a498..752b9c0e13 100644 --- a/src/cpp/ripple/Peer.cpp +++ b/src/cpp/ripple/Peer.cpp @@ -870,7 +870,7 @@ void Peer::recvTransaction(ripple::TMTransaction& packet) } theApp->getJobQueue().addJob(jtTRANSACTION, "recvTransction->checkTransaction", - boost::bind(&checkTransaction, _1, flags, stx, boost::weak_ptr(shared_from_this()))); + BIND_TYPE(&checkTransaction, P_1, flags, stx, boost::weak_ptr(shared_from_this()))); #ifndef TRUST_NETWORK } @@ -931,7 +931,7 @@ static void checkPropose(Job& job, boost::shared_ptr packe if (isTrusted) { theApp->getJobQueue().addJob(jtPROPOSAL_t, "trustedProposal", - boost::bind(&NetworkOPs::processTrustedProposal, &theApp->getOPs(), + BIND_TYPE(&NetworkOPs::processTrustedProposal, &theApp->getOPs(), proposal, packet, nodePublic, prevLedger, sigGood)); } else if (sigGood && (prevLedger == consensusLCL)) @@ -1002,7 +1002,7 @@ void Peer::recvPropose(const boost::shared_ptr& packet) set.proposeseq(), proposeHash, set.closetime(), signerPublic, suppression); theApp->getJobQueue().addJob(isTrusted ? jtPROPOSAL_t : jtPROPOSAL_ut, "recvPropose->checkPropose", - boost::bind(&checkPropose, _1, packet, proposal, consensusLCL, + BIND_TYPE(&checkPropose, P_1, packet, proposal, consensusLCL, mNodePublic, boost::weak_ptr(shared_from_this()))); } @@ -1078,7 +1078,7 @@ void Peer::recvValidation(const boost::shared_ptr& packet) bool isTrusted = theApp->getUNL().nodeInUNL(val->getSignerPublic()); theApp->getJobQueue().addJob(isTrusted ? jtVALIDATION_t : jtVALIDATION_ut, "recvValidation->checkValidation", - boost::bind(&checkValidation, _1, val, signingHash, isTrusted, packet, + BIND_TYPE(&checkValidation, P_1, val, signingHash, isTrusted, packet, boost::weak_ptr(shared_from_this()))); } #ifndef TRUST_NETWORK @@ -1315,7 +1315,7 @@ void Peer::recvProofWork(ripple::TMProofWork& packet) } theApp->getJobQueue().addJob(jtPROOFWORK, "recvProof->doProof", - boost::bind(&Peer::doProofOfWork, _1, boost::weak_ptr(shared_from_this()), pow)); + BIND_TYPE(&Peer::doProofOfWork, P_1, boost::weak_ptr(shared_from_this()), pow)); return; } @@ -1666,8 +1666,8 @@ void Peer::recvLedger(const boost::shared_ptr& packet_ptr) } theApp->getJobQueue().addJob(jtLEDGER_DATA, "gotLedgerData", - boost::bind(&LedgerAcquireMaster::gotLedgerData, &theApp->getMasterLedgerAcquire(), - _1, packet_ptr, boost::weak_ptr(shared_from_this()))); + BIND_TYPE(&LedgerAcquireMaster::gotLedgerData, &theApp->getMasterLedgerAcquire(), + P_1, packet_ptr, boost::weak_ptr(shared_from_this()))); } bool Peer::hasLedger(const uint256& hash) const diff --git a/src/cpp/ripple/TransactionQueue.h b/src/cpp/ripple/TransactionQueue.h index 5f8ef69149..ae7c997de9 100644 --- a/src/cpp/ripple/TransactionQueue.h +++ b/src/cpp/ripple/TransactionQueue.h @@ -21,7 +21,7 @@ class TXQEntry public: typedef boost::shared_ptr pointer; typedef const boost::shared_ptr& ref; - typedef boost::function stCallback; // must complete immediately + typedef FUNCTION_TYPE stCallback; // must complete immediately protected: Transaction::pointer mTxn; diff --git a/src/cpp/ripple/ValidationCollection.cpp b/src/cpp/ripple/ValidationCollection.cpp index cdbb2818e1..a3bdb951bb 100644 --- a/src/cpp/ripple/ValidationCollection.cpp +++ b/src/cpp/ripple/ValidationCollection.cpp @@ -297,7 +297,7 @@ void ValidationCollection::condWrite() return; mWriting = true; theApp->getJobQueue().addJob(jtWRITE, "ValidationCollection::doWrite", - boost::bind(&ValidationCollection::doWrite, this, _1)); + BIND_TYPE(&ValidationCollection::doWrite, this, P_1)); } void ValidationCollection::doWrite(Job&) diff --git a/src/cpp/ripple/WSHandler.h b/src/cpp/ripple/WSHandler.h index 32976f714a..1f2d2f59bd 100644 --- a/src/cpp/ripple/WSHandler.h +++ b/src/cpp/ripple/WSHandler.h @@ -153,13 +153,13 @@ public: // Must be done without holding the websocket send lock theApp->getJobQueue().addJob(jtCLIENT, "WSClient::destroy", - boost::bind(&WSConnection::destroy, ptr)); + BIND_TYPE(&WSConnection::destroy, ptr)); } void on_message(connection_ptr cpClient, message_ptr mpMessage) { theApp->getJobQueue().addJob(jtCLIENT, "WSClient::command", - boost::bind(&WSServerHandler::do_message, this, _1, cpClient, mpMessage)); + BIND_TYPE(&WSServerHandler::do_message, this, P_1, cpClient, mpMessage)); } void do_message(Job& job, connection_ptr cpClient, message_ptr mpMessage) diff --git a/src/cpp/ripple/utils.h b/src/cpp/ripple/utils.h index 9938a26d35..6dcea25209 100644 --- a/src/cpp/ripple/utils.h +++ b/src/cpp/ripple/utils.h @@ -289,13 +289,28 @@ bool parseUrl(const std::string& strUrl, std::string& strScheme, std::string& st #if (!defined(FORCE_NO_C11X) && (__cplusplus > 201100L)) || defined(FORCE_C11X) #define C11X -#define UPTR_T std::unique_ptr -#define MOVE_P(p) std::move(p) +#include +#define UPTR_T std::unique_ptr +#define MOVE_P(p) std::move(p) +#define BIND_TYPE std::bind +#define FUNCTION_TYPE std::function +#define P_1 std::placeholders::_1 +#define P_2 std::placeholders::_2 +#define P_3 std::placeholders::_3 +#define P_4 std::placeholders::_4 #else -#define UPTR_T std::auto_ptr -#define MOVE_P(p) (p) +#include +#include +#define UPTR_T std::auto_ptr +#define MOVE_P(p) (p) +#define BIND_TYPE boost::bind +#define FUNCTION_TYPE boost::function +#define P_1 _1 +#define P_2 _2 +#define P_3 _3 +#define P_4 _4 #endif