summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-06-22 15:49:41 +0900
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2013-06-22 15:49:41 +0900
commit50dcd6394c645fdd9e7fbe879f511888bfa88423 (patch)
treebc2a2ec09af84d2fa031f32eb08c283f47f0efe7
parentc330ac901d653b17f28baf41b6991c3f362fd8ed (diff)
Use std::unique_ptr instead of std::shared_ptr
-rw-r--r--src/AnnounceList.cc2
-rw-r--r--src/BtLeecherStateChoke.cc4
-rw-r--r--src/BtSeederStateChoke.cc2
-rw-r--r--src/DHTConnectionImpl.cc2
-rw-r--r--src/DefaultBtAnnounce.cc3
-rw-r--r--src/DefaultBtAnnounce.h4
-rw-r--r--src/DefaultBtRequestFactory.cc2
-rw-r--r--src/MetalinkEntry.cc2
-rw-r--r--src/MultiFileAllocationIterator.h2
-rw-r--r--src/PeerListenCommand.cc2
-rw-r--r--src/PieceStatMan.cc2
-rw-r--r--src/RequestGroup.cc2
-rw-r--r--src/SimpleRandomizer.cc6
-rw-r--r--src/SimpleRandomizer.h4
-rw-r--r--src/a2functional.h6
-rw-r--r--src/util.cc2
-rw-r--r--test/DefaultBtAnnounceTest.cc17
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<std::string>& 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<PeerEntry>& peerEntries)
}
if(fastOptUnchoker) {
std::random_shuffle(peerIter, peerEntries.end(),
- *(SimpleRandomizer::getInstance().get()));
+ *SimpleRandomizer::getInstance());
for(std::vector<PeerEntry>::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<uint16_t>::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>& 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* randomizer_;
std::shared_ptr<BtRuntime> btRuntime_;
std::shared_ptr<PieceStorage> pieceStorage_;
std::shared_ptr<PeerStorage> peerStorage_;
@@ -136,7 +136,7 @@ public:
tcpPort_ = port;
}
- void setRandomizer(const std::shared_ptr<Randomizer>& 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<size_t>::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<MetalinkResource>());
}
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<std::shared_ptr<DiskWriterEntry> > entries_;
- std::shared_ptr<FileAllocationIterator> fileAllocationIterator_;
+ std::unique_ptr<FileAllocationIterator> 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<int>& 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<uint16_t>::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<PriorityPieceSelector> 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> SimpleRandomizer::randomizer_;
+std::unique_ptr<SimpleRandomizer> SimpleRandomizer::randomizer_;
-const std::shared_ptr<SimpleRandomizer>& 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<SimpleRandomizer> randomizer_;
+ static std::unique_ptr<SimpleRandomizer> randomizer_;
#ifdef __MINGW32__
HCRYPTPROV cryProvider_;
@@ -56,7 +56,7 @@ private:
SimpleRandomizer();
public:
- static const std::shared_ptr<SimpleRandomizer>& 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<typename T, typename... U>
+std::unique_ptr<T> make_unique(U&&... u)
+{
+ return std::unique_ptr<T>(new T(std::forward<U>(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<std::pair<size_t, std::string> > createIndexPaths(std::istream& i)
namespace {
void generateRandomDataRandom(unsigned char* data, size_t length)
{
- const std::shared_ptr<SimpleRandomizer>& rd = SimpleRandomizer::getInstance();
+ SimpleRandomizer* rd = SimpleRandomizer::getInstance();
for(size_t i = 0; i < length; ++i) {
data[i] = static_cast<unsigned long>(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<MockPieceStorage> pieceStorage_;
std::shared_ptr<MockPeerStorage> peerStorage_;
std::shared_ptr<BtRuntime> btRuntime_;
+ std::unique_ptr<Randomizer> 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<Randomizer>(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<Randomizer>(new FixedNumberRandomizer()));
+ btAnnounce.setRandomizer(randomizer_.get());
btAnnounce.setTcpPort(6989);
std::shared_ptr<UDPTrackerRequest> req;
@@ -256,7 +259,7 @@ void DefaultBtAnnounceTest::testGetAnnounceUrl_withQuery()
btAnnounce.setPieceStorage(pieceStorage_);
btAnnounce.setPeerStorage(peerStorage_);
btAnnounce.setBtRuntime(btRuntime_);
- btAnnounce.setRandomizer(std::shared_ptr<Randomizer>(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<Randomizer>(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<Randomizer>(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<Randomizer>(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<Randomizer>(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());