From 23086b6e21ee846f56d1cdd3711ff1a38b44c627 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 23 Jun 2013 16:12:19 +0900 Subject: [PATCH] AbstractBtMessage: Use std::unique_ptr for validator --- src/AbstractBtMessage.cc | 6 ++-- src/AbstractBtMessage.h | 4 +-- src/DefaultBtMessageFactory.cc | 50 ++++++++++++++-------------------- test/BtRequestMessageTest.cc | 6 ++-- 4 files changed, 29 insertions(+), 37 deletions(-) diff --git a/src/AbstractBtMessage.cc b/src/AbstractBtMessage.cc index d1c76a7e..39dd13e9 100644 --- a/src/AbstractBtMessage.cc +++ b/src/AbstractBtMessage.cc @@ -68,8 +68,10 @@ void AbstractBtMessage::validate() } void -AbstractBtMessage::setBtMessageValidator(const std::shared_ptr& validator) { - validator_ = validator; +AbstractBtMessage::setBtMessageValidator +(std::unique_ptr validator) +{ + validator_ = std::move(validator); } void AbstractBtMessage::setPieceStorage(PieceStorage* pieceStorage) diff --git a/src/AbstractBtMessage.h b/src/AbstractBtMessage.h index c37ad69f..fb5daa0e 100644 --- a/src/AbstractBtMessage.h +++ b/src/AbstractBtMessage.h @@ -68,7 +68,7 @@ private: PeerConnection* peerConnection_; - std::shared_ptr validator_; + std::unique_ptr validator_; bool metadataGetMode_; protected: @@ -151,7 +151,7 @@ public: virtual void onChokingEvent(const BtChokingEvent& event) {} - void setBtMessageValidator(const std::shared_ptr& validator); + void setBtMessageValidator(std::unique_ptr validator); void setPieceStorage(PieceStorage* pieceStorage); diff --git a/src/DefaultBtMessageFactory.cc b/src/DefaultBtMessageFactory.cc index ad2a3cc8..1f519fdb 100644 --- a/src/DefaultBtMessageFactory.cc +++ b/src/DefaultBtMessageFactory.cc @@ -123,31 +123,27 @@ DefaultBtMessageFactory::createBtMessage case BtHaveMessage::ID: msg.reset(BtHaveMessage::create(data, dataLength)); if(!metadataGetMode_) { - std::shared_ptr v - (new IndexBtMessageValidator(static_cast(msg.get()), - downloadContext_->getNumPieces())); - msg->setBtMessageValidator(v); + msg->setBtMessageValidator(make_unique + (static_cast(msg.get()), + downloadContext_->getNumPieces())); } break; case BtBitfieldMessage::ID: msg.reset(BtBitfieldMessage::create(data, dataLength)); if(!metadataGetMode_) { - std::shared_ptr v - (new BtBitfieldMessageValidator - (static_cast(msg.get()), - downloadContext_->getNumPieces())); - msg->setBtMessageValidator(v); + msg->setBtMessageValidator(make_unique + (static_cast(msg.get()), + downloadContext_->getNumPieces())); } break; case BtRequestMessage::ID: { BtRequestMessage* m = BtRequestMessage::create(data, dataLength); if(!metadataGetMode_) { - std::shared_ptr validator - (new RangeBtMessageValidator + m->setBtMessageValidator + (make_unique (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 validator - (new RangeBtMessageValidator + m->setBtMessageValidator + (make_unique (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 validator - (new BtPieceMessageValidator + m->setBtMessageValidator + (make_unique (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 validator - (new RangeBtMessageValidator + m->setBtMessageValidator + (make_unique (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 validator - (new IndexBtMessageValidator(m, downloadContext_->getNumPieces())); - m->setBtMessageValidator(validator); + m->setBtMessageValidator(make_unique + (m, downloadContext_->getNumPieces())); } msg.reset(m); break; @@ -215,7 +207,8 @@ DefaultBtMessageFactory::createBtMessage if(!metadataGetMode_) { std::shared_ptr validator (new IndexBtMessageValidator(m, downloadContext_->getNumPieces())); - m->setBtMessageValidator(validator); + m->setBtMessageValidator(make_unique + (m, downloadContext_->getNumPieces())); } msg.reset(m); break; @@ -267,10 +260,9 @@ DefaultBtMessageFactory::createHandshakeMessage { std::shared_ptr msg = BtHandshakeMessage::create(data, dataLength); - std::shared_ptr validator - (new BtHandshakeMessageValidator - (msg.get(), bittorrent::getInfoHash(downloadContext_))); - msg->setBtMessageValidator(validator); + msg->setBtMessageValidator(make_unique + (msg.get(), + bittorrent::getInfoHash(downloadContext_))); setCommonProperty(msg.get()); return msg; } diff --git a/test/BtRequestMessageTest.cc b/test/BtRequestMessageTest.cc index b56dce54..808c3068 100644 --- a/test/BtRequestMessageTest.cc +++ b/test/BtRequestMessageTest.cc @@ -256,16 +256,14 @@ void BtRequestMessageTest::testToString() { void BtRequestMessageTest::testValidate() { BtRequestMessage msg(0, 0, 16*1024); msg.setBtMessageValidator - (std::shared_ptr - (new RangeBtMessageValidator(&msg, 1024, 256*1024))); + (make_unique(&msg, 1024, 256*1024)); msg.validate(); } void BtRequestMessageTest::testValidate_lengthTooLong() { BtRequestMessage msg(0, 0, 16*1024+1); msg.setBtMessageValidator - (std::shared_ptr - (new RangeBtMessageValidator(&msg, 1024, 256*1024))); + (make_unique(&msg, 1024, 256*1024)); try { msg.validate(); CPPUNIT_FAIL("exception must be thrown.");