[前][次][番号順一覧][スレッド一覧]

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/

[前][次][番号順一覧][スレッド一覧]