diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-11-16 04:25:24 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2008-11-16 04:25:24 +0000 |
| commit | 9b71a5d0b55c5f840298a3385f52a71509dce02b (patch) | |
| tree | edf254e46746e631b2ef4d1dc8558114eec92aeb /src | |
| parent | a3bfe5c504d2c2f9594632647173b7108081ae97 (diff) | |
2008-11-15 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Given custom random number generator to std::random_shuffle.
* src/AnnounceList.cc
* src/BtLeecherStateChoke.cc
* src/BtSeederStateChoke.cc
* src/DefaultBtRequestFactory.cc
* src/MetalinkEntry.cc
* src/RarestPieceSelector.cc
* src/SimpleRandomizer.cc
* src/SimpleRandomizer.h
Diffstat (limited to 'src')
| -rw-r--r-- | src/AnnounceList.cc | 8 | ||||
| -rw-r--r-- | src/BtLeecherStateChoke.cc | 11 | ||||
| -rw-r--r-- | src/BtSeederStateChoke.cc | 5 | ||||
| -rw-r--r-- | src/DefaultBtRequestFactory.cc | 4 | ||||
| -rw-r--r-- | src/MetalinkEntry.cc | 8 | ||||
| -rw-r--r-- | src/RarestPieceSelector.cc | 6 | ||||
| -rw-r--r-- | src/SimpleRandomizer.cc | 9 | ||||
| -rw-r--r-- | src/SimpleRandomizer.h | 6 |
8 files changed, 43 insertions, 14 deletions
diff --git a/src/AnnounceList.cc b/src/AnnounceList.cc index 6629133b..ffdba076 100644 --- a/src/AnnounceList.cc +++ b/src/AnnounceList.cc @@ -33,10 +33,13 @@ */ /* copyright --> */ #include "AnnounceList.h" + +#include <algorithm> + #include "List.h" #include "Data.h" #include "A2STR.h" -#include <algorithm> +#include "SimpleRandomizer.h" namespace aria2 { @@ -238,7 +241,8 @@ void AnnounceList::shuffle() { for(AnnounceTiers::iterator itr = tiers.begin(); itr != tiers.end(); itr++) { std::deque<std::string>& urls = (*itr)->urls; - random_shuffle(urls.begin(), urls.end()); + std::random_shuffle(urls.begin(), urls.end(), + *(SimpleRandomizer::getInstance().get())); } } diff --git a/src/BtLeecherStateChoke.cc b/src/BtLeecherStateChoke.cc index f72a4c35..71933c9c 100644 --- a/src/BtLeecherStateChoke.cc +++ b/src/BtLeecherStateChoke.cc @@ -33,11 +33,14 @@ */ /* copyright --> */ #include "BtLeecherStateChoke.h" + +#include <algorithm> + #include "Peer.h" #include "Logger.h" #include "LogFactory.h" #include "a2time.h" -#include <algorithm> +#include "SimpleRandomizer.h" namespace aria2 { @@ -101,7 +104,8 @@ void BtLeecherStateChoke::plannedOptimisticUnchoke(std::deque<Peer*>& peers) std::deque<Peer*>::iterator i = std::partition(peers.begin(), peers.end(), PeerFilter(true, true)); if(i != peers.begin()) { - std::random_shuffle(peers.begin(), i); + std::random_shuffle(peers.begin(), i, + *(SimpleRandomizer::getInstance().get())); (*peers.begin())->optUnchoking(true); _logger->info("POU: %s", (*peers.begin())->ipaddr.c_str()); } @@ -130,7 +134,8 @@ void BtLeecherStateChoke::regularUnchoke(std::deque<Peer*>& peers) } } if(fastOptUnchoker) { - std::random_shuffle(peerIter, peers.end()); + std::random_shuffle(peerIter, peers.end(), + *(SimpleRandomizer::getInstance().get())); for(std::deque<Peer*>::iterator i = peerIter; i != peers.end(); ++i) { if((*i)->peerInterested()) { (*i)->optUnchoking(true); diff --git a/src/BtSeederStateChoke.cc b/src/BtSeederStateChoke.cc index fe13c191..539df5e8 100644 --- a/src/BtSeederStateChoke.cc +++ b/src/BtSeederStateChoke.cc @@ -47,6 +47,7 @@ #include "Logger.h" #include "LogFactory.h" #include "a2time.h" +#include "SimpleRandomizer.h" namespace aria2 { @@ -113,7 +114,9 @@ void BtSeederStateChoke::unchoke(std::deque<Peer*>& peers) (*r)->calculateUploadSpeed(now)); } if(_round == 2 && r != peers.end()) { - std::random_shuffle(r, peers.end()); + std::random_shuffle(r, peers.end(), + *(SimpleRandomizer::getInstance().get())); + // TODO Is r invalidated here? (*r)->optUnchoking(true); _logger->info("POU: %s", (*r)->ipaddr.c_str()); } diff --git a/src/DefaultBtRequestFactory.cc b/src/DefaultBtRequestFactory.cc index 87fbd411..2a272437 100644 --- a/src/DefaultBtRequestFactory.cc +++ b/src/DefaultBtRequestFactory.cc @@ -46,6 +46,7 @@ #include "BtMessageFactory.h" #include "BtMessage.h" #include "a2functional.h" +#include "SimpleRandomizer.h" namespace aria2 { @@ -171,7 +172,8 @@ void DefaultBtRequestFactory::createRequestMessagesOnEndGame PieceHandle& piece = *itr; std::deque<size_t> missingBlockIndexes; piece->getAllMissingBlockIndexes(missingBlockIndexes); - std::random_shuffle(missingBlockIndexes.begin(), missingBlockIndexes.end()); + std::random_shuffle(missingBlockIndexes.begin(), missingBlockIndexes.end(), + *(SimpleRandomizer::getInstance().get())); for(std::deque<size_t>::const_iterator bitr = missingBlockIndexes.begin(); bitr != missingBlockIndexes.end() && requests.size() < max; bitr++) { size_t blockIndex = *bitr; diff --git a/src/MetalinkEntry.cc b/src/MetalinkEntry.cc index 04fc0abc..60bebcb9 100644 --- a/src/MetalinkEntry.cc +++ b/src/MetalinkEntry.cc @@ -33,6 +33,9 @@ */ /* copyright --> */ #include "MetalinkEntry.h" + +#include <algorithm> + #include "MetalinkResource.h" #include "FileEntry.h" #include "Util.h" @@ -42,7 +45,7 @@ # include "ChunkChecksum.h" #endif // ENABLE_MESSAGE_DIGEST #include "Signature.h" -#include <algorithm> +#include "SimpleRandomizer.h" namespace aria2 { @@ -138,7 +141,8 @@ public: }; void MetalinkEntry::reorderResourcesByPreference() { - std::random_shuffle(resources.begin(), resources.end()); + std::random_shuffle(resources.begin(), resources.end(), + *(SimpleRandomizer::getInstance().get())); std::sort(resources.begin(), resources.end(), PrefOrder()); } diff --git a/src/RarestPieceSelector.cc b/src/RarestPieceSelector.cc index 37d2c20d..efe79774 100644 --- a/src/RarestPieceSelector.cc +++ b/src/RarestPieceSelector.cc @@ -33,8 +33,11 @@ */ /* copyright --> */ #include "RarestPieceSelector.h" + #include <algorithm> +#include "SimpleRandomizer.h" + namespace aria2 { PieceStat::PieceStat(size_t index):_order(0), _index(index), _count(0) {} @@ -101,7 +104,8 @@ RarestPieceSelector::RarestPieceSelector(size_t pieceNum, bool randomShuffle): _sortedPieceStats = _pieceStats; // we need some randomness in ordering. if(randomShuffle) { - std::random_shuffle(_sortedPieceStats.begin(), _sortedPieceStats.end()); + std::random_shuffle(_sortedPieceStats.begin(), _sortedPieceStats.end(), + *(SimpleRandomizer::getInstance().get())); } { size_t order = 0; diff --git a/src/SimpleRandomizer.cc b/src/SimpleRandomizer.cc index 760dafb5..f3aba6bc 100644 --- a/src/SimpleRandomizer.cc +++ b/src/SimpleRandomizer.cc @@ -40,9 +40,9 @@ namespace aria2 { -SharedHandle<Randomizer> SimpleRandomizer::_randomizer; +SharedHandle<SimpleRandomizer> SimpleRandomizer::_randomizer; -SharedHandle<Randomizer> SimpleRandomizer::getInstance() +SharedHandle<SimpleRandomizer> SimpleRandomizer::getInstance() { if(_randomizer.isNull()) { _randomizer.reset(new SimpleRandomizer()); @@ -74,4 +74,9 @@ long int SimpleRandomizer::getRandomNumber(long int to) return(int32_t)(((double)to)*getRandomNumber()/(getMaxRandomNumber()+1.0)); } +long int SimpleRandomizer::operator()(long int to) +{ + return getRandomNumber(to); +} + } // namespace aria2 diff --git a/src/SimpleRandomizer.h b/src/SimpleRandomizer.h index 4d732fbc..62b4f79c 100644 --- a/src/SimpleRandomizer.h +++ b/src/SimpleRandomizer.h @@ -41,12 +41,12 @@ namespace aria2 { class SimpleRandomizer : public Randomizer { private: - static SharedHandle<Randomizer> _randomizer; + static SharedHandle<SimpleRandomizer> _randomizer; SimpleRandomizer(); public: - static SharedHandle<Randomizer> getInstance(); + static SharedHandle<SimpleRandomizer> getInstance(); static void init(); @@ -60,6 +60,8 @@ public: * Returns random number in [0, to). */ virtual long int getRandomNumber(long int to); + + long int operator()(long int to); }; } // namespace aria2 |
