Extract UNPACK_FETCH

This commit is contained in:
Nobuyoshi Nakada 2021-10-21 21:52:17 +09:00
parent 6469038ae2
commit 4446942f1a
No known key found for this signature in database
GPG Key ID: 7CD2805BFA3770C6

28
pack.c
View File

@ -962,6 +962,8 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
p = RSTRING_PTR(fmt); p = RSTRING_PTR(fmt);
pend = p + RSTRING_LEN(fmt); pend = p + RSTRING_LEN(fmt);
#define UNPACK_FETCH(var, type) (memcpy((var), s, sizeof(type)), s += sizeof(type))
ary = mode == UNPACK_ARRAY ? rb_ary_new() : Qnil; ary = mode == UNPACK_ARRAY ? rb_ary_new() : Qnil;
while (p < pend) { while (p < pend) {
int explicit_endian = 0; int explicit_endian = 0;
@ -1271,8 +1273,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(float)); PACK_LENGTH_ADJUST_SIZE(sizeof(float));
while (len-- > 0) { while (len-- > 0) {
float tmp; float tmp;
memcpy(&tmp, s, sizeof(float)); UNPACK_FETCH(&tmp, float);
s += sizeof(float);
UNPACK_PUSH(DBL2NUM((double)tmp)); UNPACK_PUSH(DBL2NUM((double)tmp));
} }
PACK_ITEM_ADJUST(); PACK_ITEM_ADJUST();
@ -1282,8 +1283,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(float)); PACK_LENGTH_ADJUST_SIZE(sizeof(float));
while (len-- > 0) { while (len-- > 0) {
FLOAT_CONVWITH(tmp); FLOAT_CONVWITH(tmp);
memcpy(tmp.buf, s, sizeof(float)); UNPACK_FETCH(tmp.buf, float);
s += sizeof(float);
VTOHF(tmp); VTOHF(tmp);
UNPACK_PUSH(DBL2NUM(tmp.f)); UNPACK_PUSH(DBL2NUM(tmp.f));
} }
@ -1294,8 +1294,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(double)); PACK_LENGTH_ADJUST_SIZE(sizeof(double));
while (len-- > 0) { while (len-- > 0) {
DOUBLE_CONVWITH(tmp); DOUBLE_CONVWITH(tmp);
memcpy(tmp.buf, s, sizeof(double)); UNPACK_FETCH(tmp.buf, double);
s += sizeof(double);
VTOHD(tmp); VTOHD(tmp);
UNPACK_PUSH(DBL2NUM(tmp.d)); UNPACK_PUSH(DBL2NUM(tmp.d));
} }
@ -1307,8 +1306,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(double)); PACK_LENGTH_ADJUST_SIZE(sizeof(double));
while (len-- > 0) { while (len-- > 0) {
double tmp; double tmp;
memcpy(&tmp, s, sizeof(double)); UNPACK_FETCH(&tmp, double);
s += sizeof(double);
UNPACK_PUSH(DBL2NUM(tmp)); UNPACK_PUSH(DBL2NUM(tmp));
} }
PACK_ITEM_ADJUST(); PACK_ITEM_ADJUST();
@ -1318,8 +1316,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(float)); PACK_LENGTH_ADJUST_SIZE(sizeof(float));
while (len-- > 0) { while (len-- > 0) {
FLOAT_CONVWITH(tmp); FLOAT_CONVWITH(tmp);
memcpy(tmp.buf, s, sizeof(float)); UNPACK_FETCH(tmp.buf, float);
s += sizeof(float);
NTOHF(tmp); NTOHF(tmp);
UNPACK_PUSH(DBL2NUM(tmp.f)); UNPACK_PUSH(DBL2NUM(tmp.f));
} }
@ -1330,8 +1327,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
PACK_LENGTH_ADJUST_SIZE(sizeof(double)); PACK_LENGTH_ADJUST_SIZE(sizeof(double));
while (len-- > 0) { while (len-- > 0) {
DOUBLE_CONVWITH(tmp); DOUBLE_CONVWITH(tmp);
memcpy(tmp.buf, s, sizeof(double)); UNPACK_FETCH(tmp.buf, double);
s += sizeof(double);
NTOHD(tmp); NTOHD(tmp);
UNPACK_PUSH(DBL2NUM(tmp.d)); UNPACK_PUSH(DBL2NUM(tmp.d));
} }
@ -1542,9 +1538,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
VALUE tmp = Qnil; VALUE tmp = Qnil;
char *t; char *t;
memcpy(&t, s, sizeof(char *)); UNPACK_FETCH(&t, char *);
s += sizeof(char *);
if (t) { if (t) {
VALUE a; VALUE a;
const VALUE *p, *pend; const VALUE *p, *pend;
@ -1585,9 +1579,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode)
VALUE tmp = Qnil; VALUE tmp = Qnil;
char *t; char *t;
memcpy(&t, s, sizeof(char *)); UNPACK_FETCH(&t, char *);
s += sizeof(char *);
if (t) { if (t) {
VALUE a; VALUE a;
const VALUE *p, *pend; const VALUE *p, *pend;