SocketRecvBuffer: Cleanup with C++11 features

pull/235/merge
Tatsuhiro Tsujikawa 2014-06-05 23:40:19 +09:00
parent 0aac49d55e
commit aff92b5115
2 changed files with 11 additions and 12 deletions

View File

@ -39,28 +39,27 @@
#include "SocketCore.h" #include "SocketCore.h"
#include "LogFactory.h" #include "LogFactory.h"
#include "a2functional.h"
namespace aria2 { namespace aria2 {
SocketRecvBuffer::SocketRecvBuffer SocketRecvBuffer::SocketRecvBuffer
(const std::shared_ptr<SocketCore>& socket, (std::shared_ptr<SocketCore> socket,
size_t capacity) size_t capacity)
: socket_(socket), : socket_(std::move(socket)),
capacity_(capacity), capacity_(capacity),
buf_(new unsigned char[capacity_]), buf_(make_unique<unsigned char[]>(capacity_)),
bufLen_(0) bufLen_(0)
{} {}
SocketRecvBuffer::~SocketRecvBuffer() SocketRecvBuffer::~SocketRecvBuffer()
{ {}
delete [] buf_;
}
ssize_t SocketRecvBuffer::recv() ssize_t SocketRecvBuffer::recv()
{ {
size_t len = capacity_ - bufLen_; size_t len = capacity_ - bufLen_;
if(len > 0) { if(len > 0) {
socket_->readData(buf_+bufLen_, len); socket_->readData(buf_.get() + bufLen_, len);
bufLen_ += len; bufLen_ += len;
} else { } else {
A2_LOG_DEBUG("Buffer full"); A2_LOG_DEBUG("Buffer full");
@ -71,7 +70,7 @@ ssize_t SocketRecvBuffer::recv()
void SocketRecvBuffer::shiftBuffer(size_t offset) void SocketRecvBuffer::shiftBuffer(size_t offset)
{ {
assert(offset <= bufLen_); assert(offset <= bufLen_);
memmove(buf_, buf_+offset, bufLen_-offset); memmove(buf_.get(), buf_.get() + offset, bufLen_ - offset);
bufLen_ -= offset; bufLen_ -= offset;
} }

View File

@ -46,7 +46,7 @@ class SocketCore;
class SocketRecvBuffer { class SocketRecvBuffer {
public: public:
SocketRecvBuffer SocketRecvBuffer
(const std::shared_ptr<SocketCore>& socket, (std::shared_ptr<SocketCore> socket,
size_t capacity = 16*1024); size_t capacity = 16*1024);
~SocketRecvBuffer(); ~SocketRecvBuffer();
// Reads data from socket as much as capacity allows. Returns the // Reads data from socket as much as capacity allows. Returns the
@ -68,7 +68,7 @@ public:
const unsigned char* getBuffer() const const unsigned char* getBuffer() const
{ {
return buf_; return buf_.get();
} }
size_t getBufferLength() const size_t getBufferLength() const
@ -85,7 +85,7 @@ public:
private: private:
std::shared_ptr<SocketCore> socket_; std::shared_ptr<SocketCore> socket_;
size_t capacity_; size_t capacity_;
unsigned char* buf_; std::unique_ptr<unsigned char[]> buf_;
size_t bufLen_; size_t bufLen_;
}; };