mirror of
https://github.com/mruby/mruby
synced 2026-06-08 16:11:16 +00:00
mruby-os-memsize: support Set class
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user