mirror of https://github.com/aria2/aria2
Use std::unique_ptr for ProgressUpdate instead of raw pointer
parent
529b9fdceb
commit
4f7d1c395b
|
@ -78,9 +78,9 @@ struct ThisProgressUpdate : public ProgressUpdate {
|
|||
};
|
||||
} // namespace
|
||||
|
||||
ProgressUpdate* BtAllowedFastMessage::getProgressUpdate()
|
||||
std::unique_ptr<ProgressUpdate> BtAllowedFastMessage::getProgressUpdate()
|
||||
{
|
||||
return new ThisProgressUpdate(getPeer(), getIndex());
|
||||
return make_unique<ThisProgressUpdate>(getPeer(), getIndex());
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -52,7 +52,7 @@ public:
|
|||
|
||||
virtual void doReceivedAction();
|
||||
|
||||
virtual ProgressUpdate* getProgressUpdate();
|
||||
virtual std::unique_ptr<ProgressUpdate> getProgressUpdate();
|
||||
};
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -82,9 +82,9 @@ struct ThisProgressUpdate : public ProgressUpdate {
|
|||
};
|
||||
} // namespace
|
||||
|
||||
ProgressUpdate* BtChokeMessage::getProgressUpdate()
|
||||
std::unique_ptr<ProgressUpdate> BtChokeMessage::getProgressUpdate()
|
||||
{
|
||||
return new ThisProgressUpdate(getPeer(), getBtMessageDispatcher());
|
||||
return make_unique<ThisProgressUpdate>(getPeer(), getBtMessageDispatcher());
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -54,7 +54,7 @@ public:
|
|||
|
||||
virtual bool sendPredicate() const;
|
||||
|
||||
virtual ProgressUpdate* getProgressUpdate();
|
||||
virtual std::unique_ptr<ProgressUpdate> getProgressUpdate();
|
||||
};
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -84,9 +84,9 @@ struct ThisProgressUpdate : public ProgressUpdate {
|
|||
};
|
||||
} // namespace
|
||||
|
||||
ProgressUpdate* BtInterestedMessage::getProgressUpdate()
|
||||
std::unique_ptr<ProgressUpdate> BtInterestedMessage::getProgressUpdate()
|
||||
{
|
||||
return new ThisProgressUpdate(getPeer());
|
||||
return make_unique<ThisProgressUpdate>(getPeer());
|
||||
}
|
||||
|
||||
void BtInterestedMessage::setPeerStorage(PeerStorage* peerStorage)
|
||||
|
|
|
@ -60,7 +60,7 @@ public:
|
|||
|
||||
virtual bool sendPredicate() const;
|
||||
|
||||
virtual ProgressUpdate* getProgressUpdate();
|
||||
virtual std::unique_ptr<ProgressUpdate> getProgressUpdate();
|
||||
|
||||
void setPeerStorage(PeerStorage* peerStorage);
|
||||
};
|
||||
|
|
|
@ -84,9 +84,9 @@ struct ThisProgressUpdate : public ProgressUpdate {
|
|||
};
|
||||
} // namespace
|
||||
|
||||
ProgressUpdate* BtNotInterestedMessage::getProgressUpdate()
|
||||
std::unique_ptr<ProgressUpdate> BtNotInterestedMessage::getProgressUpdate()
|
||||
{
|
||||
return new ThisProgressUpdate(getPeer());
|
||||
return make_unique<ThisProgressUpdate>(getPeer());
|
||||
}
|
||||
|
||||
void BtNotInterestedMessage::setPeerStorage(PeerStorage* peerStorage)
|
||||
|
|
|
@ -60,7 +60,7 @@ public:
|
|||
|
||||
virtual bool sendPredicate() const;
|
||||
|
||||
virtual ProgressUpdate* getProgressUpdate();
|
||||
virtual std::unique_ptr<ProgressUpdate> getProgressUpdate();
|
||||
|
||||
void setPeerStorage(PeerStorage* peerStorage);
|
||||
};
|
||||
|
|
|
@ -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<PieceSendUpdate>
|
||||
(getPeer(), MESSAGE_HEADER_LENGTH));
|
||||
// To avoid upload rate overflow, we update the length here at
|
||||
// once.
|
||||
downloadContext_->updateUploadLength(length);
|
||||
|
|
|
@ -75,9 +75,9 @@ struct ThisProgressUpdate : public ProgressUpdate {
|
|||
};
|
||||
} // namespace
|
||||
|
||||
ProgressUpdate* BtUnchokeMessage::getProgressUpdate()
|
||||
std::unique_ptr<ProgressUpdate> BtUnchokeMessage::getProgressUpdate()
|
||||
{
|
||||
return new ThisProgressUpdate(getPeer());
|
||||
return make_unique<ThisProgressUpdate>(getPeer());
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -56,7 +56,7 @@ public:
|
|||
|
||||
virtual bool sendPredicate() const;
|
||||
|
||||
virtual ProgressUpdate* getProgressUpdate();
|
||||
virtual std::unique_ptr<ProgressUpdate> getProgressUpdate();
|
||||
};
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -86,12 +86,12 @@ PeerConnection::~PeerConnection()
|
|||
}
|
||||
|
||||
void PeerConnection::pushBytes(unsigned char* data, size_t len,
|
||||
ProgressUpdate* progressUpdate)
|
||||
std::unique_ptr<ProgressUpdate> 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)
|
||||
|
|
|
@ -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> progressUpdate =
|
||||
std::unique_ptr<ProgressUpdate>{});
|
||||
|
||||
bool receiveMessage(unsigned char* data, size_t& dataLength);
|
||||
|
||||
|
|
|
@ -63,4 +63,9 @@ void SimpleBtMessage::send() {
|
|||
getPeerConnection()->pushBytes(msg, msgLength, getProgressUpdate());
|
||||
}
|
||||
|
||||
std::unique_ptr<ProgressUpdate> SimpleBtMessage::getProgressUpdate()
|
||||
{
|
||||
return std::unique_ptr<ProgressUpdate>{};
|
||||
}
|
||||
|
||||
} // namespace aria2
|
||||
|
|
|
@ -51,7 +51,7 @@ public:
|
|||
|
||||
virtual size_t getMessageLength() = 0;
|
||||
|
||||
virtual ProgressUpdate* getProgressUpdate() { return 0; };
|
||||
virtual std::unique_ptr<ProgressUpdate> getProgressUpdate();
|
||||
|
||||
virtual bool sendPredicate() const { return true; };
|
||||
|
||||
|
|
|
@ -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> 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> progressUpdate)
|
||||
: BufEntry(std::move(progressUpdate)), str_(std::move(s))
|
||||
{}
|
||||
|
||||
// SocketBuffer::StringBufEntry::StringBufEntry() {}
|
||||
|
||||
ssize_t SocketBuffer::StringBufEntry::send
|
||||
(const std::shared_ptr<SocketCore>& socket, size_t offset)
|
||||
{
|
||||
|
@ -105,30 +104,26 @@ const unsigned char* SocketBuffer::StringBufEntry::getData() const
|
|||
return reinterpret_cast<const unsigned char*>(str_.c_str());
|
||||
}
|
||||
|
||||
void SocketBuffer::StringBufEntry::swap(std::string& s)
|
||||
{
|
||||
str_.swap(s);
|
||||
}
|
||||
|
||||
SocketBuffer::SocketBuffer(const std::shared_ptr<SocketCore>& socket):
|
||||
socket_(socket), offset_(0) {}
|
||||
|
||||
SocketBuffer::~SocketBuffer() {}
|
||||
|
||||
void SocketBuffer::pushBytes(unsigned char* bytes, size_t len,
|
||||
ProgressUpdate* progressUpdate)
|
||||
std::unique_ptr<ProgressUpdate> progressUpdate)
|
||||
{
|
||||
if(len > 0) {
|
||||
bufq_.push_back(make_unique<ByteArrayBufEntry>(bytes, len,
|
||||
progressUpdate));
|
||||
bufq_.push_back(make_unique<ByteArrayBufEntry>
|
||||
(bytes, len, std::move(progressUpdate)));
|
||||
}
|
||||
}
|
||||
|
||||
void SocketBuffer::pushStr(std::string data, ProgressUpdate* progressUpdate)
|
||||
void SocketBuffer::pushStr(std::string data,
|
||||
std::unique_ptr<ProgressUpdate> progressUpdate)
|
||||
{
|
||||
if(!data.empty()) {
|
||||
bufq_.push_back(make_unique<StringBufEntry>(std::move(data),
|
||||
progressUpdate));
|
||||
bufq_.push_back(make_unique<StringBufEntry>
|
||||
(std::move(data), std::move(progressUpdate)));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
: progressUpdate_(std::move(progressUpdate)) {}
|
||||
virtual ~BufEntry() {}
|
||||
virtual ssize_t send
|
||||
(const std::shared_ptr<SocketCore>& 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> progressUpdate_;
|
||||
};
|
||||
|
||||
class ByteArrayBufEntry:public BufEntry {
|
||||
public:
|
||||
ByteArrayBufEntry(unsigned char* bytes, size_t length,
|
||||
ProgressUpdate* progressUpdate);
|
||||
std::unique_ptr<ProgressUpdate> progressUpdate);
|
||||
virtual ~ByteArrayBufEntry();
|
||||
virtual ssize_t send
|
||||
(const std::shared_ptr<SocketCore>& 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> progressUpdate);
|
||||
virtual ssize_t send
|
||||
(const std::shared_ptr<SocketCore>& 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> progressUpdate =
|
||||
std::unique_ptr<ProgressUpdate>{});
|
||||
|
||||
// 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> progressUpdate =
|
||||
std::unique_ptr<ProgressUpdate>{});
|
||||
|
||||
// Sends data in queue. Returns the number of bytes sent.
|
||||
ssize_t send();
|
||||
|
|
Loading…
Reference in New Issue