From 3534fecbf8a1d828fa00d1f9e461cc12ac0e4e6e Mon Sep 17 00:00:00 2001 From: Michele Caini Date: Wed, 1 Feb 2017 17:56:55 +0100 Subject: [PATCH] ongoing review --- src/uvw/stream.hpp | 54 +++++++++++++++++++++------------------------- src/uvw/udp.hpp | 32 +++++++++++++-------------- 2 files changed, 40 insertions(+), 46 deletions(-) diff --git a/src/uvw/stream.hpp b/src/uvw/stream.hpp index 50efe2f3..2ca984b1 100644 --- a/src/uvw/stream.hpp +++ b/src/uvw/stream.hpp @@ -94,25 +94,25 @@ struct ShutdownReq final: public Request { class WriteReq final: public Request { public: - using Deleter = void(*)(uv_buf_t *); + using Deleter = void(*)(char *); - WriteReq(ConstructorAccess ca, std::shared_ptr loop, std::unique_ptr data, unsigned int ndata) + WriteReq(ConstructorAccess ca, std::shared_ptr loop, std::unique_ptr dt, unsigned int len) : Request{std::move(ca), std::move(loop)}, - bufs{std::move(data)}, - nbufs{ndata} + data{std::move(dt)}, + buf{uv_buf_init(data.get(), len)} {} void write(uv_stream_t *handle) { - invoke(&uv_write, get(), handle, bufs.get(), nbufs, &defaultCallback); + invoke(&uv_write, get(), handle, &buf, 1, &defaultCallback); } void write(uv_stream_t *handle, uv_stream_t *send) { - invoke(&uv_write2, get(), handle, bufs.get(), nbufs, send, &defaultCallback); + invoke(&uv_write2, get(), handle, &buf, 1, send, &defaultCallback); } private: - std::unique_ptr bufs; - unsigned int nbufs; + std::unique_ptr data; + uv_buf_t buf; }; @@ -170,7 +170,7 @@ public: * A ShutdownEvent event will be emitted after shutdown is complete. */ void shutdown() { - auto listener = [ptr = this->shared_from_this()](const auto &event, details::ShutdownReq &) { + auto listener = [ptr = this->shared_from_this()](const auto &event, const auto &) { ptr->publish(event); }; @@ -251,12 +251,11 @@ public: */ void write(std::unique_ptr data, unsigned int len) { auto req = this->loop().template resource( - std::unique_ptr{ - new uv_buf_t[1]{ uv_buf_init(data.release(), len) }, - [](uv_buf_t *bufs) { delete[] bufs->base; delete[] bufs; } - }, 1); + std::unique_ptr{ + data.release(), [](char *ptr) { delete[] ptr; } + }, len); - auto listener = [ptr = this->shared_from_this()](const auto &event, details::WriteReq &) { + auto listener = [ptr = this->shared_from_this()](const auto &event, const auto &) { ptr->publish(event); }; @@ -279,12 +278,11 @@ public: */ void write(char *data, unsigned int len) { auto req = this->loop().template resource( - std::unique_ptr{ - new uv_buf_t[1]{ uv_buf_init(data, len) }, - [](uv_buf_t *bufs) { delete[] bufs; } - }, 1); + std::unique_ptr{ + data, [](char *) {} + }, len); - auto listener = [ptr = this->shared_from_this()](const auto &event, details::WriteReq &) { + auto listener = [ptr = this->shared_from_this()](const auto &event, const auto &) { ptr->publish(event); }; @@ -315,12 +313,11 @@ public: template void write(S &send, std::unique_ptr data, unsigned int len) { auto req = this->loop().template resource( - std::unique_ptr{ - new uv_buf_t[1]{ uv_buf_init(data.release(), len) }, - [](uv_buf_t *bufs) { delete[] bufs->base; delete[] bufs; } - }, 1); + std::unique_ptr{ + data.release(), [](char *ptr) { delete[] ptr; } + }, len); - auto listener = [ptr = this->shared_from_this()](const auto &event, details::WriteReq &) { + auto listener = [ptr = this->shared_from_this()](const auto &event, const auto &) { ptr->publish(event); }; @@ -351,12 +348,11 @@ public: template void write(S &send, char *data, unsigned int len) { auto req = this->loop().template resource( - std::unique_ptr{ - new uv_buf_t[1]{ uv_buf_init(data, len) }, - [](uv_buf_t *bufs) { delete[] bufs; } - }, 1); + std::unique_ptr{ + data, [](char *) {} + }, len); - auto listener = [ptr = this->shared_from_this()](const auto &event, details::WriteReq &) { + auto listener = [ptr = this->shared_from_this()](const auto &event, const auto &) { ptr->publish(event); }; diff --git a/src/uvw/udp.hpp b/src/uvw/udp.hpp index 31212b85..91675241 100644 --- a/src/uvw/udp.hpp +++ b/src/uvw/udp.hpp @@ -59,21 +59,21 @@ enum class UVMembership: std::underlying_type_t { class SendReq final: public Request { public: - using Deleter = void(*)(uv_buf_t *); + using Deleter = void(*)(char *); - SendReq(ConstructorAccess ca, std::shared_ptr loop, std::unique_ptr data, unsigned int ndata) + SendReq(ConstructorAccess ca, std::shared_ptr loop, std::unique_ptr dt, unsigned int len) : Request{std::move(ca), std::move(loop)}, - bufs{std::move(data)}, - nbufs{ndata} + data{std::move(dt)}, + buf{uv_buf_init(data.get(), len)} {} void send(uv_udp_t *handle, const struct sockaddr* addr) { - invoke(&uv_udp_send, get(), handle, bufs.get(), nbufs, addr, &defaultCallback); + invoke(&uv_udp_send, get(), handle, &buf, 1, addr, &defaultCallback); } private: - std::unique_ptr bufs; - unsigned int nbufs; + std::unique_ptr data; + uv_buf_t buf; }; @@ -300,12 +300,11 @@ public: details::IpTraits::addrFunc(ip.data(), port, &addr); auto req = loop().resource( - std::unique_ptr{ - new uv_buf_t[1]{ uv_buf_init(data.release(), len) }, - [](uv_buf_t *bufs) { delete[] bufs->base; delete[] bufs; } - }, 1); + std::unique_ptr{ + data.release(), [](char *ptr) { delete[] ptr; } + }, len); - auto listener = [ptr = shared_from_this()](const auto &event, details::SendReq &) { + auto listener = [ptr = shared_from_this()](const auto &event, const auto &) { ptr->publish(event); }; @@ -360,12 +359,11 @@ public: details::IpTraits::addrFunc(ip.data(), port, &addr); auto req = loop().resource( - std::unique_ptr{ - new uv_buf_t[1]{ uv_buf_init(data, len) }, - [](uv_buf_t *bufs) { delete[] bufs; } - }, 1); + std::unique_ptr{ + data, [](char *) {} + }, len); - auto listener = [ptr = shared_from_this()](const auto &event, details::SendReq &) { + auto listener = [ptr = shared_from_this()](const auto &event, const auto &) { ptr->publish(event); };