id_table.c: reduce duplication in managed_id_table methods

This commit is contained in:
Jean Boussier 2025-07-15 11:34:54 +02:00
parent 562599e6bc
commit 6fd108dd6b

View file

@ -358,6 +358,9 @@ static const rb_data_type_t managed_id_table_type = {
static inline struct rb_id_table * static inline struct rb_id_table *
managed_id_table_ptr(VALUE obj) managed_id_table_ptr(VALUE obj)
{ {
RUBY_ASSERT(RB_TYPE_P(obj, T_DATA));
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(obj), &managed_id_table_type));
return RTYPEDDATA_GET_DATA(obj); return RTYPEDDATA_GET_DATA(obj);
} }
@ -381,12 +384,9 @@ managed_id_table_dup_i(ID id, VALUE val, void *data)
VALUE VALUE
rb_managed_id_table_dup(VALUE old_table) rb_managed_id_table_dup(VALUE old_table)
{ {
RUBY_ASSERT(RB_TYPE_P(old_table, T_DATA));
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(old_table), &managed_id_table_type));
struct rb_id_table *new_tbl; struct rb_id_table *new_tbl;
VALUE obj = TypedData_Make_Struct(0, struct rb_id_table, &managed_id_table_type, new_tbl); VALUE obj = TypedData_Make_Struct(0, struct rb_id_table, &managed_id_table_type, new_tbl);
struct rb_id_table *old_tbl = RTYPEDDATA_GET_DATA(old_table); struct rb_id_table *old_tbl = managed_id_table_ptr(old_table);
rb_id_table_init(new_tbl, old_tbl->num + 1); rb_id_table_init(new_tbl, old_tbl->num + 1);
rb_id_table_foreach(old_tbl, managed_id_table_dup_i, new_tbl); rb_id_table_foreach(old_tbl, managed_id_table_dup_i, new_tbl);
return obj; return obj;
@ -395,35 +395,23 @@ rb_managed_id_table_dup(VALUE old_table)
int int
rb_managed_id_table_lookup(VALUE table, ID id, VALUE *valp) rb_managed_id_table_lookup(VALUE table, ID id, VALUE *valp)
{ {
RUBY_ASSERT(RB_TYPE_P(table, T_DATA)); return rb_id_table_lookup(managed_id_table_ptr(table), id, valp);
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(table), &managed_id_table_type));
return rb_id_table_lookup(RTYPEDDATA_GET_DATA(table), id, valp);
} }
int int
rb_managed_id_table_insert(VALUE table, ID id, VALUE val) rb_managed_id_table_insert(VALUE table, ID id, VALUE val)
{ {
RUBY_ASSERT(RB_TYPE_P(table, T_DATA)); return rb_id_table_insert(managed_id_table_ptr(table), id, val);
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(table), &managed_id_table_type));
return rb_id_table_insert(RTYPEDDATA_GET_DATA(table), id, val);
} }
size_t size_t
rb_managed_id_table_size(VALUE table) rb_managed_id_table_size(VALUE table)
{ {
RUBY_ASSERT(RB_TYPE_P(table, T_DATA)); return rb_id_table_size(managed_id_table_ptr(table));
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(table), &managed_id_table_type));
return rb_id_table_size(RTYPEDDATA_GET_DATA(table));
} }
void void
rb_managed_id_table_foreach(VALUE table, rb_id_table_foreach_func_t *func, void *data) rb_managed_id_table_foreach(VALUE table, rb_id_table_foreach_func_t *func, void *data)
{ {
RUBY_ASSERT(RB_TYPE_P(table, T_DATA)); rb_id_table_foreach(managed_id_table_ptr(table), func, data);
RUBY_ASSERT(rb_typeddata_inherited_p(RTYPEDDATA_TYPE(table), &managed_id_table_type));
rb_id_table_foreach(RTYPEDDATA_GET_DATA(table), func, data);
} }