Skip to content

Commit f1fb6b2

Browse files
committed
fix: use reference wrappers as ref data members
1 parent 363613d commit f1fb6b2

File tree

7 files changed

+34
-30
lines changed

7 files changed

+34
-30
lines changed

src/observer.cc

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -370,14 +370,14 @@ void Observer::Initialize(Module& module, Napi::Object& exports) {
370370
void Observer::Poller::ReadableCallback() {
371371
assert(read_deferred);
372372

373-
AsyncScope const scope(socket.Env(), socket.async_context);
374-
socket.Receive(take(read_deferred));
373+
AsyncScope const scope(socket.get().Env(), socket.get().async_context);
374+
socket.get().Receive(take(read_deferred));
375375
}
376376

377377
Napi::Value Observer::Poller::ReadPromise() {
378378
assert(!read_deferred);
379379

380-
read_deferred = Napi::Promise::Deferred(socket.Env());
380+
read_deferred = Napi::Promise::Deferred(socket.get().Env());
381381
return read_deferred->Promise();
382382
}
383383
} // namespace zmq

src/observer.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
#include <napi.h>
44

5+
#include <functional>
56
#include <optional>
67

78
#include "./closable.h"
@@ -38,11 +39,11 @@ class Observer : public Napi::ObjectWrap<Observer>, public Closable {
3839
force_inline void Receive(const Napi::Promise::Deferred& res);
3940

4041
class Poller : public zmq::Poller<Poller> {
41-
Observer& socket;
42+
std::reference_wrapper<Observer> socket;
4243
std::optional<Napi::Promise::Deferred> read_deferred;
4344

4445
public:
45-
explicit Poller(Observer& observer) : socket(observer) {}
46+
explicit Poller(std::reference_wrapper<Observer> observer) : socket(observer) {}
4647

4748
Napi::Value ReadPromise();
4849

@@ -51,7 +52,7 @@ class Observer : public Napi::ObjectWrap<Observer>, public Closable {
5152
}
5253

5354
[[nodiscard]] bool ValidateReadable() const {
54-
return socket.HasEvents();
55+
return socket.get().HasEvents();
5556
}
5657

5758
[[nodiscard]] static bool ValidateWritable() {

src/outgoing_msg.cc

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
11

22
#include "./outgoing_msg.h"
33

4+
#include <functional>
45
#include "./module.h"
56
#include "util/error.h"
67

78
namespace zmq {
8-
OutgoingMsg::OutgoingMsg(Napi::Value value, Module& module) {
9+
OutgoingMsg::OutgoingMsg(Napi::Value value, std::reference_wrapper<Module> module) {
910
static auto constexpr zero_copy_threshold = 1U << 7U;
1011

1112
auto buffer_send = [&](uint8_t* data, size_t length) {
@@ -94,7 +95,7 @@ OutgoingMsg::~OutgoingMsg() {
9495
}
9596

9697
void OutgoingMsg::Reference::Recycle() {
97-
module.MsgTrash.Add(this);
98+
module.get().MsgTrash.Add(this);
9899
}
99100

100101
OutgoingMsg::Parts::Parts(Napi::Value value, Module& module) {

src/outgoing_msg.h

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
#include <napi.h>
44

55
#include <forward_list>
6+
#include <functional>
67

78
#include "./zmq_inc.h"
89

@@ -23,7 +24,7 @@ class OutgoingMsg {
2324
/* Outgoing message. Takes a string or buffer argument and releases
2425
the underlying V8 resources whenever the message is sent, or earlier
2526
if the message was copied (small buffers & strings). */
26-
explicit OutgoingMsg(Napi::Value value, Module& module);
27+
explicit OutgoingMsg(Napi::Value value, std::reference_wrapper<Module> module);
2728
~OutgoingMsg();
2829

2930
zmq_msg_t* get() {
@@ -33,10 +34,10 @@ class OutgoingMsg {
3334
private:
3435
class Reference {
3536
Napi::Reference<Napi::Value> persistent;
36-
Module& module;
37+
std::reference_wrapper<Module> module;
3738

3839
public:
39-
explicit Reference(Napi::Value val, Module& module)
40+
explicit Reference(Napi::Value val, std::reference_wrapper<Module> module)
4041
: persistent(Napi::Persistent(val)), module(module) {}
4142

4243
void Recycle();

src/socket.cc

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ void Socket::Receive(const Napi::Promise::Deferred& res) {
311311
followed by a metadata object. */
312312
auto list = Napi::Array::New(Env(), 1);
313313

314-
uint32_t i = 0;
314+
uint32_t i_part = 0;
315315
while (true) {
316316
IncomingMsg part;
317317
while (zmq_msg_recv(part.get(), socket, ZMQ_DONTWAIT) < 0) {
@@ -321,7 +321,7 @@ void Socket::Receive(const Napi::Promise::Deferred& res) {
321321
}
322322
}
323323

324-
list[i++] = part.IntoBuffer(Env());
324+
list[i_part++] = part.IntoBuffer(Env());
325325

326326
#ifdef ZMQ_HAS_POLLABLE_THREAD_SAFE
327327
switch (type) {
@@ -953,33 +953,33 @@ void Socket::Initialize(Module& module, Napi::Object& exports) {
953953

954954
void Socket::Poller::ReadableCallback() {
955955
assert(read_deferred);
956-
socket.sync_operations = 0;
956+
socket.get().sync_operations = 0;
957957

958-
AsyncScope const scope(socket.Env(), socket.async_context);
959-
socket.Receive(take(read_deferred));
958+
AsyncScope const scope(socket.get().Env(), socket.get().async_context);
959+
socket.get().Receive(take(read_deferred));
960960
}
961961

962962
void Socket::Poller::WritableCallback() {
963963
assert(write_deferred);
964-
socket.sync_operations = 0;
964+
socket.get().sync_operations = 0;
965965

966-
AsyncScope const scope(socket.Env(), socket.async_context);
967-
socket.Send(take(write_deferred), write_value);
966+
AsyncScope const scope(socket.get().Env(), socket.get().async_context);
967+
socket.get().Send(take(write_deferred), write_value);
968968
write_value.Clear();
969969
}
970970

971971
Napi::Value Socket::Poller::ReadPromise() {
972972
assert(!read_deferred);
973973

974-
read_deferred = Napi::Promise::Deferred(socket.Env());
974+
read_deferred = Napi::Promise::Deferred(socket.get().Env());
975975
return read_deferred->Promise();
976976
}
977977

978978
Napi::Value Socket::Poller::WritePromise(OutgoingMsg::Parts&& parts) {
979979
assert(!write_deferred);
980980

981981
write_value = std::move(parts);
982-
write_deferred = Napi::Promise::Deferred(socket.Env());
982+
write_deferred = Napi::Promise::Deferred(socket.get().Env());
983983
return write_deferred->Promise();
984984
}
985985
} // namespace zmq

src/socket.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
#pragma once
22

3+
#include <functional>
34
#include <optional>
45

56
#include "./closable.h"
@@ -70,13 +71,13 @@ class Socket : public Napi::ObjectWrap<Socket>, public Closable {
7071
force_inline void Receive(const Napi::Promise::Deferred& res);
7172

7273
class Poller : public zmq::Poller<Poller> {
73-
Socket& socket;
74+
std::reference_wrapper<Socket> socket;
7475
std::optional<Napi::Promise::Deferred> read_deferred;
7576
std::optional<Napi::Promise::Deferred> write_deferred;
7677
OutgoingMsg::Parts write_value;
7778

7879
public:
79-
explicit Poller(Socket& socket) : socket(socket) {}
80+
explicit Poller(std::reference_wrapper<Socket> socket) : socket(socket) {}
8081

8182
Napi::Value ReadPromise();
8283
Napi::Value WritePromise(OutgoingMsg::Parts&& parts);
@@ -90,11 +91,11 @@ class Socket : public Napi::ObjectWrap<Socket>, public Closable {
9091
}
9192

9293
[[nodiscard]] bool ValidateReadable() const {
93-
return socket.HasEvents(ZMQ_POLLIN);
94+
return socket.get().HasEvents(ZMQ_POLLIN);
9495
}
9596

9697
[[nodiscard]] bool ValidateWritable() const {
97-
return socket.HasEvents(ZMQ_POLLOUT);
98+
return socket.get().HasEvents(ZMQ_POLLOUT);
9899
}
99100

100101
void ReadableCallback();

src/util/arguments.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ using Optional = Verify<F..., Undefined>;
6161

6262
template <typename... F>
6363
class Validator {
64-
static constexpr size_t N = sizeof...(F);
64+
static constexpr size_t NumArgs = sizeof...(F);
6565
std::tuple<F...> validators;
6666

6767
public:
@@ -85,10 +85,10 @@ class Validator {
8585
private:
8686
template <size_t I = 0>
8787
[[nodiscard]] std::optional<Napi::Error> eval(const Napi::CallbackInfo& info) const {
88-
if constexpr (I == N) {
89-
if (info.Length() > N) {
90-
auto msg =
91-
"Expected " + std::to_string(N) + " argument" + (N != 1 ? "s" : "");
88+
if constexpr (I == NumArgs) {
89+
if (info.Length() > NumArgs) {
90+
auto msg = "Expected " + std::to_string(NumArgs) + " argument"
91+
+ (NumArgs != 1 ? "s" : "");
9292
return Napi::TypeError::New(info.Env(), msg);
9393
}
9494

0 commit comments

Comments
 (0)