about summary refs log tree commit homepage
diff options
context:
space:
mode:
authorEric Wong <normalperson@yhbt.net>2013-09-26 21:32:44 +0000
committerEric Wong <normalperson@yhbt.net>2013-09-26 21:32:44 +0000
commitcda98c580e7fdc12f996d29436a13b282affc92e (patch)
tree073b24d13b31f799380564efa518a85400a109f6
parent5deb65e7274a4187033a60c6c859fd92ccfce88e (diff)
downloadsleepy_penguin-cda98c580e7fdc12f996d29436a13b282affc92e.tar.gz
RARRAY_PTR incurs extra overhead on the Ruby 2.1.0 and Rubinius
GC implementations, so avoid it.  None of these are believed
to be performance-critical enough to benefit from RARRAY_PTR
in older Rubies, either.
-rw-r--r--ext/sleepy_penguin/inotify.c8
-rw-r--r--ext/sleepy_penguin/signalfd.c6
-rw-r--r--ext/sleepy_penguin/util.c12
3 files changed, 13 insertions, 13 deletions
diff --git a/ext/sleepy_penguin/inotify.c b/ext/sleepy_penguin/inotify.c
index 4e771a2..5771030 100644
--- a/ext/sleepy_penguin/inotify.c
+++ b/ext/sleepy_penguin/inotify.c
@@ -255,15 +255,15 @@ static VALUE take(int argc, VALUE *argv, VALUE self)
 static VALUE events(VALUE self)
 {
         long len = RARRAY_LEN(checks);
-        VALUE *ptr = RARRAY_PTR(checks);
+        long i;
         VALUE sym;
         VALUE rv = rb_ary_new();
         uint32_t mask;
         uint32_t event_mask = NUM2UINT(rb_funcall(self, id_mask, 0));
 
-        for (; (len -= 2) >= 0;) {
-                sym = *ptr++;
-                mask = NUM2UINT(*ptr++);
+        for (i = 0; i < len; ) {
+                sym = rb_ary_entry(checks, i++);
+                mask = NUM2UINT(rb_ary_entry(checks, i++));
                 if ((event_mask & mask) == mask)
                         rb_ary_push(rv, sym);
         }
diff --git a/ext/sleepy_penguin/signalfd.c b/ext/sleepy_penguin/signalfd.c
index 511745c..ebd6c86 100644
--- a/ext/sleepy_penguin/signalfd.c
+++ b/ext/sleepy_penguin/signalfd.c
@@ -44,11 +44,11 @@ static void value2sigset(sigset_t *mask, VALUE set)
         switch (TYPE(set)) {
         case T_NIL: return;
         case T_ARRAY: {
-                VALUE *ptr = RARRAY_PTR(set);
+                long i;
                 long len = RARRAY_LEN(set);
 
-                while (--len >= 0)
-                        sigaddset(mask, sig2int(*ptr++));
+                for (i = 0; i < len; i++)
+                        sigaddset(mask, sig2int(rb_ary_entry(set, i)));
                 }
                 break;
         default:
diff --git a/ext/sleepy_penguin/util.c b/ext/sleepy_penguin/util.c
index 11a1b13..717a099 100644
--- a/ext/sleepy_penguin/util.c
+++ b/ext/sleepy_penguin/util.c
@@ -14,13 +14,13 @@ int rb_sp_get_flags(VALUE klass, VALUE flags, int default_flags)
         case T_SYMBOL:
                 return NUM2INT(rb_const_get(klass_for(klass), SYM2ID(flags)));
         case T_ARRAY: {
-                VALUE *ptr = RARRAY_PTR(flags);
+                long i;
                 long len = RARRAY_LEN(flags);
                 int rv = 0;
 
                 klass = klass_for(klass);
-                while (--len >= 0) {
-                        VALUE tmp = *ptr++;
+                for (i = 0; i < len; i++) {
+                        VALUE tmp = rb_ary_entry(flags, i);
 
                         Check_Type(tmp, T_SYMBOL);
                         tmp = rb_const_get(klass, SYM2ID(tmp));
@@ -42,13 +42,13 @@ unsigned rb_sp_get_uflags(VALUE klass, VALUE flags)
         case T_SYMBOL:
                 return NUM2UINT(rb_const_get(klass_for(klass), SYM2ID(flags)));
         case T_ARRAY: {
-                VALUE *ptr = RARRAY_PTR(flags);
+                long i;
                 long len = RARRAY_LEN(flags);
                 unsigned rv = 0;
 
                 klass = klass_for(klass);
-                while (--len >= 0) {
-                        VALUE tmp = *ptr++;
+                for (i = 0; i < len; i++) {
+                        VALUE tmp = rb_ary_entry(flags, i);
 
                         Check_Type(tmp, T_SYMBOL);
                         tmp = rb_const_get(klass, SYM2ID(tmp));