[wpiutil] uv: use move for std::function (#3653)

Also use function_ref for Loop::Walk().
This commit is contained in:
Peter Johnson
2021-10-20 23:24:59 -07:00
committed by GitHub
parent 75fa1fbfbf
commit ac2f44da33
22 changed files with 55 additions and 42 deletions

View File

@@ -65,7 +65,7 @@ void EventLoopRunner::Stop() {
void EventLoopRunner::ExecAsync(LoopFunc func) {
if (auto thr = m_owner.GetThread()) {
if (auto doExec = thr->m_doExec.lock()) {
doExec->Call(func);
doExec->Call(std::move(func));
}
}
}
@@ -74,7 +74,7 @@ void EventLoopRunner::ExecSync(LoopFunc func) {
wpi::future<void> f;
if (auto thr = m_owner.GetThread()) {
if (auto doExec = thr->m_doExec.lock()) {
f = doExec->Call(func);
f = doExec->Call(std::move(func));
}
}
if (f.valid()) {

View File

@@ -44,7 +44,7 @@ void GetAddrInfo(Loop& loop, std::function<void(const addrinfo&)> callback,
std::string_view node, std::string_view service,
const addrinfo* hints) {
auto req = std::make_shared<GetAddrInfoReq>();
req->resolved.connect(callback);
req->resolved.connect(std::move(callback));
GetAddrInfo(loop, req, node, service, hints);
}

View File

@@ -39,7 +39,7 @@ void GetNameInfo(Loop& loop,
std::function<void(const char*, const char*)> callback,
const sockaddr& addr, int flags) {
auto req = std::make_shared<GetNameInfoReq>();
req->resolved.connect(callback);
req->resolved.connect(std::move(callback));
GetNameInfo(loop, req, addr, flags);
}
@@ -62,7 +62,8 @@ void GetNameInfo4(Loop& loop,
if (err < 0) {
loop.ReportError(err);
} else {
GetNameInfo(loop, callback, reinterpret_cast<const sockaddr&>(addr), flags);
GetNameInfo(loop, std::move(callback),
reinterpret_cast<const sockaddr&>(addr), flags);
}
}
@@ -85,7 +86,8 @@ void GetNameInfo6(Loop& loop,
if (err < 0) {
loop.ReportError(err);
} else {
GetNameInfo(loop, callback, reinterpret_cast<const sockaddr&>(addr), flags);
GetNameInfo(loop, std::move(callback),
reinterpret_cast<const sockaddr&>(addr), flags);
}
}

View File

@@ -51,12 +51,12 @@ void Loop::Close() {
}
}
void Loop::Walk(std::function<void(Handle&)> callback) {
void Loop::Walk(function_ref<void(Handle&)> callback) {
uv_walk(
m_loop,
[](uv_handle_t* handle, void* func) {
auto& h = *static_cast<Handle*>(handle->data);
auto& f = *static_cast<std::function<void(Handle&)>*>(func);
auto& f = *static_cast<function_ref<void(Handle&)>*>(func);
f(h);
},
&callback);

View File

@@ -23,7 +23,7 @@ void NetworkStream::Listen(int backlog) {
}
void NetworkStream::Listen(std::function<void()> callback, int backlog) {
connection.connect(callback);
connection.connect(std::move(callback));
Listen(backlog);
}

View File

@@ -28,7 +28,7 @@ void Pipe::Reuse(std::function<void()> callback, bool ipc) {
if (!m_reuseData) {
m_reuseData = std::make_unique<ReuseData>();
}
m_reuseData->callback = callback;
m_reuseData->callback = std::move(callback);
m_reuseData->ipc = ipc;
uv_close(GetRawHandle(), [](uv_handle_t* handle) {
Pipe& h = *static_cast<Pipe*>(handle->data);
@@ -85,7 +85,7 @@ void Pipe::Connect(std::string_view name,
void Pipe::Connect(std::string_view name, std::function<void()> callback) {
auto req = std::make_shared<PipeConnectReq>();
req->connected.connect(callback);
req->connected.connect(std::move(callback));
Connect(name, req);
}

View File

@@ -37,7 +37,7 @@ void Poll::Reuse(int fd, std::function<void()> callback) {
if (!m_reuseData) {
m_reuseData = std::make_unique<ReuseData>();
}
m_reuseData->callback = callback;
m_reuseData->callback = std::move(callback);
m_reuseData->isSocket = false;
m_reuseData->fd = fd;
uv_close(GetRawHandle(), [](uv_handle_t* handle) {
@@ -62,7 +62,7 @@ void Poll::ReuseSocket(uv_os_sock_t sock, std::function<void()> callback) {
if (!m_reuseData) {
m_reuseData = std::make_unique<ReuseData>();
}
m_reuseData->callback = callback;
m_reuseData->callback = std::move(callback);
m_reuseData->isSocket = true;
m_reuseData->sock = sock;
uv_close(GetRawHandle(), [](uv_handle_t* handle) {

View File

@@ -15,7 +15,8 @@ class CallbackWriteReq : public WriteReq {
CallbackWriteReq(span<const Buffer> bufs,
std::function<void(span<Buffer>, Error)> callback)
: m_bufs{bufs.begin(), bufs.end()} {
finish.connect([=](Error err) { callback(m_bufs, err); });
finish.connect(
[this, f = std::move(callback)](Error err) { f(m_bufs, err); });
}
private:
@@ -51,7 +52,7 @@ void Stream::Shutdown(const std::shared_ptr<ShutdownReq>& req) {
void Stream::Shutdown(std::function<void()> callback) {
auto req = std::make_shared<ShutdownReq>();
if (callback) {
req->complete.connect(callback);
req->complete.connect(std::move(callback));
}
Shutdown(req);
}
@@ -93,7 +94,7 @@ void Stream::Write(span<const Buffer> bufs,
void Stream::Write(span<const Buffer> bufs,
std::function<void(span<Buffer>, Error)> callback) {
Write(bufs, std::make_shared<CallbackWriteReq>(bufs, callback));
Write(bufs, std::make_shared<CallbackWriteReq>(bufs, std::move(callback)));
}
int Stream::TryWrite(span<const Buffer> bufs) {

View File

@@ -28,7 +28,7 @@ void Tcp::Reuse(std::function<void()> callback, unsigned int flags) {
if (!m_reuseData) {
m_reuseData = std::make_unique<ReuseData>();
}
m_reuseData->callback = callback;
m_reuseData->callback = std::move(callback);
m_reuseData->flags = flags;
uv_close(GetRawHandle(), [](uv_handle_t* handle) {
Tcp& h = *static_cast<Tcp*>(handle->data);
@@ -119,7 +119,7 @@ void Tcp::Connect(const sockaddr& addr,
void Tcp::Connect(const sockaddr& addr, std::function<void()> callback) {
auto req = std::make_shared<TcpConnectReq>();
req->connected.connect(callback);
req->connected.connect(std::move(callback));
Connect(addr, req);
}
@@ -141,7 +141,7 @@ void Tcp::Connect(std::string_view ip, unsigned int port,
if (err < 0) {
ReportError(err);
} else {
Connect(reinterpret_cast<const sockaddr&>(addr), callback);
Connect(reinterpret_cast<const sockaddr&>(addr), std::move(callback));
}
}
@@ -163,7 +163,7 @@ void Tcp::Connect6(std::string_view ip, unsigned int port,
if (err < 0) {
ReportError(err);
} else {
Connect(reinterpret_cast<const sockaddr&>(addr), callback);
Connect(reinterpret_cast<const sockaddr&>(addr), std::move(callback));
}
}

View File

@@ -24,8 +24,8 @@ void Timer::SingleShot(Loop& loop, Time timeout, std::function<void()> func) {
if (!h) {
return;
}
h->timeout.connect([theTimer = h.get(), func]() {
func();
h->timeout.connect([theTimer = h.get(), f = std::move(func)]() {
f();
theTimer->Close();
});
h->Start(timeout);

View File

@@ -20,7 +20,8 @@ class CallbackUdpSendReq : public UdpSendReq {
CallbackUdpSendReq(span<const Buffer> bufs,
std::function<void(span<Buffer>, Error)> callback)
: m_bufs{bufs.begin(), bufs.end()} {
complete.connect([=](Error err) { callback(m_bufs, err); });
complete.connect(
[this, f = std::move(callback)](Error err) { f(m_bufs, err); });
}
private:
@@ -137,7 +138,8 @@ void Udp::Send(const sockaddr& addr, span<const Buffer> bufs,
void Udp::Send(const sockaddr& addr, span<const Buffer> bufs,
std::function<void(span<Buffer>, Error)> callback) {
Send(addr, bufs, std::make_shared<CallbackUdpSendReq>(bufs, callback));
Send(addr, bufs,
std::make_shared<CallbackUdpSendReq>(bufs, std::move(callback)));
}
void Udp::Send(span<const Buffer> bufs,
@@ -157,7 +159,7 @@ void Udp::Send(span<const Buffer> bufs,
void Udp::Send(span<const Buffer> bufs,
std::function<void(span<Buffer>, Error)> callback) {
Send(bufs, std::make_shared<CallbackUdpSendReq>(bufs, callback));
Send(bufs, std::make_shared<CallbackUdpSendReq>(bufs, std::move(callback)));
}
void Udp::StartRecv() {

View File

@@ -39,10 +39,10 @@ void QueueWork(Loop& loop, std::function<void()> work,
std::function<void()> afterWork) {
auto req = std::make_shared<WorkReq>();
if (work) {
req->work.connect(work);
req->work.connect(std::move(work));
}
if (afterWork) {
req->afterWork.connect(afterWork);
req->afterWork.connect(std::move(afterWork));
}
QueueWork(loop, req);
}