diff options
author | Eric Wong <normalperson@yhbt.net> | 2013-09-26 21:32:44 +0000 |
---|---|---|
committer | Eric Wong <normalperson@yhbt.net> | 2013-09-26 21:32:44 +0000 |
commit | cda98c580e7fdc12f996d29436a13b282affc92e (patch) | |
tree | 073b24d13b31f799380564efa518a85400a109f6 | |
parent | 5deb65e7274a4187033a60c6c859fd92ccfce88e (diff) | |
download | sleepy_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.c | 8 | ||||
-rw-r--r-- | ext/sleepy_penguin/signalfd.c | 6 | ||||
-rw-r--r-- | ext/sleepy_penguin/util.c | 12 |
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)); |