mruby-os-memsize: support Set class

This commit is contained in:
Yukihiro "Matz" Matsumoto
2025-06-24 13:56:07 +09:00
parent 132561418b
commit a6a0346e1c
3 changed files with 18 additions and 0 deletions
+1
View File
@@ -136,6 +136,7 @@ int mrb_rational_mark(mrb_state *mrb, struct RBasic *rat);
#ifdef MRB_USE_SET
size_t mrb_gc_mark_set(mrb_state *mrb, struct RBasic *set);
void mrb_gc_free_set(mrb_state *mrb, struct RBasic *set);
size_t mrb_set_memsize(mrb_value);
#endif
#ifdef MRUBY_PROC_H
+5
View File
@@ -156,6 +156,11 @@ os_memsize_of_object(mrb_state* mrb, mrb_value obj)
size += mrb_objspace_page_slot_size();
#endif
break;
#if defined(MRB_USE_SET)
case MRB_TT_SET:
size += mrb_set_memsize(obj);
break;
#endif
case MRB_TT_BIGINT:
#if defined(MRB_USE_BIGINT)
size += mrb_bint_memsize(obj);
+12
View File
@@ -80,6 +80,18 @@ mrb_gc_free_set(mrb_state *mrb, struct RBasic *obj)
}
}
size_t
mrb_set_memsize(mrb_value set)
{
size_t size = mrb_objspace_page_slot_size();
struct RSet *s = mrb_set_ptr(set);
if (s->kh) {
size += kh_size(s->kh) * sizeof(mrb_value);
}
return size;
}
/* Helper function to check if a value is a Set and return a boolean result */
static mrb_bool
set_is_set(mrb_state *mrb, mrb_value obj)