From 4f7d1c395bf7fd8826c235c69edf8328e71917a5 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Mon, 1 Jul 2013 21:59:54 +0900 Subject: [PATCH] Use std::unique_ptr for ProgressUpdate instead of raw pointer --- src/BtAllowedFastMessage.cc | 4 ++-- src/BtAllowedFastMessage.h | 2 +- src/BtChokeMessage.cc | 4 ++-- src/BtChokeMessage.h | 2 +- src/BtInterestedMessage.cc | 4 ++-- src/BtInterestedMessage.h | 2 +- src/BtNotInterestedMessage.cc | 4 ++-- src/BtNotInterestedMessage.h | 2 +- src/BtPieceMessage.cc | 4 ++-- src/BtUnchokeMessage.cc | 4 ++-- src/BtUnchokeMessage.h | 2 +- src/PeerConnection.cc | 4 ++-- src/PeerConnection.h | 5 ++--- src/SimpleBtMessage.cc | 5 +++++ src/SimpleBtMessage.h | 2 +- src/SocketBuffer.cc | 31 +++++++++++++------------------ src/SocketBuffer.h | 24 +++++++++++------------- 17 files changed, 51 insertions(+), 54 deletions(-) diff --git a/src/BtAllowedFastMessage.cc b/src/BtAllowedFastMessage.cc index 9821d378..c51f1eda 100644 --- a/src/BtAllowedFastMessage.cc +++ b/src/BtAllowedFastMessage.cc @@ -78,9 +78,9 @@ struct ThisProgressUpdate : public ProgressUpdate { }; } // namespace -ProgressUpdate* BtAllowedFastMessage::getProgressUpdate() +std::unique_ptr BtAllowedFastMessage::getProgressUpdate() { - return new ThisProgressUpdate(getPeer(), getIndex()); + return make_unique(getPeer(), getIndex()); } } // namespace aria2 diff --git a/src/BtAllowedFastMessage.h b/src/BtAllowedFastMessage.h index 134084a5..dfb176e6 100644 --- a/src/BtAllowedFastMessage.h +++ b/src/BtAllowedFastMessage.h @@ -52,7 +52,7 @@ public: virtual void doReceivedAction(); - virtual ProgressUpdate* getProgressUpdate(); + virtual std::unique_ptr getProgressUpdate(); }; } // namespace aria2 diff --git a/src/BtChokeMessage.cc b/src/BtChokeMessage.cc index 441f3cf1..bd6164df 100644 --- a/src/BtChokeMessage.cc +++ b/src/BtChokeMessage.cc @@ -82,9 +82,9 @@ struct ThisProgressUpdate : public ProgressUpdate { }; } // namespace -ProgressUpdate* BtChokeMessage::getProgressUpdate() +std::unique_ptr BtChokeMessage::getProgressUpdate() { - return new ThisProgressUpdate(getPeer(), getBtMessageDispatcher()); + return make_unique(getPeer(), getBtMessageDispatcher()); } } // namespace aria2 diff --git a/src/BtChokeMessage.h b/src/BtChokeMessage.h index 878b4e9d..8eca9ca1 100644 --- a/src/BtChokeMessage.h +++ b/src/BtChokeMessage.h @@ -54,7 +54,7 @@ public: virtual bool sendPredicate() const; - virtual ProgressUpdate* getProgressUpdate(); + virtual std::unique_ptr getProgressUpdate(); }; } // namespace aria2 diff --git a/src/BtInterestedMessage.cc b/src/BtInterestedMessage.cc index 0ba100f3..6423feca 100644 --- a/src/BtInterestedMessage.cc +++ b/src/BtInterestedMessage.cc @@ -84,9 +84,9 @@ struct ThisProgressUpdate : public ProgressUpdate { }; } // namespace -ProgressUpdate* BtInterestedMessage::getProgressUpdate() +std::unique_ptr BtInterestedMessage::getProgressUpdate() { - return new ThisProgressUpdate(getPeer()); + return make_unique(getPeer()); } void BtInterestedMessage::setPeerStorage(PeerStorage* peerStorage) diff --git a/src/BtInterestedMessage.h b/src/BtInterestedMessage.h index d6232f02..a0de9a96 100644 --- a/src/BtInterestedMessage.h +++ b/src/BtInterestedMessage.h @@ -60,7 +60,7 @@ public: virtual bool sendPredicate() const; - virtual ProgressUpdate* getProgressUpdate(); + virtual std::unique_ptr getProgressUpdate(); void setPeerStorage(PeerStorage* peerStorage); }; diff --git a/src/BtNotInterestedMessage.cc b/src/BtNotInterestedMessage.cc index 911faac4..abbded28 100644 --- a/src/BtNotInterestedMessage.cc +++ b/src/BtNotInterestedMessage.cc @@ -84,9 +84,9 @@ struct ThisProgressUpdate : public ProgressUpdate { }; } // namespace -ProgressUpdate* BtNotInterestedMessage::getProgressUpdate() +std::unique_ptr BtNotInterestedMessage::getProgressUpdate() { - return new ThisProgressUpdate(getPeer()); + return make_unique(getPeer()); } void BtNotInterestedMessage::setPeerStorage(PeerStorage* peerStorage) diff --git a/src/BtNotInterestedMessage.h b/src/BtNotInterestedMessage.h index 8bb4b9b2..4db1c3f1 100644 --- a/src/BtNotInterestedMessage.h +++ b/src/BtNotInterestedMessage.h @@ -60,7 +60,7 @@ public: virtual bool sendPredicate() const; - virtual ProgressUpdate* getProgressUpdate(); + virtual std::unique_ptr getProgressUpdate(); void setPeerStorage(PeerStorage* peerStorage); }; diff --git a/src/BtPieceMessage.cc b/src/BtPieceMessage.cc index 8ab0cf89..5abc35dc 100644 --- a/src/BtPieceMessage.cc +++ b/src/BtPieceMessage.cc @@ -224,8 +224,8 @@ void BtPieceMessage::pushPieceData(int64_t offset, int32_t length) const unsigned char* dbuf = buf; buf.reset(0); getPeerConnection()->pushBytes(dbuf, length+MESSAGE_HEADER_LENGTH, - new PieceSendUpdate(getPeer(), - MESSAGE_HEADER_LENGTH)); + make_unique + (getPeer(), MESSAGE_HEADER_LENGTH)); // To avoid upload rate overflow, we update the length here at // once. downloadContext_->updateUploadLength(length); diff --git a/src/BtUnchokeMessage.cc b/src/BtUnchokeMessage.cc index 35d4ac08..de62c85c 100644 --- a/src/BtUnchokeMessage.cc +++ b/src/BtUnchokeMessage.cc @@ -75,9 +75,9 @@ struct ThisProgressUpdate : public ProgressUpdate { }; } // namespace -ProgressUpdate* BtUnchokeMessage::getProgressUpdate() +std::unique_ptr BtUnchokeMessage::getProgressUpdate() { - return new ThisProgressUpdate(getPeer()); + return make_unique(getPeer()); } } // namespace aria2 diff --git a/src/BtUnchokeMessage.h b/src/BtUnchokeMessage.h index d40eaf44..57134d71 100644 --- a/src/BtUnchokeMessage.h +++ b/src/BtUnchokeMessage.h @@ -56,7 +56,7 @@ public: virtual bool sendPredicate() const; - virtual ProgressUpdate* getProgressUpdate(); + virtual std::unique_ptr getProgressUpdate(); }; } // namespace aria2 diff --git a/src/PeerConnection.cc b/src/PeerConnection.cc index 99c19ac6..355999e8 100644 --- a/src/PeerConnection.cc +++ b/src/PeerConnection.cc @@ -86,12 +86,12 @@ PeerConnection::~PeerConnection() } void PeerConnection::pushBytes(unsigned char* data, size_t len, - ProgressUpdate* progressUpdate) + std::unique_ptr progressUpdate) { if(encryptionEnabled_) { encryptor_->encrypt(len, data, data); } - socketBuffer_.pushBytes(data, len, progressUpdate); + socketBuffer_.pushBytes(data, len, std::move(progressUpdate)); } bool PeerConnection::receiveMessage(unsigned char* data, size_t& dataLength) diff --git a/src/PeerConnection.h b/src/PeerConnection.h index 09c676ea..dc117d1b 100644 --- a/src/PeerConnection.h +++ b/src/PeerConnection.h @@ -97,9 +97,8 @@ public: // Pushes data into send buffer. After this call, this object gets // ownership of data, so caller must not delete or alter it. void pushBytes(unsigned char* data, size_t len, - ProgressUpdate* progressUpdate = 0); - - void pushStr(const std::string& data); + std::unique_ptr progressUpdate = + std::unique_ptr{}); bool receiveMessage(unsigned char* data, size_t& dataLength); diff --git a/src/SimpleBtMessage.cc b/src/SimpleBtMessage.cc index c7aa670a..d59fc58e 100644 --- a/src/SimpleBtMessage.cc +++ b/src/SimpleBtMessage.cc @@ -63,4 +63,9 @@ void SimpleBtMessage::send() { getPeerConnection()->pushBytes(msg, msgLength, getProgressUpdate()); } +std::unique_ptr SimpleBtMessage::getProgressUpdate() +{ + return std::unique_ptr{}; +} + } // namespace aria2 diff --git a/src/SimpleBtMessage.h b/src/SimpleBtMessage.h index 48836978..f08bc904 100644 --- a/src/SimpleBtMessage.h +++ b/src/SimpleBtMessage.h @@ -51,7 +51,7 @@ public: virtual size_t getMessageLength() = 0; - virtual ProgressUpdate* getProgressUpdate() { return 0; }; + virtual std::unique_ptr getProgressUpdate(); virtual bool sendPredicate() const { return true; }; diff --git a/src/SocketBuffer.cc b/src/SocketBuffer.cc index 5c09b582..715681bd 100644 --- a/src/SocketBuffer.cc +++ b/src/SocketBuffer.cc @@ -47,8 +47,9 @@ namespace aria2 { SocketBuffer::ByteArrayBufEntry::ByteArrayBufEntry -(unsigned char* bytes, size_t length, ProgressUpdate* progressUpdate) - : BufEntry(progressUpdate), bytes_(bytes), length_(length) +(unsigned char* bytes, size_t length, + std::unique_ptr progressUpdate) + : BufEntry(std::move(progressUpdate)), bytes_(bytes), length_(length) {} SocketBuffer::ByteArrayBufEntry::~ByteArrayBufEntry() @@ -77,13 +78,11 @@ const unsigned char* SocketBuffer::ByteArrayBufEntry::getData() const return bytes_; } -SocketBuffer::StringBufEntry::StringBufEntry(std::string s, - ProgressUpdate* progressUpdate) - : BufEntry(progressUpdate), str_(std::move(s)) +SocketBuffer::StringBufEntry::StringBufEntry +(std::string s, std::unique_ptr progressUpdate) + : BufEntry(std::move(progressUpdate)), str_(std::move(s)) {} -// SocketBuffer::StringBufEntry::StringBufEntry() {} - ssize_t SocketBuffer::StringBufEntry::send (const std::shared_ptr& socket, size_t offset) { @@ -105,30 +104,26 @@ const unsigned char* SocketBuffer::StringBufEntry::getData() const return reinterpret_cast(str_.c_str()); } -void SocketBuffer::StringBufEntry::swap(std::string& s) -{ - str_.swap(s); -} - SocketBuffer::SocketBuffer(const std::shared_ptr& socket): socket_(socket), offset_(0) {} SocketBuffer::~SocketBuffer() {} void SocketBuffer::pushBytes(unsigned char* bytes, size_t len, - ProgressUpdate* progressUpdate) + std::unique_ptr progressUpdate) { if(len > 0) { - bufq_.push_back(make_unique(bytes, len, - progressUpdate)); + bufq_.push_back(make_unique + (bytes, len, std::move(progressUpdate))); } } -void SocketBuffer::pushStr(std::string data, ProgressUpdate* progressUpdate) +void SocketBuffer::pushStr(std::string data, + std::unique_ptr progressUpdate) { if(!data.empty()) { - bufq_.push_back(make_unique(std::move(data), - progressUpdate)); + bufq_.push_back(make_unique + (std::move(data), std::move(progressUpdate))); } } diff --git a/src/SocketBuffer.h b/src/SocketBuffer.h index 77503321..9a76e2b4 100644 --- a/src/SocketBuffer.h +++ b/src/SocketBuffer.h @@ -54,12 +54,9 @@ class SocketBuffer { private: class BufEntry { public: - BufEntry(ProgressUpdate* progressUpdate) - : progressUpdate_(progressUpdate) {} - virtual ~BufEntry() - { - delete progressUpdate_; - } + BufEntry(std::unique_ptr progressUpdate) + : progressUpdate_(std::move(progressUpdate)) {} + virtual ~BufEntry() {} virtual ssize_t send (const std::shared_ptr& socket, size_t offset) = 0; virtual bool final(size_t offset) const = 0; @@ -72,13 +69,13 @@ private: } } private: - ProgressUpdate* progressUpdate_; + std::unique_ptr progressUpdate_; }; class ByteArrayBufEntry:public BufEntry { public: ByteArrayBufEntry(unsigned char* bytes, size_t length, - ProgressUpdate* progressUpdate); + std::unique_ptr progressUpdate); virtual ~ByteArrayBufEntry(); virtual ssize_t send (const std::shared_ptr& socket, size_t offset); @@ -93,14 +90,12 @@ private: class StringBufEntry:public BufEntry { public: StringBufEntry(std::string s, - ProgressUpdate* progressUpdate); - StringBufEntry(); + std::unique_ptr progressUpdate); virtual ssize_t send (const std::shared_ptr& socket, size_t offset); virtual bool final(size_t offset) const; virtual size_t getLength() const; virtual const unsigned char* getData() const; - void swap(std::string& s); private: std::string str_; }; @@ -129,13 +124,16 @@ public: // each time the data is sent. It will be deleted by this object. It // can be null. void pushBytes(unsigned char* bytes, size_t len, - ProgressUpdate* progressUpdate = 0); + std::unique_ptr progressUpdate = + std::unique_ptr{}); // Feeds data into queue. This function doesn't send data. If // progressUpdate is not null, its update() function will be called // each time the data is sent. It will be deleted by this object. It // can be null. - void pushStr(std::string data, ProgressUpdate* progressUpdate = 0); + void pushStr(std::string data, + std::unique_ptr progressUpdate = + std::unique_ptr{}); // Sends data in queue. Returns the number of bytes sent. ssize_t send();