Explorar o código

AbstractBtMessage: Use std::unique_ptr for validator

Tatsuhiro Tsujikawa %!s(int64=12) %!d(string=hai) anos
pai
achega
23086b6e21

+ 4 - 2
src/AbstractBtMessage.cc

@@ -68,8 +68,10 @@ void AbstractBtMessage::validate()
 }
 
 void
-AbstractBtMessage::setBtMessageValidator(const std::shared_ptr<BtMessageValidator>& validator) {
-  validator_ = validator;
+AbstractBtMessage::setBtMessageValidator
+(std::unique_ptr<BtMessageValidator> validator)
+{
+  validator_ = std::move(validator);
 }
 
 void AbstractBtMessage::setPieceStorage(PieceStorage* pieceStorage)

+ 2 - 2
src/AbstractBtMessage.h

@@ -68,7 +68,7 @@ private:
 
   PeerConnection* peerConnection_;
 
-  std::shared_ptr<BtMessageValidator> validator_;
+  std::unique_ptr<BtMessageValidator> validator_;
 
   bool metadataGetMode_;
 protected:
@@ -151,7 +151,7 @@ public:
 
   virtual void onChokingEvent(const BtChokingEvent& event) {}
 
-  void setBtMessageValidator(const std::shared_ptr<BtMessageValidator>& validator);
+  void setBtMessageValidator(std::unique_ptr<BtMessageValidator> validator);
 
   void setPieceStorage(PieceStorage* pieceStorage);
 

+ 21 - 29
src/DefaultBtMessageFactory.cc

@@ -123,31 +123,27 @@ DefaultBtMessageFactory::createBtMessage
     case BtHaveMessage::ID:
       msg.reset(BtHaveMessage::create(data, dataLength));
       if(!metadataGetMode_) {
-        std::shared_ptr<BtMessageValidator> v
-          (new IndexBtMessageValidator(static_cast<BtHaveMessage*>(msg.get()),
-                                       downloadContext_->getNumPieces()));
-        msg->setBtMessageValidator(v);
+        msg->setBtMessageValidator(make_unique<IndexBtMessageValidator>
+                                   (static_cast<BtHaveMessage*>(msg.get()),
+                                    downloadContext_->getNumPieces()));
       }
       break;
     case BtBitfieldMessage::ID:
       msg.reset(BtBitfieldMessage::create(data, dataLength));
       if(!metadataGetMode_) {
-        std::shared_ptr<BtMessageValidator> v
-          (new BtBitfieldMessageValidator
-           (static_cast<BtBitfieldMessage*>(msg.get()),
-            downloadContext_->getNumPieces()));
-        msg->setBtMessageValidator(v);
+        msg->setBtMessageValidator(make_unique<BtBitfieldMessageValidator>
+                                   (static_cast<BtBitfieldMessage*>(msg.get()),
+                                    downloadContext_->getNumPieces()));
       }
       break;
     case BtRequestMessage::ID: {
       BtRequestMessage* m = BtRequestMessage::create(data, dataLength);
       if(!metadataGetMode_) {
-        std::shared_ptr<BtMessageValidator> validator
-          (new RangeBtMessageValidator
+        m->setBtMessageValidator
+          (make_unique<RangeBtMessageValidator>
            (m,
             downloadContext_->getNumPieces(),
             pieceStorage_->getPieceLength(m->getIndex())));
-        m->setBtMessageValidator(validator);
       }
       msg.reset(m);
       break;
@@ -155,12 +151,11 @@ DefaultBtMessageFactory::createBtMessage
     case BtCancelMessage::ID: {
       BtCancelMessage* m = BtCancelMessage::create(data, dataLength);
       if(!metadataGetMode_) {
-        std::shared_ptr<BtMessageValidator> validator
-          (new RangeBtMessageValidator
+        m->setBtMessageValidator
+          (make_unique<RangeBtMessageValidator>
            (m,
             downloadContext_->getNumPieces(),
             pieceStorage_->getPieceLength(m->getIndex())));
-        m->setBtMessageValidator(validator);
       }
       msg.reset(m);
       break;
@@ -168,12 +163,11 @@ DefaultBtMessageFactory::createBtMessage
     case BtPieceMessage::ID: {
       BtPieceMessage* m = BtPieceMessage::create(data, dataLength);
       if(!metadataGetMode_) {
-        std::shared_ptr<BtMessageValidator> validator
-          (new BtPieceMessageValidator
+        m->setBtMessageValidator
+          (make_unique<BtPieceMessageValidator>
            (m,
             downloadContext_->getNumPieces(),
             pieceStorage_->getPieceLength(m->getIndex())));
-        m->setBtMessageValidator(validator);
       }
       m->setDownloadContext(downloadContext_);
       m->setPeerStorage(peerStorage_);
@@ -189,12 +183,11 @@ DefaultBtMessageFactory::createBtMessage
     case BtRejectMessage::ID: {
       BtRejectMessage* m = BtRejectMessage::create(data, dataLength);
       if(!metadataGetMode_) {
-        std::shared_ptr<BtMessageValidator> validator
-          (new RangeBtMessageValidator
+        m->setBtMessageValidator
+          (make_unique<RangeBtMessageValidator>
            (m,
             downloadContext_->getNumPieces(),
             pieceStorage_->getPieceLength(m->getIndex())));
-        m->setBtMessageValidator(validator);
       }
       msg.reset(m);
       break;
@@ -203,9 +196,8 @@ DefaultBtMessageFactory::createBtMessage
       BtSuggestPieceMessage* m =
         BtSuggestPieceMessage::create(data, dataLength);
       if(!metadataGetMode_) {
-        std::shared_ptr<BtMessageValidator> validator
-          (new IndexBtMessageValidator(m, downloadContext_->getNumPieces()));
-        m->setBtMessageValidator(validator);
+        m->setBtMessageValidator(make_unique<IndexBtMessageValidator>
+                                 (m, downloadContext_->getNumPieces()));
       }
       msg.reset(m);
       break;
@@ -215,7 +207,8 @@ DefaultBtMessageFactory::createBtMessage
       if(!metadataGetMode_) {
         std::shared_ptr<BtMessageValidator> validator
           (new IndexBtMessageValidator(m, downloadContext_->getNumPieces()));
-        m->setBtMessageValidator(validator);
+        m->setBtMessageValidator(make_unique<IndexBtMessageValidator>
+                                 (m, downloadContext_->getNumPieces()));
       }
       msg.reset(m);
       break;
@@ -267,10 +260,9 @@ DefaultBtMessageFactory::createHandshakeMessage
 {
   std::shared_ptr<BtHandshakeMessage> msg =
     BtHandshakeMessage::create(data, dataLength);
-  std::shared_ptr<BtMessageValidator> validator
-    (new BtHandshakeMessageValidator
-     (msg.get(), bittorrent::getInfoHash(downloadContext_)));
-  msg->setBtMessageValidator(validator);
+  msg->setBtMessageValidator(make_unique<BtHandshakeMessageValidator>
+                             (msg.get(),
+                              bittorrent::getInfoHash(downloadContext_)));
   setCommonProperty(msg.get());
   return msg;
 }

+ 2 - 4
test/BtRequestMessageTest.cc

@@ -256,16 +256,14 @@ void BtRequestMessageTest::testToString() {
 void BtRequestMessageTest::testValidate() {
   BtRequestMessage msg(0, 0, 16*1024);
   msg.setBtMessageValidator
-    (std::shared_ptr<BtMessageValidator>
-     (new RangeBtMessageValidator(&msg, 1024, 256*1024)));
+    (make_unique<RangeBtMessageValidator>(&msg, 1024, 256*1024));
   msg.validate();
 }
 
 void BtRequestMessageTest::testValidate_lengthTooLong() {
   BtRequestMessage msg(0, 0, 16*1024+1);
   msg.setBtMessageValidator
-    (std::shared_ptr<BtMessageValidator>
-     (new RangeBtMessageValidator(&msg, 1024, 256*1024)));
+    (make_unique<RangeBtMessageValidator>(&msg, 1024, 256*1024));
   try {
     msg.validate();
     CPPUNIT_FAIL("exception must be thrown.");