Bladeren bron

Use std::unique_ptr instead of std::shared_ptr

Tatsuhiro Tsujikawa 12 jaren geleden
bovenliggende
commit
50dcd6394c

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

+ 2 - 2
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()) {

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

+ 1 - 1
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;

+ 1 - 2
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;
 }

+ 2 - 2
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
   {

+ 1 - 1
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) {

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

+ 1 - 1
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);
 

+ 1 - 1
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) {

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

+ 1 - 1
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());

+ 3 - 3
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()

+ 2 - 2
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();
 

+ 6 - 0
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

+ 1 - 1
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));
   }

+ 10 - 7
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());