From 50dcd6394c645fdd9e7fbe879f511888bfa88423 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 22 Jun 2013 15:49:41 +0900 Subject: [PATCH] Use std::unique_ptr instead of std::shared_ptr --- src/AnnounceList.cc | 2 +- src/BtLeecherStateChoke.cc | 4 ++-- src/BtSeederStateChoke.cc | 2 +- src/DHTConnectionImpl.cc | 2 +- src/DefaultBtAnnounce.cc | 3 +-- src/DefaultBtAnnounce.h | 4 ++-- src/DefaultBtRequestFactory.cc | 2 +- src/MetalinkEntry.cc | 2 +- src/MultiFileAllocationIterator.h | 2 +- src/PeerListenCommand.cc | 2 +- src/PieceStatMan.cc | 2 +- src/RequestGroup.cc | 2 +- src/SimpleRandomizer.cc | 6 +++--- src/SimpleRandomizer.h | 4 ++-- src/a2functional.h | 6 ++++++ src/util.cc | 2 +- test/DefaultBtAnnounceTest.cc | 17 ++++++++++------- 17 files changed, 36 insertions(+), 28 deletions(-) diff --git a/src/AnnounceList.cc b/src/AnnounceList.cc index f21634aa..4c1e1b32 100644 --- a/src/AnnounceList.cc +++ b/src/AnnounceList.cc @@ -227,7 +227,7 @@ void AnnounceList::shuffle() { tiers_.begin(), eoi = tiers_.end(); itr != eoi; ++itr) { std::deque& urls = (*itr)->urls; std::random_shuffle(urls.begin(), urls.end(), - *(SimpleRandomizer::getInstance().get())); + *SimpleRandomizer::getInstance()); } } diff --git a/src/BtLeecherStateChoke.cc b/src/BtLeecherStateChoke.cc index 7707ea55..52a9139f 100644 --- a/src/BtLeecherStateChoke.cc +++ b/src/BtLeecherStateChoke.cc @@ -151,7 +151,7 @@ void BtLeecherStateChoke::plannedOptimisticUnchoke PeerFilter(true, true)); if(i != peerEntries.begin()) { std::random_shuffle(peerEntries.begin(), i, - *(SimpleRandomizer::getInstance().get())); + *SimpleRandomizer::getInstance()); (*peerEntries.begin()).enableOptUnchoking(); A2_LOG_INFO(fmt("POU: %s", (*peerEntries.begin()).getPeer()->getIPAddress().c_str())); @@ -183,7 +183,7 @@ void BtLeecherStateChoke::regularUnchoke(std::vector& peerEntries) } if(fastOptUnchoker) { std::random_shuffle(peerIter, peerEntries.end(), - *(SimpleRandomizer::getInstance().get())); + *SimpleRandomizer::getInstance()); for(std::vector::iterator i = peerIter, eoi = peerEntries.end(); i != eoi; ++i) { if((*i).getPeer()->peerInterested()) { diff --git a/src/BtSeederStateChoke.cc b/src/BtSeederStateChoke.cc index 7b1439f8..54c936f3 100644 --- a/src/BtSeederStateChoke.cc +++ b/src/BtSeederStateChoke.cc @@ -138,7 +138,7 @@ void BtSeederStateChoke::unchoke std::mem_fun_ref(&PeerEntry::disableOptUnchoking)); if(r != peers.end()) { std::random_shuffle(r, peers.end(), - *(SimpleRandomizer::getInstance().get())); + *SimpleRandomizer::getInstance()); (*r).getPeer()->optUnchoking(true); A2_LOG_INFO(fmt("POU: %s", (*r).getPeer()->getIPAddress().c_str())); } diff --git a/src/DHTConnectionImpl.cc b/src/DHTConnectionImpl.cc index 8129b6bc..6ff05140 100644 --- a/src/DHTConnectionImpl.cc +++ b/src/DHTConnectionImpl.cc @@ -62,7 +62,7 @@ bool DHTConnectionImpl::bind ports.push_back(sgl.next()); } std::random_shuffle(ports.begin(), ports.end(), - *SimpleRandomizer::getInstance().get()); + *SimpleRandomizer::getInstance()); for(std::vector::const_iterator i = ports.begin(), eoi = ports.end(); i != eoi; ++i) { port = *i; diff --git a/src/DefaultBtAnnounce.cc b/src/DefaultBtAnnounce.cc index f371def2..cafbd6d8 100644 --- a/src/DefaultBtAnnounce.cc +++ b/src/DefaultBtAnnounce.cc @@ -384,8 +384,7 @@ void DefaultBtAnnounce::shuffleAnnounce() { announceList_.shuffle(); } -void DefaultBtAnnounce::setRandomizer -(const std::shared_ptr& randomizer) +void DefaultBtAnnounce::setRandomizer(Randomizer* randomizer) { randomizer_ = randomizer; } diff --git a/src/DefaultBtAnnounce.h b/src/DefaultBtAnnounce.h index 7c2f9eb8..5284a1e8 100644 --- a/src/DefaultBtAnnounce.h +++ b/src/DefaultBtAnnounce.h @@ -61,7 +61,7 @@ private: AnnounceList announceList_; std::string trackerId_; const Option* option_; - std::shared_ptr randomizer_; + Randomizer* randomizer_; std::shared_ptr btRuntime_; std::shared_ptr pieceStorage_; std::shared_ptr peerStorage_; @@ -136,7 +136,7 @@ public: tcpPort_ = port; } - void setRandomizer(const std::shared_ptr& randomizer); + void setRandomizer(Randomizer* randomizer); time_t getInterval() const { diff --git a/src/DefaultBtRequestFactory.cc b/src/DefaultBtRequestFactory.cc index 449afba7..337c740d 100644 --- a/src/DefaultBtRequestFactory.cc +++ b/src/DefaultBtRequestFactory.cc @@ -209,7 +209,7 @@ void DefaultBtRequestFactory::createRequestMessagesOnEndGame } } std::random_shuffle(missingBlockIndexes.begin(), missingBlockIndexes.end(), - *(SimpleRandomizer::getInstance().get())); + *SimpleRandomizer::getInstance()); for(std::vector::const_iterator bitr = missingBlockIndexes.begin(), eoi2 = missingBlockIndexes.end(); bitr != eoi2 && requests.size() < max; ++bitr) { diff --git a/src/MetalinkEntry.cc b/src/MetalinkEntry.cc index e41b5d44..2ebcb144 100644 --- a/src/MetalinkEntry.cc +++ b/src/MetalinkEntry.cc @@ -152,7 +152,7 @@ public: void MetalinkEntry::reorderResourcesByPriority() { std::random_shuffle(resources.begin(), resources.end(), - *(SimpleRandomizer::getInstance().get())); + *SimpleRandomizer::getInstance()); std::sort(resources.begin(), resources.end(), PriorityHigher()); } diff --git a/src/MultiFileAllocationIterator.h b/src/MultiFileAllocationIterator.h index 8780c8d1..388b891f 100644 --- a/src/MultiFileAllocationIterator.h +++ b/src/MultiFileAllocationIterator.h @@ -50,7 +50,7 @@ class MultiFileAllocationIterator:public FileAllocationIterator private: MultiDiskAdaptor* diskAdaptor_; std::deque > entries_; - std::shared_ptr fileAllocationIterator_; + std::unique_ptr fileAllocationIterator_; public: MultiFileAllocationIterator(MultiDiskAdaptor* diskAdaptor); diff --git a/src/PeerListenCommand.cc b/src/PeerListenCommand.cc index c70a8590..365e4c96 100644 --- a/src/PeerListenCommand.cc +++ b/src/PeerListenCommand.cc @@ -71,7 +71,7 @@ bool PeerListenCommand::bindPort(uint16_t& port, SegList& sgl) ports.push_back(sgl.next()); } std::random_shuffle(ports.begin(), ports.end(), - *SimpleRandomizer::getInstance().get()); + *SimpleRandomizer::getInstance()); const int ipv = (family_ == AF_INET) ? 4 : 6; for(std::vector::const_iterator i = ports.begin(), eoi = ports.end(); i != eoi; ++i) { diff --git a/src/PieceStatMan.cc b/src/PieceStatMan.cc index e869cffd..de467482 100644 --- a/src/PieceStatMan.cc +++ b/src/PieceStatMan.cc @@ -52,7 +52,7 @@ PieceStatMan::PieceStatMan(size_t pieceNum, bool randomShuffle): // we need some randomness in ordering. if(randomShuffle) { std::random_shuffle(order_.begin(), order_.end(), - *(SimpleRandomizer::getInstance().get())); + *SimpleRandomizer::getInstance()); } } diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc index d62c8431..66bc2898 100644 --- a/src/RequestGroup.cc +++ b/src/RequestGroup.cc @@ -617,7 +617,7 @@ void RequestGroup::initPieceStorage() downloadContext_->getPieceLength()); if(!result.empty()) { std::random_shuffle(result.begin(), result.end(), - *(SimpleRandomizer::getInstance().get())); + *SimpleRandomizer::getInstance()); std::shared_ptr priSelector (new PriorityPieceSelector(ps->getPieceSelector())); priSelector->setPriorityPiece(result.begin(), result.end()); diff --git a/src/SimpleRandomizer.cc b/src/SimpleRandomizer.cc index 72ead48b..dc558e3d 100644 --- a/src/SimpleRandomizer.cc +++ b/src/SimpleRandomizer.cc @@ -43,14 +43,14 @@ namespace aria2 { -std::shared_ptr SimpleRandomizer::randomizer_; +std::unique_ptr SimpleRandomizer::randomizer_; -const std::shared_ptr& SimpleRandomizer::getInstance() +SimpleRandomizer* SimpleRandomizer::getInstance() { if(!randomizer_) { randomizer_.reset(new SimpleRandomizer()); } - return randomizer_; + return randomizer_.get(); } void SimpleRandomizer::init() diff --git a/src/SimpleRandomizer.h b/src/SimpleRandomizer.h index 63309fb0..457bdcb1 100644 --- a/src/SimpleRandomizer.h +++ b/src/SimpleRandomizer.h @@ -47,7 +47,7 @@ namespace aria2 { class SimpleRandomizer : public Randomizer { private: - static std::shared_ptr randomizer_; + static std::unique_ptr randomizer_; #ifdef __MINGW32__ HCRYPTPROV cryProvider_; @@ -56,7 +56,7 @@ private: SimpleRandomizer(); public: - static const std::shared_ptr& getInstance(); + static SimpleRandomizer* getInstance(); static void init(); diff --git a/src/a2functional.h b/src/a2functional.h index a1cd9749..871db2de 100644 --- a/src/a2functional.h +++ b/src/a2functional.h @@ -330,6 +330,12 @@ struct RefLess { } }; +template +std::unique_ptr make_unique(U&&... u) +{ + return std::unique_ptr(new T(std::forward(u)...)); +} + } // namespace aria2 #endif // D_A2_FUNCTIONAL_H diff --git a/src/util.cc b/src/util.cc index 3eac6c38..ae348fef 100644 --- a/src/util.cc +++ b/src/util.cc @@ -1506,7 +1506,7 @@ std::vector > createIndexPaths(std::istream& i) namespace { void generateRandomDataRandom(unsigned char* data, size_t length) { - const std::shared_ptr& rd = SimpleRandomizer::getInstance(); + SimpleRandomizer* rd = SimpleRandomizer::getInstance(); for(size_t i = 0; i < length; ++i) { data[i] = static_cast(rd->getRandomNumber(256)); } diff --git a/test/DefaultBtAnnounceTest.cc b/test/DefaultBtAnnounceTest.cc index 455f46e4..2d9c3c09 100644 --- a/test/DefaultBtAnnounceTest.cc +++ b/test/DefaultBtAnnounceTest.cc @@ -43,6 +43,7 @@ private: std::shared_ptr pieceStorage_; std::shared_ptr peerStorage_; std::shared_ptr btRuntime_; + std::unique_ptr randomizer_; Option* option_; public: void setUp() { @@ -73,6 +74,8 @@ public: peerStorage_.reset(new MockPeerStorage()); btRuntime_.reset(new BtRuntime()); + + randomizer_.reset(new FixedNumberRandomizer()); } void tearDown() @@ -150,7 +153,7 @@ void DefaultBtAnnounceTest::testNoMoreAnnounce() btAnnounce.setPieceStorage(pieceStorage_); btAnnounce.setPeerStorage(peerStorage_); btAnnounce.setBtRuntime(btRuntime_); - btAnnounce.setRandomizer(std::shared_ptr(new FixedNumberRandomizer())); + btAnnounce.setRandomizer(randomizer_.get()); btAnnounce.setTcpPort(6989); CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/announce?info_hash=%01%23Eg%89%AB%CD%EF%01%23Eg%89%AB%CD%EF%01%23Eg&peer_id=%2Daria2%2Dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=fastdltl&numwant=50&no_peer_id=1&port=6989&event=started&supportcrypto=1"), btAnnounce.getAnnounceUrl()); @@ -199,7 +202,7 @@ void DefaultBtAnnounceTest::testGetAnnounceUrl() btAnnounce.setPieceStorage(pieceStorage_); btAnnounce.setPeerStorage(peerStorage_); btAnnounce.setBtRuntime(btRuntime_); - btAnnounce.setRandomizer(std::shared_ptr(new FixedNumberRandomizer())); + btAnnounce.setRandomizer(randomizer_.get()); btAnnounce.setTcpPort(6989); std::shared_ptr req; @@ -256,7 +259,7 @@ void DefaultBtAnnounceTest::testGetAnnounceUrl_withQuery() btAnnounce.setPieceStorage(pieceStorage_); btAnnounce.setPeerStorage(peerStorage_); btAnnounce.setBtRuntime(btRuntime_); - btAnnounce.setRandomizer(std::shared_ptr(new FixedNumberRandomizer())); + btAnnounce.setRandomizer(randomizer_.get()); btAnnounce.setTcpPort(6989); CPPUNIT_ASSERT_EQUAL @@ -280,7 +283,7 @@ void DefaultBtAnnounceTest::testGetAnnounceUrl_externalIP() btAnnounce.setPieceStorage(pieceStorage_); btAnnounce.setPeerStorage(peerStorage_); btAnnounce.setBtRuntime(btRuntime_); - btAnnounce.setRandomizer(std::shared_ptr(new FixedNumberRandomizer())); + btAnnounce.setRandomizer(randomizer_.get()); btAnnounce.setTcpPort(6989); CPPUNIT_ASSERT_EQUAL @@ -311,7 +314,7 @@ void DefaultBtAnnounceTest::testIsAllAnnounceFailed() btAnnounce.setPieceStorage(pieceStorage_); btAnnounce.setPeerStorage(peerStorage_); btAnnounce.setBtRuntime(btRuntime_); - btAnnounce.setRandomizer(std::shared_ptr(new FixedNumberRandomizer())); + btAnnounce.setRandomizer(randomizer_.get()); btAnnounce.setTcpPort(6989); CPPUNIT_ASSERT_EQUAL(std::string("http://localhost/announce?info_hash=%01%23Eg%89%AB%CD%EF%01%23Eg%89%AB%CD%EF%01%23Eg&peer_id=%2Daria2%2Dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=fastdltl&numwant=50&no_peer_id=1&port=6989&event=started&supportcrypto=1"), btAnnounce.getAnnounceUrl()); @@ -344,7 +347,7 @@ void DefaultBtAnnounceTest::testURLOrderInStoppedEvent() btAnnounce.setPieceStorage(pieceStorage_); btAnnounce.setPeerStorage(peerStorage_); btAnnounce.setBtRuntime(btRuntime_); - btAnnounce.setRandomizer(std::shared_ptr(new FixedNumberRandomizer())); + btAnnounce.setRandomizer(randomizer_.get()); btAnnounce.setTcpPort(6989); CPPUNIT_ASSERT_EQUAL(std::string("http://localhost1/announce?info_hash=%01%23Eg%89%AB%CD%EF%01%23Eg%89%AB%CD%EF%01%23Eg&peer_id=%2Daria2%2Dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=fastdltl&numwant=50&no_peer_id=1&port=6989&event=started&supportcrypto=1"), btAnnounce.getAnnounceUrl()); @@ -375,7 +378,7 @@ void DefaultBtAnnounceTest::testURLOrderInCompletedEvent() btAnnounce.setPieceStorage(pieceStorage_); btAnnounce.setPeerStorage(peerStorage_); btAnnounce.setBtRuntime(btRuntime_); - btAnnounce.setRandomizer(std::shared_ptr(new FixedNumberRandomizer())); + btAnnounce.setRandomizer(randomizer_.get()); btAnnounce.setTcpPort(6989); CPPUNIT_ASSERT_EQUAL(std::string("http://localhost1/announce?info_hash=%01%23Eg%89%AB%CD%EF%01%23Eg%89%AB%CD%EF%01%23Eg&peer_id=%2Daria2%2Dultrafastdltl&uploaded=1572864&downloaded=1310720&left=1572864&compact=1&key=fastdltl&numwant=50&no_peer_id=1&port=6989&event=started&supportcrypto=1"), btAnnounce.getAnnounceUrl());