mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-set: refactor set_reset
- implement kset_rehash() - use kset_rehash() in set_reset() - remove no longer used kset_copy()
This commit is contained in:
+10
-17
@@ -206,6 +206,13 @@ kset_resize(mrb_state *mrb, kset_t *s, kset_int_t new_n_buckets)
|
||||
mrb_free(mrb, old_data);
|
||||
}
|
||||
|
||||
/* Resize set */
|
||||
static void
|
||||
kset_rehash(mrb_state *mrb, kset_t *s)
|
||||
{
|
||||
kset_resize(mrb, s, s->n_buckets);
|
||||
}
|
||||
|
||||
/* Add key to set with return status */
|
||||
static kset_iter_t
|
||||
kset_put2(mrb_state *mrb, kset_t *s, mrb_value key, int *ret)
|
||||
@@ -330,15 +337,6 @@ kset_copy_elements(mrb_state *mrb, kset_t *target, kset_t *source)
|
||||
}
|
||||
}
|
||||
|
||||
/* Copy set */
|
||||
static kset_t*
|
||||
kset_copy(mrb_state *mrb, kset_t *s)
|
||||
{
|
||||
kset_t *s2 = kset_init(mrb);
|
||||
kset_copy_elements(mrb, s2, s);
|
||||
return s2;
|
||||
}
|
||||
|
||||
/* Embedded set structure in RSet - exactly 3 pointers */
|
||||
struct RSet {
|
||||
MRB_OBJECT_HEADER;
|
||||
@@ -1357,15 +1355,10 @@ set_reset(mrb_state *mrb, mrb_value self)
|
||||
{
|
||||
mrb_check_frozen_value(mrb, self);
|
||||
|
||||
kset_t *old_set = set_get_kset(mrb, self);
|
||||
if (!kset_is_empty(old_set)) {
|
||||
kset_t *set = set_get_kset(mrb, self);
|
||||
if (!kset_is_empty(set)) {
|
||||
/* Create a new set by copying the old one */
|
||||
kset_t *new_set = kset_copy(mrb, old_set);
|
||||
|
||||
/* Replace the old data with the new one */
|
||||
kset_destroy_embedded(mrb, old_set);
|
||||
*old_set = *new_set;
|
||||
mrb_free(mrb, new_set);
|
||||
kset_rehash(mrb, set);
|
||||
}
|
||||
|
||||
return self;
|
||||
|
||||
Reference in New Issue
Block a user