mirror of
https://github.com/ruby/ruby.git
synced 2025-08-15 13:39:04 +02:00
Adding GC.compact
and compacting GC support.
This commit adds the new method `GC.compact` and compacting GC support. Please see this issue for caveats: https://bugs.ruby-lang.org/issues/15626 [Feature #15626] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@67576 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
fcd679ed11
commit
3c55b643ae
28 changed files with 1719 additions and 107 deletions
22
id_table.c
22
id_table.c
|
@ -266,6 +266,28 @@ rb_id_table_delete(struct rb_id_table *tbl, ID id)
|
|||
return hash_delete_index(tbl, index);
|
||||
}
|
||||
|
||||
void
|
||||
rb_id_table_foreach_with_replace(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, rb_id_table_update_callback_func_t *replace, void *data)
|
||||
{
|
||||
int i, capa = tbl->capa;
|
||||
|
||||
for (i=0; i<capa; i++) {
|
||||
if (ITEM_KEY_ISSET(tbl, i)) {
|
||||
const id_key_t key = ITEM_GET_KEY(tbl, i);
|
||||
enum rb_id_table_iterator_result ret = (*func)(Qundef, tbl->items[i].val, data);
|
||||
assert(key != 0);
|
||||
|
||||
if (ret == ID_TABLE_REPLACE) {
|
||||
VALUE val = tbl->items[i].val;
|
||||
ret = (*replace)(NULL, &val, data, TRUE);
|
||||
tbl->items[i].val = val;
|
||||
}
|
||||
else if (ret == ID_TABLE_STOP)
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
rb_id_table_foreach(struct rb_id_table *tbl, rb_id_table_foreach_func_t *func, void *data)
|
||||
{
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue