From 25b095b9d2fce8ed9a956910d4076b844d3b8824 Mon Sep 17 00:00:00 2001 From: Watson Date: Mon, 2 Jul 2012 13:24:14 +0900 Subject: [PATCH] add the implementation of NSArray#sort_by! --- NSArray.m | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/NSArray.m b/NSArray.m index 95f6c097e..43264ba96 100644 --- a/NSArray.m +++ b/NSArray.m @@ -616,6 +616,25 @@ return nsary_sort_bang(result, 0); } +static VALUE +nsary_sort_by_i(VALUE i) +{ + return rb_yield(OC2RB(i)); +} + +static VALUE +nsary_sort_by_bang(id rcv, SEL sel) +{ + RETURN_ENUMERATOR(rcv, 0, 0); + + CHECK_MUTABLE(rcv); + VALUE sorted = rb_objc_block_call((VALUE)rcv, sel_registerName("sort_by"), 0, 0, + nsary_sort_by_i, 0); + TRY_MOP([rcv setArray:(id)sorted]); + + return (VALUE)rcv; +} + static VALUE collect(id rcv) { @@ -1029,6 +1048,7 @@ rb_objc_define_method(rb_cArray, "reverse!", nsary_reverse_bang, 0); rb_objc_define_method(rb_cArray, "sort", nsary_sort, 0); rb_objc_define_method(rb_cArray, "sort!", nsary_sort_bang, 0); + rb_objc_define_method(rb_cArray, "sort_by!", nsary_sort_by_bang, 0); rb_objc_define_method(rb_cArray, "collect", nsary_collect, 0); rb_objc_define_method(rb_cArray, "collect!", nsary_collect_bang, 0); rb_objc_define_method(rb_cArray, "map", nsary_collect, 0);