Skip to content

Commit ab51ffb

Browse files
committed
further code cleanups
1 parent cdaf877 commit ab51ffb

File tree

3 files changed

+29
-33
lines changed

3 files changed

+29
-33
lines changed

R/sendrecv.R

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -166,8 +166,8 @@ send.nanoStream <- function(con,
166166
#' to set a positive integer value for \code{block} rather than FALSE.
167167
#'
168168
#' @examples
169-
#' s1 <- socket("bus", listen = "inproc://nanonext")
170-
#' s2 <- socket("bus", dial = "inproc://nanonext")
169+
#' s1 <- socket("pair", listen = "inproc://nanonext")
170+
#' s2 <- socket("pair", dial = "inproc://nanonext")
171171
#'
172172
#' send(s1, data.frame(a = 1, b = 2))
173173
#' res <- recv(s2)

man/recv.Rd

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/core.c

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -99,19 +99,24 @@ SEXP rawOneString(unsigned char *bytes, R_xlen_t nbytes, R_xlen_t *np) {
9999

100100
SEXP nano_decode(unsigned char *buf, const size_t sz, const int mod, const int kpr) {
101101

102-
int p = 0, tryErr = 0;
102+
int tryErr = 0;
103103
SEXP raw, data;
104104

105105
switch (mod) {
106106
case 1:
107-
PROTECT(raw = Rf_allocVector(RAWSXP, sz)); p++;
107+
PROTECT(raw = Rf_allocVector(RAWSXP, sz));
108108
memcpy(RAW(raw), buf, sz);
109109
SEXP expr;
110-
PROTECT(expr = Rf_lang2(nano_UnserSymbol, raw)); p++;
111-
PROTECT(data = R_tryEval(expr, R_BaseEnv, &tryErr)); p++;
110+
PROTECT(expr = Rf_lang2(nano_UnserSymbol, raw));
111+
data = R_tryEval(expr, R_BaseEnv, &tryErr);
112+
UNPROTECT(1);
113+
if (tryErr) {
114+
data = raw;
115+
raw = R_NilValue;
116+
}
112117
break;
113118
case 2:
114-
PROTECT(data = Rf_allocVector(STRSXP, sz)); p++;
119+
PROTECT(data = Rf_allocVector(STRSXP, sz));
115120
R_xlen_t i, m, nbytes = sz, np = 0;
116121
for (i = 0, m = 0; i < sz; i++) {
117122
SEXP onechar = rawOneString(buf, nbytes, &np);
@@ -122,63 +127,56 @@ SEXP nano_decode(unsigned char *buf, const size_t sz, const int mod, const int k
122127
SETLENGTH(data, m);
123128
break;
124129
case 3:
125-
PROTECT(data = Rf_allocVector(CPLXSXP, sz / (sizeof(double) * 2))); p++;
130+
PROTECT(data = Rf_allocVector(CPLXSXP, sz / (sizeof(double) * 2)));
126131
memcpy(COMPLEX(data), buf, sz);
127132
break;
128133
case 4:
129-
PROTECT(data = Rf_allocVector(REALSXP, sz / sizeof(double))); p++;
134+
PROTECT(data = Rf_allocVector(REALSXP, sz / sizeof(double)));
130135
memcpy(REAL(data), buf, sz);
131136
break;
132137
case 5:
133-
PROTECT(data = Rf_allocVector(INTSXP, sz / sizeof(int))); p++;
138+
PROTECT(data = Rf_allocVector(INTSXP, sz / sizeof(int)));
134139
memcpy(INTEGER(data), buf, sz);
135140
break;
136141
case 6:
137-
PROTECT(data = Rf_allocVector(LGLSXP, sz / sizeof(int))); p++;
142+
PROTECT(data = Rf_allocVector(LGLSXP, sz / sizeof(int)));
138143
memcpy(LOGICAL(data), buf, sz);
139144
break;
140145
case 7:
141-
PROTECT(data = Rf_allocVector(REALSXP, sz / sizeof(double))); p++;
146+
PROTECT(data = Rf_allocVector(REALSXP, sz / sizeof(double)));
142147
memcpy(REAL(data), buf, sz);
143148
break;
144149
case 8:
145-
PROTECT(data = Rf_allocVector(RAWSXP, sz)); p++;
150+
PROTECT(data = Rf_allocVector(RAWSXP, sz));
146151
memcpy(RAW(data), buf, sz);
147152
break;
148153
default:
149-
PROTECT(data = R_NilValue); p++;
150-
break;
154+
PROTECT(data = R_NilValue);
151155
}
152156

153157
if (kpr) {
154-
155158
SEXP out;
156159
const char *names[] = {"raw", "data", ""};
157-
158160
switch (mod) {
159161
case 1:
160-
if (tryErr) {
161-
PROTECT(data = raw); p++;
162-
PROTECT(raw = R_NilValue); p++;
163-
}
162+
PROTECT(data);
164163
break;
165164
case 8:
166-
PROTECT(raw = data); p++;
165+
PROTECT(raw = data);
167166
break;
168167
default:
169-
PROTECT(raw = Rf_allocVector(RAWSXP, sz)); p++;
168+
PROTECT(raw = Rf_allocVector(RAWSXP, sz));
170169
memcpy(RAW(raw), buf, sz);
171170
}
172-
173-
PROTECT(out = Rf_mkNamed(VECSXP, names)); p++;
171+
PROTECT(out = Rf_mkNamed(VECSXP, names));
174172
SET_VECTOR_ELT(out, 0, raw);
175173
SET_VECTOR_ELT(out, 1, data);
176174

177-
UNPROTECT(p);
175+
UNPROTECT(3);
178176
return out;
179177
}
180178

181-
UNPROTECT(p);
179+
UNPROTECT(1);
182180
return data;
183181

184182
}
@@ -741,7 +739,7 @@ SEXP rnng_stream_send(SEXP stream, SEXP data, SEXP timeout) {
741739
const R_xlen_t xlen = Rf_xlength(enc);
742740
unsigned char *dp = RAW(enc);
743741

744-
const int frames = LOGICAL(Rf_getAttrib(stream, nano_TextframesSymbol))[0];
742+
const int frames = *LOGICAL(Rf_getAttrib(stream, nano_TextframesSymbol));
745743
iov.iov_len = frames == 1 ? xlen - 1 : xlen;
746744
iov.iov_buf = dp;
747745

@@ -781,7 +779,6 @@ SEXP rnng_stream_recv(SEXP stream, SEXP mode, SEXP timeout, SEXP keep, SEXP byte
781779
int xc;
782780
nng_iov iov;
783781
nng_aio *aiop;
784-
size_t sz;
785782
SEXP res;
786783

787784
iov.iov_len = xlen;
@@ -811,8 +808,7 @@ SEXP rnng_stream_recv(SEXP stream, SEXP mode, SEXP timeout, SEXP keep, SEXP byte
811808
return mk_error(xc);
812809
}
813810

814-
sz = nng_aio_count(aiop);
815-
res = nano_decode(iov.iov_buf, sz, mod, kpr);
811+
res = nano_decode(iov.iov_buf, nng_aio_count(aiop), mod, kpr);
816812
nng_aio_free(aiop);
817813
R_Free(iov.iov_buf);
818814

0 commit comments

Comments
 (0)