Use std::unique_ptr instead of std::shared_ptr

pull/103/head
Tatsuhiro Tsujikawa 2013-06-22 15:49:41 +09:00
parent c330ac901d
commit 50dcd6394c
17 changed files with 36 additions and 28 deletions

View File

@ -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());
}
}

View File

@ -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()) {

View File

@ -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()));
}

View File

@ -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;

View File

@ -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;
}

View File

@ -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
{

View File

@ -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) {

View File

@ -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>());
}

View File

@ -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);

View File

@ -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) {

View File

@ -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());
}
}

View File

@ -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());

View File

@ -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()

View File

@ -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();

View File

@ -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

View File

@ -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));
}

View File

@ -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());