mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
Merge pull request #2449 from take-cheeze/mrb_ary_resize
Add new API `mrb_ary_resize`(mruby implementation of `rb_ary_resize`).
This commit is contained in:
@@ -54,6 +54,7 @@ mrb_value mrb_ary_entry(mrb_value ary, mrb_int offset);
|
||||
mrb_value mrb_ary_shift(mrb_state *mrb, mrb_value self);
|
||||
mrb_value mrb_ary_clear(mrb_state *mrb, mrb_value self);
|
||||
mrb_value mrb_ary_join(mrb_state *mrb, mrb_value ary, mrb_value sep);
|
||||
mrb_value mrb_ary_resize(mrb_state *mrb, mrb_value ary, mrb_int len);
|
||||
|
||||
static inline mrb_int
|
||||
mrb_ary_len(mrb_state *mrb, mrb_value ary)
|
||||
|
||||
+22
@@ -231,6 +231,28 @@ ary_shrink_capa(mrb_state *mrb, struct RArray *a)
|
||||
}
|
||||
}
|
||||
|
||||
mrb_value
|
||||
mrb_ary_resize(mrb_state *mrb, mrb_value ary, mrb_int new_len)
|
||||
{
|
||||
mrb_int old_len;
|
||||
struct RArray *a = mrb_ary_ptr(ary);
|
||||
|
||||
ary_modify(mrb, a);
|
||||
old_len = RARRAY_LEN(ary);
|
||||
if (old_len != new_len) {
|
||||
a->len = new_len;
|
||||
if (new_len < old_len) {
|
||||
ary_shrink_capa(mrb, a);
|
||||
}
|
||||
else {
|
||||
ary_expand_capa(mrb, a, new_len);
|
||||
ary_fill_with_nil(a->ptr + old_len, new_len - old_len);
|
||||
}
|
||||
}
|
||||
|
||||
return ary;
|
||||
}
|
||||
|
||||
static mrb_value
|
||||
mrb_ary_s_create(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user