2009-04-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>

Added forEachMemFunSH(). Use it in BitTorrent event dispatch.
	* src/DefaultBtMessageDispatcher.cc
	* src/a2algo.h
pull/1/head
Tatsuhiro Tsujikawa 2009-04-25 17:01:29 +00:00
parent e385c68f52
commit 8a1d530336
3 changed files with 24 additions and 8 deletions

View File

@ -1,3 +1,9 @@
2009-04-26 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added forEachMemFunSH(). Use it in BitTorrent event dispatch.
* src/DefaultBtMessageDispatcher.cc
* src/a2algo.h
2009-04-25 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net> 2009-04-25 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Removed ExtendedMessagingAware. Instead of using inheritance, Removed ExtendedMessagingAware. Instead of using inheritance,

View File

@ -51,6 +51,7 @@
#include "LogFactory.h" #include "LogFactory.h"
#include "Logger.h" #include "Logger.h"
#include "a2functional.h" #include "a2functional.h"
#include "a2algo.h"
#include "RequestGroupMan.h" #include "RequestGroupMan.h"
#include "RequestGroup.h" #include "RequestGroup.h"
@ -119,9 +120,9 @@ void DefaultBtMessageDispatcher::doCancelSendingPieceAction(size_t index, uint32
BtCancelSendingPieceEvent event(index, begin, length); BtCancelSendingPieceEvent event(index, begin, length);
BtMessages tempQueue = messageQueue; BtMessages tempQueue = messageQueue;
std::for_each(tempQueue.begin(), tempQueue.end(),
std::bind2nd(mem_fun_sh(&BtMessage::onCancelSendingPieceEvent), forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
event)); &BtMessage::onCancelSendingPieceEvent, event);
} }
// Cancel sending piece message to peer. // Cancel sending piece message to peer.
@ -168,9 +169,8 @@ void DefaultBtMessageDispatcher::doAbortOutstandingRequestAction(const PieceHand
BtAbortOutstandingRequestEvent event(piece); BtAbortOutstandingRequestEvent event(piece);
BtMessages tempQueue = messageQueue; BtMessages tempQueue = messageQueue;
std::for_each(tempQueue.begin(), tempQueue.end(), forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
std::bind2nd(mem_fun_sh(&BtMessage::onAbortOutstandingRequestEvent), &BtMessage::onAbortOutstandingRequestEvent, event);
event));
} }
class ProcessChokedRequestSlot { class ProcessChokedRequestSlot {
@ -233,8 +233,8 @@ void DefaultBtMessageDispatcher::doChokingAction()
BtChokingEvent event; BtChokingEvent event;
BtMessages tempQueue = messageQueue; BtMessages tempQueue = messageQueue;
std::for_each(tempQueue.begin(), tempQueue.end(), forEachMemFunSH(tempQueue.begin(), tempQueue.end(),
std::bind2nd(mem_fun_sh(&BtMessage::onChokingEvent), event)); &BtMessage::onChokingEvent, event);
} }
class ProcessStaleRequestSlot { class ProcessStaleRequestSlot {

View File

@ -84,6 +84,16 @@ std::pair<InputIterator, size_t> max_sequence(InputIterator first,
return std::pair<InputIterator, size_t>(maxfirst, maxlen); return std::pair<InputIterator, size_t>(maxfirst, maxlen);
} }
template<typename InputIterator, typename R, typename C, typename A,
typename ACompat>
static void forEachMemFunSH(InputIterator first, InputIterator last,
R (C::*f)(A), ACompat arg)
{
for(; first != last; ++first) {
((*first).get()->*f)(arg);
}
}
} // namespace aria2 } // namespace aria2
#endif // _D_A2_ALGO_H_ #endif // _D_A2_ALGO_H_