diff options
author | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-13 07:22:35 +0000 |
---|---|---|
committer | mrkn <mrkn@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-04-13 07:22:35 +0000 |
commit | 1b5acc876baaf80d17d1e142a488b63084035c68 (patch) | |
tree | 94732fa0524c8e8de8215728ecf3276b8ee820c5 /array.c | |
parent | 4e85feed334f1904ae35a222eae4d09560cef8eb (diff) |
array.c: Improve performance of Array#sort with float elements
* array.c (sort_2): improve performance of Array#sort with float elements.
* internal.h (cmp_opt_Float, cmp_opt_data): added for checking whether or not
Float#<=> can be optimizable.
* numeric.c (rb_float_cmp): added for internal use.
* internal.h (rb_float_cmp): ditto.
[Bug #13340]
[ruby-dev:50023]
[Fix GH-1539]
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@58333 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'array.c')
-rw-r--r-- | array.c | 3 |
1 files changed, 3 insertions, 0 deletions
@@ -2420,6 +2420,9 @@ sort_2(const void *ap, const void *bp, void *dummy) if (STRING_P(a) && STRING_P(b) && CMP_OPTIMIZABLE(data->cmp_opt, String)) { return rb_str_cmp(a, b); } + if (RB_FLOAT_TYPE_P(a) && CMP_OPTIMIZABLE(data->cmp_opt, Float)) { + return rb_float_cmp(a, b); + } retval = rb_funcallv(a, id_cmp, 1, &b); n = rb_cmpint(retval, a, b); |