ruby-changes:69328
From: Nobuyoshi <ko1@a...>
Date: Fri, 22 Oct 2021 12:48:08 +0900 (JST)
Subject: [ruby-changes:69328] 4446942f1a (master): Extract UNPACK_FETCH
https://git.ruby-lang.org/ruby.git/commit/?id=4446942f1a From 4446942f1ab79b9687b009936d5365cfa846258f Mon Sep 17 00:00:00 2001 From: Nobuyoshi Nakada <nobu@r...> Date: Thu, 21 Oct 2021 21:52:17 +0900 Subject: Extract UNPACK_FETCH --- pack.c | 28 ++++++++++------------------ 1 file changed, 10 insertions(+), 18 deletions(-) diff --git a/pack.c b/pack.c index 280d45280d..031071b440 100644 --- a/pack.c +++ b/pack.c @@ -962,6 +962,8 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L962 p = RSTRING_PTR(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; while (p < pend) { int explicit_endian = 0; @@ -1271,8 +1273,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L1273 PACK_LENGTH_ADJUST_SIZE(sizeof(float)); while (len-- > 0) { float tmp; - memcpy(&tmp, s, sizeof(float)); - s += sizeof(float); + UNPACK_FETCH(&tmp, float); UNPACK_PUSH(DBL2NUM((double)tmp)); } PACK_ITEM_ADJUST(); @@ -1282,8 +1283,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L1283 PACK_LENGTH_ADJUST_SIZE(sizeof(float)); while (len-- > 0) { FLOAT_CONVWITH(tmp); - memcpy(tmp.buf, s, sizeof(float)); - s += sizeof(float); + UNPACK_FETCH(tmp.buf, float); VTOHF(tmp); UNPACK_PUSH(DBL2NUM(tmp.f)); } @@ -1294,8 +1294,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L1294 PACK_LENGTH_ADJUST_SIZE(sizeof(double)); while (len-- > 0) { DOUBLE_CONVWITH(tmp); - memcpy(tmp.buf, s, sizeof(double)); - s += sizeof(double); + UNPACK_FETCH(tmp.buf, double); VTOHD(tmp); UNPACK_PUSH(DBL2NUM(tmp.d)); } @@ -1307,8 +1306,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L1306 PACK_LENGTH_ADJUST_SIZE(sizeof(double)); while (len-- > 0) { double tmp; - memcpy(&tmp, s, sizeof(double)); - s += sizeof(double); + UNPACK_FETCH(&tmp, double); UNPACK_PUSH(DBL2NUM(tmp)); } PACK_ITEM_ADJUST(); @@ -1318,8 +1316,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L1316 PACK_LENGTH_ADJUST_SIZE(sizeof(float)); while (len-- > 0) { FLOAT_CONVWITH(tmp); - memcpy(tmp.buf, s, sizeof(float)); - s += sizeof(float); + UNPACK_FETCH(tmp.buf, float); NTOHF(tmp); UNPACK_PUSH(DBL2NUM(tmp.f)); } @@ -1330,8 +1327,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L1327 PACK_LENGTH_ADJUST_SIZE(sizeof(double)); while (len-- > 0) { DOUBLE_CONVWITH(tmp); - memcpy(tmp.buf, s, sizeof(double)); - s += sizeof(double); + UNPACK_FETCH(tmp.buf, double); NTOHD(tmp); UNPACK_PUSH(DBL2NUM(tmp.d)); } @@ -1542,9 +1538,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L1538 VALUE tmp = Qnil; char *t; - memcpy(&t, s, sizeof(char *)); - s += sizeof(char *); - + UNPACK_FETCH(&t, char *); if (t) { VALUE a; const VALUE *p, *pend; @@ -1585,9 +1579,7 @@ pack_unpack_internal(VALUE str, VALUE fmt, int mode) https://github.com/ruby/ruby/blob/trunk/pack.c#L1579 VALUE tmp = Qnil; char *t; - memcpy(&t, s, sizeof(char *)); - s += sizeof(char *); - + UNPACK_FETCH(&t, char *); if (t) { VALUE a; const VALUE *p, *pend; -- cgit v1.2.1 -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/